* @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; }