public function testResetChildProcessServices()
 {
     $newServices = $this->newMediaWikiServices();
     $oldServices = MediaWikiServices::forceGlobalInstance($newServices);
     $service1 = $this->getMock(DestructibleService::class);
     $service1->expects($this->once())->method('destroy');
     $service2 = $this->getMock(DestructibleService::class);
     $service2->expects($this->never())->method('destroy');
     // 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
     $oldTestService = $newServices->getService('Test');
     MediaWikiServices::resetChildProcessServices();
     $finalServices = MediaWikiServices::getInstance();
     $newTestService = $finalServices->getService('Test');
     $this->assertNotSame($oldTestService, $newTestService);
     MediaWikiServices::forceGlobalInstance($oldServices);
 }
Esempio n. 2
0
 /**
  * Stashes the global instance of MediaWikiServices, and installs a new one,
  * allowing test cases to override settings and services.
  * The previous instance of MediaWikiServices will be restored on tearDown.
  *
  * @since 1.27
  *
  * @param Config $configOverrides Configuration overrides for the new MediaWikiServices instance.
  * @param callable[] $services An associative array of services to re-define. Keys are service
  *        names, values are callables.
  *
  * @return MediaWikiServices
  * @throws MWException
  */
 protected function overrideMwServices(Config $configOverrides = null, array $services = [])
 {
     if (!$configOverrides) {
         $configOverrides = new HashConfig();
     }
     $oldInstance = MediaWikiServices::getInstance();
     $oldConfigFactory = $oldInstance->getConfigFactory();
     $testConfig = self::makeTestConfig(null, $configOverrides);
     $newInstance = new MediaWikiServices($testConfig);
     // Load the default wiring from the specified files.
     // NOTE: this logic mirrors the logic in MediaWikiServices::newInstance.
     $wiringFiles = $testConfig->get('ServiceWiringFiles');
     $newInstance->loadWiringFiles($wiringFiles);
     // Provide a traditional hook point to allow extensions to configure services.
     Hooks::run('MediaWikiServices', [$newInstance]);
     foreach ($services as $name => $callback) {
         $newInstance->redefineService($name, $callback);
     }
     self::installTestServices($oldConfigFactory, $newInstance);
     MediaWikiServices::forceGlobalInstance($newInstance);
     return $newInstance;
 }