<?php 
 
/** 
 * A driver for the PHP OpenID unit tests. 
 * 
 * PHP versions 4 and 5 
 * 
 * LICENSE: See the COPYING file included in this distribution. 
 * 
 * @package OpenID 
 * @author JanRain, Inc. <[email protected]> 
 * @copyright 2005-2008 Janrain, Inc. 
 * @license http://www.apache.org/licenses/LICENSE-2.0 Apache 
 */ 
 
require_once 'PHPUnit/Framework.php'; 
//require_once 'PHPUnit/GUI/HTML.php'; 
 
error_reporting(E_ALL | E_STRICT); 
 
global $__test_errors; 
$__test_errors = array(); 
 
function __handler($code, $message) 
{ 
    global $__test_errors; 
 
    if ($code == E_USER_WARNING) { 
        $__test_errors[] = $message; 
    } 
} 
 
function __raiseError($message) 
{ 
    set_error_handler('__handler'); 
    trigger_error($message, E_USER_WARNING); 
    restore_error_handler(); 
} 
 
function __getError() 
{ 
    global $__test_errors; 
    if ($__test_errors) { 
        return array_pop($__test_errors); 
    } 
    return null; 
} 
 
/** 
 * Load the tests that are defined in the named modules. 
 * 
 * If you have Tests/Foo.php which defines a test class called 
 * Tests_Foo, the call would look like: 
 * 
 * loadTests('Tests/', array('Foo')) 
 * 
 * @param string $test_dir The root of the test hierarchy. Must end 
 * with a / 
 * 
 * @param array $test_names The names of the modules in which the 
 * tests are defined. This should not include the root of the test 
 * hierarchy. 
 */ 
function loadTests($test_dir, $test_names) 
{ 
    global $_tests; 
    $suites = array(); 
 
    foreach ($test_names as $filename) { 
        $filename = $test_dir . $filename . '.php'; 
 
        if (!global_require_once($filename)) { 
            continue; 
        } 
 
        $class_name = str_replace('/', '_', $filename); 
        $class_name = basename($class_name, '.php'); 
 
        $suites[] = makeSuite($class_name); 
    } 
 
    return $suites; 
} 
 
function makeSuite($class_name) { 
    $test = new $class_name($class_name); 
 
    if (is_a($test, 'PHPUnit_Framework_TestCase')) { 
        $s = new PHPUnit_Framework_TestSuite(); 
        $s->setName($class_name); 
        $s->addTestSuite($class_name); 
        $test = $s; 
    } 
 
    $tc_array_name = $class_name . '_other'; 
    if (array_key_exists($tc_array_name, $GLOBALS) && 
        is_array($GLOBALS[$tc_array_name])) { 
 
        foreach ($GLOBALS[$tc_array_name] as $tc) { 
            $test->addTestSuite(get_class($tc)); 
        } 
    } 
 
    return $test; 
} 
 
 
function global_require_once($name) 
{ 
    $f = include_once $name; 
    if (!$f) { 
        print("global require once skipping $name\n"); 
        return false; 
    } 
    foreach (get_defined_vars() as $k => $v) { 
        if (!in_array($k, array('name', 'GLOBALS'))) { 
            $GLOBALS[$k] = $v; 
        } 
    } 
    return true; 
} 
 
$_tests = array( 
                array( 
                      'dir' => 'Tests/Auth/OpenID/', 
                      'files' => array( 
                                       'Association', 
                                       'AssociationResponse', 
                                       'AuthRequest', 
                                       'AX', 
                                       'BigMath', 
                                       'Consumer', 
                                       'CryptUtil', 
                                       'DiffieHellman', 
                                       'Discover_OpenID', 
                                       'Extension', 
                                       'HMAC', 
                                       'KVForm', 
                                       'Message', 
                                       'Negotiation', 
                                       'Nonce', 
                                       'OpenID_Yadis', 
                                       'PAPE', 
                                       'Parse', 
                                       'RPVerify', 
                                       'Server', 
                                       'SReg', 
                                       'StoreTest', 
                                       'TrustRoot', 
                                       'URINorm', 
                                       'Util', 
                                       'VerifyDisco'), 
                      ), 
                array( 
                      'dir' => 'Tests/Auth/Yadis/', 
                      'files' => array( 
                                       'ParseHTML', 
                                       'XRDS', 
                                       'Yadis', 
                                       'Discover_Yadis', 
                                       'XRI' 
                                       ) 
                      ) 
                ); 
 
function selectTests($package, $names) 
{ 
    global $_tests; 
    $lnames = array_map('strtolower', $names); 
    $include = array(); 
    $exclude = array(); 
    foreach ($package['files'] as $t) { 
        $l = strtolower($t); 
        if (in_array($l, $lnames)) { 
            $include[] = $t; 
        } 
 
        if (in_array("/$l", $lnames)) { 
            $exclude[] = $t; 
        } 
    } 
 
    return array_diff($include, $exclude); 
} 
 
// Load OpenID library tests 
function loadSuite($names=null) 
{ 
    global $_tests; 
    $result = array(); 
    foreach ($_tests as $package) { 
        if (!$names) { 
            $selected = $package['files']; 
        } else { 
            $selected = selectTests($package, $names); 
        } 
        $result = array_merge($result, loadTests($package['dir'], $selected)); 
    } 
 
    return $result; 
} 
 
 
 |