X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2FMediaWikiServicesTest.php;h=c838fc316523e01fd6568dd020ff2e9221d7af0d;hb=d0a80f222e53bb669a5ec3a25955a4d9311445ec;hp=093cb07091454acf33df3676a56eea191728ebc9;hpb=c7b160020676a3a30b51666ccdf530bda2c57070;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/MediaWikiServicesTest.php b/tests/phpunit/includes/MediaWikiServicesTest.php index 093cb07091..c838fc3165 100644 --- a/tests/phpunit/includes/MediaWikiServicesTest.php +++ b/tests/phpunit/includes/MediaWikiServicesTest.php @@ -1,22 +1,9 @@ [ 'BootstrapConfig', Config::class ], - 'ConfigFactory' => [ 'ConfigFactory', ConfigFactory::class ], - 'MainConfig' => [ 'MainConfig', Config::class ], - 'SiteStore' => [ 'SiteStore', SiteStore::class ], - 'SiteLookup' => [ 'SiteLookup', SiteLookup::class ], - 'StatsdDataFactory' => [ 'StatsdDataFactory', IBufferingStatsdDataFactory::class ], - 'PerDbNameStatsdDataFactory' => - [ 'PerDbNameStatsdDataFactory', IBufferingStatsdDataFactory::class ], - 'InterwikiLookup' => [ 'InterwikiLookup', InterwikiLookup::class ], - 'EventRelayerGroup' => [ 'EventRelayerGroup', EventRelayerGroup::class ], - 'SearchEngineFactory' => [ 'SearchEngineFactory', SearchEngineFactory::class ], - 'SearchEngineConfig' => [ 'SearchEngineConfig', SearchEngineConfig::class ], - 'SkinFactory' => [ 'SkinFactory', SkinFactory::class ], - 'DBLoadBalancerFactory' => [ 'DBLoadBalancerFactory', Wikimedia\Rdbms\LBFactory::class ], - 'DBLoadBalancer' => [ 'DBLoadBalancer', Wikimedia\Rdbms\LoadBalancer::class ], - 'WatchedItemStore' => [ 'WatchedItemStore', WatchedItemStore::class ], - 'WatchedItemQueryService' => [ 'WatchedItemQueryService', WatchedItemQueryService::class ], - 'CryptRand' => [ 'CryptRand', CryptRand::class ], - 'CryptHKDF' => [ 'CryptHKDF', CryptHKDF::class ], - 'MediaHandlerFactory' => [ 'MediaHandlerFactory', MediaHandlerFactory::class ], - 'Parser' => [ 'Parser', Parser::class ], - 'ParserCache' => [ 'ParserCache', ParserCache::class ], - 'GenderCache' => [ 'GenderCache', GenderCache::class ], - 'LinkCache' => [ 'LinkCache', LinkCache::class ], - 'LinkRenderer' => [ 'LinkRenderer', LinkRenderer::class ], - 'LinkRendererFactory' => [ 'LinkRendererFactory', LinkRendererFactory::class ], - '_MediaWikiTitleCodec' => [ '_MediaWikiTitleCodec', MediaWikiTitleCodec::class ], - 'MimeAnalyzer' => [ 'MimeAnalyzer', MimeAnalyzer::class ], - 'TitleFormatter' => [ 'TitleFormatter', TitleFormatter::class ], - 'TitleParser' => [ 'TitleParser', TitleParser::class ], - 'ProxyLookup' => [ 'ProxyLookup', ProxyLookup::class ], - 'MainObjectStash' => [ 'MainObjectStash', BagOStuff::class ], - 'MainWANObjectCache' => [ 'MainWANObjectCache', WANObjectCache::class ], - 'LocalServerObjectCache' => [ 'LocalServerObjectCache', BagOStuff::class ], - 'VirtualRESTServiceClient' => [ 'VirtualRESTServiceClient', VirtualRESTServiceClient::class ], - 'ShellCommandFactory' => [ 'ShellCommandFactory', CommandFactory::class ], - 'BlobStoreFactory' => [ 'BlobStoreFactory', BlobStoreFactory::class ], - 'BlobStore' => [ 'BlobStore', BlobStore::class ], - '_SqlBlobStore' => [ '_SqlBlobStore', SqlBlobStore::class ], - 'RevisionStore' => [ 'RevisionStore', RevisionStore::class ], - 'RevisionLookup' => [ 'RevisionLookup', RevisionLookup::class ], - 'RevisionFactory' => [ 'RevisionFactory', RevisionFactory::class ], - 'ContentModelStore' => [ 'ContentModelStore', NameTableStore::class ], - 'SlotRoleStore' => [ 'SlotRoleStore', NameTableStore::class ], - 'HttpRequestFactory' => [ 'HttpRequestFactory', HttpRequestFactory::class ], - 'CommentStore' => [ 'CommentStore', CommentStore::class ], - 'ChangeTagDefStore' => [ 'ChangeTagDefStore', NameTableStore::class ], - 'ConfiguredReadOnlyMode' => [ 'ConfiguredReadOnlyMode', ConfiguredReadOnlyMode::class ], - 'ReadOnlyMode' => [ 'ReadOnlyMode', ReadOnlyMode::class ], - 'UploadRevisionImporter' => [ 'UploadRevisionImporter', UploadRevisionImporter::class ], - 'OldRevisionImporter' => [ 'OldRevisionImporter', OldRevisionImporter::class ], - 'WikiRevisionOldRevisionImporterNoUpdates' => - [ 'WikiRevisionOldRevisionImporterNoUpdates', ImportableOldRevisionImporter::class ], - 'ExternalStoreFactory' => [ 'ExternalStoreFactory', ExternalStoreFactory::class ], - 'PreferencesFactory' => [ 'PreferencesFactory', PreferencesFactory::class ], - 'ActorMigration' => [ 'ActorMigration', ActorMigration::class ], - ]; + global $IP; + $serviceList = require "$IP/includes/ServiceWiring.php"; + $ret = []; + foreach ( $serviceList as $name => $callback ) { + $fun = new ReflectionFunction( $callback ); + if ( !$fun->hasReturnType() ) { + throw new MWException( 'All service callbacks must have a return type defined, ' . + "none found for $name" ); + } + $ret[$name] = [ $name, $fun->getReturnType()->__toString() ]; + } + return $ret; } /** @@ -395,7 +335,7 @@ class MediaWikiServicesTest extends MediaWikiTestCase { public function testDefaultServiceWiringServicesHaveTests() { global $IP; $testedServices = array_keys( $this->provideGetService() ); - $allServices = array_keys( include $IP . '/includes/ServiceWiring.php' ); + $allServices = array_keys( require "$IP/includes/ServiceWiring.php" ); $this->assertEquals( [], array_diff( $allServices, $testedServices ), @@ -403,4 +343,24 @@ class MediaWikiServicesTest extends MediaWikiTestCase { ); } + public function testGettersAreSorted() { + $methods = ( new ReflectionClass( MediaWikiServices::class ) ) + ->getMethods( ReflectionMethod::IS_STATIC | ReflectionMethod::IS_PUBLIC ); + + $names = array_map( function ( $method ) { + return $method->getName(); + }, $methods ); + $serviceNames = array_map( function ( $name ) { + return "get$name"; + }, array_keys( $this->provideGetService() ) ); + $names = array_values( array_filter( $names, function ( $name ) use ( $serviceNames ) { + return in_array( $name, $serviceNames ); + } ) ); + + $sortedNames = $names; + sort( $sortedNames ); + + $this->assertSame( $sortedNames, $names, + 'Please keep service getters sorted alphabetically' ); + } }