203 lines
5.4 KiB
PHP
203 lines
5.4 KiB
PHP
|
<?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. <openid@janrain.com>
|
||
|
* @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;
|
||
|
}
|
||
|
|