Merge "Change name of section so it does not get confused with Wikidata"
[lhc/web/wiklou.git] / tests / phpunit / AutoLoaderTest.php
1 <?php
2 class AutoLoaderTest extends MediaWikiTestCase {
3
4 public function testAutoLoadConfig() {
5 $results = self::checkAutoLoadConf();
6
7 $this->assertEquals(
8 $results['expected'],
9 $results['actual']
10 );
11 }
12
13 protected static function checkAutoLoadConf() {
14 global $wgAutoloadLocalClasses, $wgAutoloadClasses, $IP;
15 static $supportsParsekit;
16 $supportsParsekit = function_exists( 'parsekit_compile_file' );
17
18 // wgAutoloadLocalClasses has precedence, just like in includes/AutoLoader.php
19 $expected = $wgAutoloadLocalClasses + $wgAutoloadClasses;
20 $actual = array();
21
22 $files = array_unique( $expected );
23
24 foreach ( $files as $file ) {
25 // Only prefix $IP if it doesn't have it already.
26 // Generally local classes don't have it, and those from extensions and test suites do.
27 if ( substr( $file, 0, 1 ) != '/' && substr( $file, 1, 1 ) != ':' ) {
28 $filePath = "$IP/$file";
29 } else {
30 $filePath = $file;
31 }
32 if ( $supportsParsekit ) {
33 $parseInfo = parsekit_compile_file( "$filePath" );
34 $classes = array_keys( $parseInfo['class_table'] );
35 } else {
36 $contents = file_get_contents( "$filePath" );
37 $m = array();
38 preg_match_all( '/\n\s*(?:final)?\s*(?:abstract)?\s*(?:class|interface)\s+([a-zA-Z0-9_]+)/', $contents, $m, PREG_PATTERN_ORDER );
39 $classes = $m[1];
40 }
41 foreach ( $classes as $class ) {
42 $actual[$class] = $file;
43 }
44 }
45
46 return array(
47 'expected' => $expected,
48 'actual' => $actual,
49 );
50 }
51 }