|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00012 if (version_compare(phpversion(), '5') >= 0) { 00013 require_once(dirname(__FILE__) . '/reflection_php5.php'); 00014 } else { 00015 require_once(dirname(__FILE__) . '/reflection_php4.php'); 00016 } 00017 require_once(dirname(__FILE__) . '/default_reporter.php'); 00018 require_once(dirname(__FILE__) . '/compatibility.php'); 00027 class SimpleTest { 00028 00035 function getVersion() { 00036 $content = file(dirname(__FILE__) . '/VERSION'); 00037 return trim($content[0]); 00038 } 00039 00049 function ignore($class) { 00050 $registry = &SimpleTest::_getRegistry(); 00051 $registry['IgnoreList'][strtolower($class)] = true; 00052 } 00053 00069 function ignoreParentsIfIgnored($classes) { 00070 $registry = &SimpleTest::_getRegistry(); 00071 foreach ($classes as $class) { 00072 if (SimpleTest::isIgnored($class)) { 00073 $reflection = new SimpleReflection($class); 00074 if ($parent = $reflection->getParent()) { 00075 SimpleTest::ignore($parent); 00076 } 00077 } 00078 } 00079 } 00080 00090 function prefer(&$object) { 00091 $registry = &SimpleTest::_getRegistry(); 00092 $registry['Preferred'][] = &$object; 00093 } 00094 00105 function &preferred($classes) { 00106 if (! is_array($classes)) { 00107 $classes = array($classes); 00108 } 00109 $registry = &SimpleTest::_getRegistry(); 00110 for ($i = count($registry['Preferred']) - 1; $i >= 0; $i--) { 00111 foreach ($classes as $class) { 00112 if (SimpleTestCompatibility::isA($registry['Preferred'][$i], $class)) { 00113 return $registry['Preferred'][$i]; 00114 } 00115 } 00116 } 00117 return null; 00118 } 00119 00131 function isIgnored($class) { 00132 $registry = &SimpleTest::_getRegistry(); 00133 return isset($registry['IgnoreList'][strtolower($class)]); 00134 } 00135 00139 function setMockBaseClass($mock_base) { 00140 $registry = &SimpleTest::_getRegistry(); 00141 $registry['MockBaseClass'] = $mock_base; 00142 } 00143 00147 function getMockBaseClass() { 00148 $registry = &SimpleTest::_getRegistry(); 00149 return $registry['MockBaseClass']; 00150 } 00151 00162 function useProxy($proxy, $username = false, $password = false) { 00163 $registry = &SimpleTest::_getRegistry(); 00164 $registry['DefaultProxy'] = $proxy; 00165 $registry['DefaultProxyUsername'] = $username; 00166 $registry['DefaultProxyPassword'] = $password; 00167 } 00168 00174 function getDefaultProxy() { 00175 $registry = &SimpleTest::_getRegistry(); 00176 return $registry['DefaultProxy']; 00177 } 00178 00184 function getDefaultProxyUsername() { 00185 $registry = &SimpleTest::_getRegistry(); 00186 return $registry['DefaultProxyUsername']; 00187 } 00188 00194 function getDefaultProxyPassword() { 00195 $registry = &SimpleTest::_getRegistry(); 00196 return $registry['DefaultProxyPassword']; 00197 } 00198 00205 function &_getRegistry() { 00206 static $registry = false; 00207 if (! $registry) { 00208 $registry = SimpleTest::_getDefaults(); 00209 } 00210 return $registry; 00211 } 00212 00220 function &getContext() { 00221 static $context = false; 00222 if (! $context) { 00223 $context = new SimpleTestContext(); 00224 } 00225 return $context; 00226 } 00227 00234 function _getDefaults() { 00235 return array( 00236 'StubBaseClass' => 'SimpleStub', 00237 'MockBaseClass' => 'SimpleMock', 00238 'IgnoreList' => array(), 00239 'DefaultProxy' => false, 00240 'DefaultProxyUsername' => false, 00241 'DefaultProxyPassword' => false, 00242 'Preferred' => array(new HtmlReporter(), new TextReporter(), new XmlReporter())); 00243 } 00244 } 00245 00254 class SimpleTestContext { 00255 var $_test; 00256 var $_reporter; 00257 var $_resources; 00258 00263 function clear() { 00264 $this->_resources = array(); 00265 } 00266 00274 function setTest(&$test) { 00275 $this->clear(); 00276 $this->_test = &$test; 00277 } 00278 00279 //moodlefix begins 00286 function unsetTest() { 00287 $this->clear(); 00288 $this->_test = NULL; 00289 } 00290 00291 //moodlefix ends 00297 function &getTest() { 00298 return $this->_test; 00299 } 00300 00308 function setReporter(&$reporter) { 00309 $this->clear(); 00310 $this->_reporter = &$reporter; 00311 } 00312 00318 function &getReporter() { 00319 return $this->_reporter; 00320 } 00321 00328 function &get($resource) { 00329 if (! isset($this->_resources[$resource])) { 00330 $this->_resources[$resource] = new $resource(); 00331 } 00332 return $this->_resources[$resource]; 00333 } 00334 } 00335 00342 class SimpleStackTrace { 00343 var $_prefixes; 00344 00350 function SimpleStackTrace($prefixes) { 00351 $this->_prefixes = $prefixes; 00352 } 00353 00362 function traceMethod($stack = false) { 00363 $stack = $stack ? $stack : $this->_captureTrace(); 00364 foreach ($stack as $frame) { 00365 if ($this->_frameLiesWithinSimpleTestFolder($frame)) { 00366 continue; 00367 } 00368 if ($this->_frameMatchesPrefix($frame)) { 00369 return ' at [' . $frame['file'] . ' line ' . $frame['line'] . ']'; 00370 } 00371 } 00372 return ''; 00373 } 00374 00381 function _frameLiesWithinSimpleTestFolder($frame) { 00382 if (isset($frame['file'])) { 00383 $path = substr(SIMPLE_TEST, 0, -1); 00384 if (strpos($frame['file'], $path) === 0) { 00385 if (dirname($frame['file']) == $path) { 00386 return true; 00387 } 00388 } 00389 } 00390 return false; 00391 } 00392 00399 function _frameMatchesPrefix($frame) { 00400 foreach ($this->_prefixes as $prefix) { 00401 if (strncmp($frame['function'], $prefix, strlen($prefix)) == 0) { 00402 return true; 00403 } 00404 } 00405 return false; 00406 } 00407 00413 function _captureTrace() { 00414 if (function_exists('debug_backtrace')) { 00415 return array_reverse(debug_backtrace()); 00416 } 00417 return array(); 00418 } 00419 } 00420 00426 class SimpleTestOptions extends SimpleTest { 00427 00431 function getVersion() { 00432 return Simpletest::getVersion(); 00433 } 00434 00438 function ignore($class) { 00439 return Simpletest::ignore($class); 00440 } 00441 00445 function isIgnored($class) { 00446 return Simpletest::isIgnored($class); 00447 } 00448 00452 function setMockBaseClass($mock_base) { 00453 return Simpletest::setMockBaseClass($mock_base); 00454 } 00455 00459 function getMockBaseClass() { 00460 return Simpletest::getMockBaseClass(); 00461 } 00462 00466 function useProxy($proxy, $username = false, $password = false) { 00467 return Simpletest::useProxy($proxy, $username, $password); 00468 } 00469 00473 function getDefaultProxy() { 00474 return Simpletest::getDefaultProxy(); 00475 } 00476 00480 function getDefaultProxyUsername() { 00481 return Simpletest::getDefaultProxyUsername(); 00482 } 00483 00487 function getDefaultProxyPassword() { 00488 return Simpletest::getDefaultProxyPassword(); 00489 } 00490 } 00491 ?>