test: Assert that API generators have unique prefixes
authorAntoine Musso <hashar@free.fr>
Tue, 19 Jun 2018 07:50:12 +0000 (09:50 +0200)
committerKunal Mehta <legoktm@member.fsf.org>
Sat, 18 Aug 2018 00:31:22 +0000 (17:31 -0700)
Signed-off-by: Brad Jorsch <bjorsch@wikimedia.org>
Change-Id: I30758f2ac95fd8ae361ef8079abdfb0a82d92e34

tests/phpunit/structure/ApiPrefixUniquenessTest.php

index 0920a64..4f95fbb 100644 (file)
@@ -21,10 +21,28 @@ class ApiPrefixUniquenessTest extends MediaWikiTestCase {
                        $class = get_class( $module );
 
                        $prefix = $module->getModulePrefix();
-                       if ( $prefix !== '' && isset( $prefixes[$prefix] ) /* HACK: T196962 */ && $prefix !== 'wbeu' ) {
-                               $this->fail( "Module prefix '{$prefix}' is shared between {$class} and {$prefixes[$prefix]}" );
+                       if ( $prefix === '' /* HACK: T196962 */ || $prefix === 'wbeu' ) {
+                               continue;
+                       }
+
+                       if ( isset( $prefixes[$prefix] ) ) {
+                               $this->fail(
+                                       "Module prefix '{$prefix}' is shared between {$class} and {$prefixes[$prefix]}"
+                               );
                        }
                        $prefixes[$module->getModulePrefix()] = $class;
+
+                       if ( $module instanceof ApiQueryGeneratorBase ) {
+                               // namespace with 'g', a generator can share a prefix with a module
+                               $prefix = 'g' . $prefix;
+                               if ( isset( $prefixes[$prefix] ) ) {
+                                       $this->fail(
+                                               "Module prefix '{$prefix}' is shared between {$class} and {$prefixes[$prefix]}" .
+                                                       " (as a generator)"
+                                       );
+                               }
+                               $prefixes[$module->getModulePrefix()] = $class;
+                       }
                }
                $this->assertTrue( true ); // dummy call to make this test non-incomplete
        }