forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			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; | ||
|  | } | ||
|  | 
 |