ApiPrefixUniquenessTest.php 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <?php
  2. /**
  3. * Checks that all API query modules, core and extensions, have unique prefixes.
  4. *
  5. * @group API
  6. * @coversNothing
  7. */
  8. class ApiPrefixUniquenessTest extends MediaWikiTestCase {
  9. public function testPrefixes() {
  10. $main = new ApiMain( new FauxRequest() );
  11. $query = new ApiQuery( $main, 'foo' );
  12. $moduleManager = $query->getModuleManager();
  13. $modules = $moduleManager->getNames();
  14. $prefixes = [];
  15. foreach ( $modules as $name ) {
  16. $module = $moduleManager->getModule( $name );
  17. $class = get_class( $module );
  18. $prefix = $module->getModulePrefix();
  19. if ( $prefix === '' /* HACK: T196962 */ || $prefix === 'wbeu' ) {
  20. continue;
  21. }
  22. if ( isset( $prefixes[$prefix] ) ) {
  23. $this->fail(
  24. "Module prefix '{$prefix}' is shared between {$class} and {$prefixes[$prefix]}"
  25. );
  26. }
  27. $prefixes[$module->getModulePrefix()] = $class;
  28. if ( $module instanceof ApiQueryGeneratorBase ) {
  29. // namespace with 'g', a generator can share a prefix with a module
  30. $prefix = 'g' . $prefix;
  31. if ( isset( $prefixes[$prefix] ) ) {
  32. $this->fail(
  33. "Module prefix '{$prefix}' is shared between {$class} and {$prefixes[$prefix]}" .
  34. " (as a generator)"
  35. );
  36. }
  37. $prefixes[$module->getModulePrefix()] = $class;
  38. }
  39. }
  40. $this->assertTrue( true ); // dummy call to make this test non-incomplete
  41. }
  42. }