MediaWiki
REL1_21
|
00001 <?php 00002 class AutoLoaderTest extends MediaWikiTestCase { 00003 00004 public function testAutoLoadConfig() { 00005 $results = self::checkAutoLoadConf(); 00006 00007 $this->assertEquals( 00008 $results['expected'], 00009 $results['actual'] 00010 ); 00011 } 00012 00013 protected static function checkAutoLoadConf() { 00014 global $wgAutoloadLocalClasses, $wgAutoloadClasses, $IP; 00015 static $supportsParsekit; 00016 $supportsParsekit = function_exists( 'parsekit_compile_file' ); 00017 00018 // wgAutoloadLocalClasses has precedence, just like in includes/AutoLoader.php 00019 $expected = $wgAutoloadLocalClasses + $wgAutoloadClasses; 00020 $actual = array(); 00021 00022 $files = array_unique( $expected ); 00023 00024 foreach ( $files as $file ) { 00025 // Only prefix $IP if it doesn't have it already. 00026 // Generally local classes don't have it, and those from extensions and test suites do. 00027 if ( substr( $file, 0, 1 ) != '/' && substr( $file, 1, 1 ) != ':' ) { 00028 $filePath = "$IP/$file"; 00029 } else { 00030 $filePath = $file; 00031 } 00032 if ( $supportsParsekit ) { 00033 $parseInfo = parsekit_compile_file( "$filePath" ); 00034 $classes = array_keys( $parseInfo['class_table'] ); 00035 } else { 00036 $contents = file_get_contents( "$filePath" ); 00037 $m = array(); 00038 preg_match_all( '/\n\s*(?:final)?\s*(?:abstract)?\s*(?:class|interface)\s+([a-zA-Z0-9_]+)/', $contents, $m, PREG_PATTERN_ORDER ); 00039 $classes = $m[1]; 00040 } 00041 foreach ( $classes as $class ) { 00042 $actual[$class] = $file; 00043 } 00044 } 00045 00046 return array( 00047 'expected' => $expected, 00048 'actual' => $actual, 00049 ); 00050 } 00051 }