X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2FMediaWikiServicesTest.php;h=0e13721a5475c4f93696961b7d957d29b240dd5f;hb=7586eef13a7da73401f1d200a3c99ea7c2ed1786;hp=4f917a5f5f6a5022d090b42b340dda65878d678b;hpb=6dbac1054d3b81ac32c09da90c136e07857ef224;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/MediaWikiServicesTest.php b/tests/phpunit/includes/MediaWikiServicesTest.php index 4f917a5f5f..0e13721a54 100644 --- a/tests/phpunit/includes/MediaWikiServicesTest.php +++ b/tests/phpunit/includes/MediaWikiServicesTest.php @@ -1,6 +1,11 @@ newMediaWikiServices(); $oldServices = MediaWikiServices::forceGlobalInstance( $newServices ); + $service1 = $this->getMock( SalvageableService::class ); + $service1->expects( $this->never() ) + ->method( 'salvage' ); + + $newServices->defineService( + 'Test', + function() use ( $service1 ) { + return $service1; + } + ); + + // force instantiation + $newServices->getService( 'Test' ); + MediaWikiServices::resetGlobalInstance( $this->newTestConfig() ); $theServices = MediaWikiServices::getInstance(); + $this->assertSame( + $service1, + $theServices->getService( 'Test' ), + 'service definition should survive reset' + ); + + $this->assertNotSame( $theServices, $newServices ); + $this->assertNotSame( $theServices, $oldServices ); + + MediaWikiServices::forceGlobalInstance( $oldServices ); + } + + public function testResetGlobalInstance_quick() { + $newServices = $this->newMediaWikiServices(); + $oldServices = MediaWikiServices::forceGlobalInstance( $newServices ); + + $service1 = $this->getMock( SalvageableService::class ); + $service1->expects( $this->never() ) + ->method( 'salvage' ); + + $service2 = $this->getMock( SalvageableService::class ); + $service2->expects( $this->once() ) + ->method( 'salvage' ) + ->with( $service1 ); + + // sequence of values the instantiator will return + $instantiatorReturnValues = [ + $service1, + $service2, + ]; + + $newServices->defineService( + 'Test', + function() use ( &$instantiatorReturnValues ) { + return array_shift( $instantiatorReturnValues ); + } + ); + + // force instantiation + $newServices->getService( 'Test' ); + + MediaWikiServices::resetGlobalInstance( $this->newTestConfig(), 'quick' ); + $theServices = MediaWikiServices::getInstance(); + + $this->assertSame( $service2, $theServices->getService( 'Test' ) ); + $this->assertNotSame( $theServices, $newServices ); $this->assertNotSame( $theServices, $oldServices ); @@ -109,35 +174,42 @@ class MediaWikiServicesTest extends PHPUnit_Framework_TestCase { } MediaWikiServices::forceGlobalInstance( $oldServices ); + $newServices->destroy(); } public function testResetChildProcessServices() { $newServices = $this->newMediaWikiServices(); $oldServices = MediaWikiServices::forceGlobalInstance( $newServices ); - $lbFactory = $this->getMockBuilder( 'LBFactorySimple' ) - ->disableOriginalConstructor() - ->getMock(); + $service1 = $this->getMock( DestructibleService::class ); + $service1->expects( $this->once() ) + ->method( 'destroy' ); - $lbFactory->expects( $this->once() ) + $service2 = $this->getMock( DestructibleService::class ); + $service2->expects( $this->never() ) ->method( 'destroy' ); - $newServices->redefineService( - 'DBLoadBalancerFactory', - function() use ( $lbFactory ) { - return $lbFactory; + // sequence of values the instantiator will return + $instantiatorReturnValues = [ + $service1, + $service2, + ]; + + $newServices->defineService( + 'Test', + function() use ( &$instantiatorReturnValues ) { + return array_shift( $instantiatorReturnValues ); } ); // force the service to become active, so we can check that it does get destroyed - $oldLBFactory = $newServices->getService( 'DBLoadBalancerFactory' ); + $oldTestService = $newServices->getService( 'Test' ); MediaWikiServices::resetChildProcessServices(); $finalServices = MediaWikiServices::getInstance(); - $newLBFactory = $finalServices->getService( 'DBLoadBalancerFactory' ); - - $this->assertNotSame( $oldLBFactory, $newLBFactory ); + $newTestService = $finalServices->getService( 'Test' ); + $this->assertNotSame( $oldTestService, $newTestService ); MediaWikiServices::forceGlobalInstance( $oldServices ); } @@ -200,6 +272,10 @@ class MediaWikiServicesTest extends PHPUnit_Framework_TestCase { // All getters should be named just like the service, with "get" added. foreach ( $getServiceCases as $name => $case ) { + if ( $name[0] === '_' ) { + // Internal service, no getter + continue; + } list( $service, $class ) = $case; $getterCases[$name] = [ 'get' . $service, @@ -231,6 +307,7 @@ class MediaWikiServicesTest extends PHPUnit_Framework_TestCase { 'SiteStore' => [ 'SiteStore', SiteStore::class ], 'SiteLookup' => [ 'SiteLookup', SiteLookup::class ], 'StatsdDataFactory' => [ 'StatsdDataFactory', StatsdDataFactory::class ], + 'InterwikiLookup' => [ 'InterwikiLookup', InterwikiLookup::class ], 'EventRelayerGroup' => [ 'EventRelayerGroup', EventRelayerGroup::class ], 'SearchEngineFactory' => [ 'SearchEngineFactory', SearchEngineFactory::class ], 'SearchEngineConfig' => [ 'SearchEngineConfig', SearchEngineConfig::class ], @@ -239,6 +316,12 @@ class MediaWikiServicesTest extends PHPUnit_Framework_TestCase { 'DBLoadBalancer' => [ 'DBLoadBalancer', 'LoadBalancer' ], 'WatchedItemStore' => [ 'WatchedItemStore', WatchedItemStore::class ], 'GenderCache' => [ 'GenderCache', GenderCache::class ], + 'LinkCache' => [ 'LinkCache', LinkCache::class ], + 'LinkRenderer' => [ 'LinkRenderer', LinkRenderer::class ], + 'LinkRendererFactory' => [ 'LinkRendererFactory', LinkRendererFactory::class ], + '_MediaWikiTitleCodec' => [ '_MediaWikiTitleCodec', MediaWikiTitleCodec::class ], + 'TitleFormatter' => [ 'TitleFormatter', TitleFormatter::class ], + 'TitleParser' => [ 'TitleParser', TitleParser::class ], ]; }