AutoLoaderStructureTest: Allow PSR-4 directories to have files with 0 classes
authorKunal Mehta <legoktm@member.fsf.org>
Sat, 26 May 2018 23:51:56 +0000 (16:51 -0700)
committerKunal Mehta <legoktm@member.fsf.org>
Sat, 26 May 2018 23:51:56 +0000 (16:51 -0700)
Files like ServiceWiring.php can be safely located in a PSR-4 autoloaded
directory, because they have no classes.

Change-Id: I359b305df9071d6bc5afe4b5f29e762041f4aaef

tests/phpunit/structure/AutoLoaderStructureTest.php

index 4d6867f..50ec5fa 100644 (file)
@@ -39,20 +39,28 @@ class AutoLoaderStructureTest extends MediaWikiTestCase {
                $contents = file_get_contents( $file );
                list( $classesInFile, $aliasesInFile ) = self::parseFile( $contents );
                $classes = array_keys( $classesInFile );
-               $this->assertCount( 1, $classes,
-                       "Only one class per file in PSR-4 autoloaded classes ($file)" );
-
-               $this->assertStringStartsWith( $prefix, $classes[0] );
-               $this->assertTrue(
-                       class_exists( $classes[0] ) || interface_exists( $classes[0] ) || trait_exists( $classes[0] ),
-                       "Class {$classes[0]} not autoloaded properly"
-               );
-
-               $otherClasses = $wgAutoloadLocalClasses + $wgAutoloadClasses;
-               foreach ( $aliasesInFile as $alias => $class ) {
-                       $this->assertArrayHasKey( $alias, $otherClasses,
-                               'Alias must be in the classmap autoloader'
+               if ( $classes ) {
+                       $this->assertCount( 1, $classes,
+                               "Only one class per file in PSR-4 autoloaded classes ($file)" );
+
+                       $this->assertStringStartsWith( $prefix, $classes[0] );
+                       $this->assertTrue(
+                               class_exists( $classes[0] ) || interface_exists( $classes[0] ) || trait_exists( $classes[0] ),
+                               "Class {$classes[0]} not autoloaded properly"
                        );
+               } else {
+                       // Dummy assertion so this test isn't marked in risky
+                       // if the file has no classes nor aliases in it
+                       $this->assertCount( 0, $classes );
+               }
+
+               if ( $aliasesInFile ) {
+                       $otherClasses = $wgAutoloadLocalClasses + $wgAutoloadClasses;
+                       foreach ( $aliasesInFile as $alias => $class ) {
+                               $this->assertArrayHasKey( $alias, $otherClasses,
+                                       'Alias must be in the classmap autoloader'
+                               );
+                       }
                }
        }