<?php
-use Mediawiki\Http\HttpRequestFactory;
-use MediaWiki\Interwiki\InterwikiLookup;
-use MediaWiki\Linker\LinkRenderer;
-use MediaWiki\Linker\LinkRendererFactory;
use MediaWiki\MediaWikiServices;
-use MediaWiki\Preferences\PreferencesFactory;
use MediaWiki\Services\DestructibleService;
use MediaWiki\Services\SalvageableService;
use MediaWiki\Services\ServiceDisabledException;
-use MediaWiki\Shell\CommandFactory;
-use MediaWiki\Storage\BlobStore;
-use MediaWiki\Storage\BlobStoreFactory;
-use MediaWiki\Storage\NameTableStore;
-use MediaWiki\Storage\RevisionFactory;
-use MediaWiki\Storage\RevisionLookup;
-use MediaWiki\Storage\RevisionStore;
-use MediaWiki\Storage\SqlBlobStore;
/**
* @covers MediaWiki\MediaWikiServices
}
public function provideGetService() {
- // NOTE: This should list all service getters defined in ServiceWiring.php.
- return [
- 'BootstrapConfig' => [ '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 ],
- 'ConfigRepository' => [ 'ConfigRepository', \MediaWiki\Config\ConfigRepository::class ],
- 'MagicWordFactory' => [ 'MagicWordFactory', MagicWordFactory::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;
}
/**
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 ),
);
}
+ 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' );
+ }
}