3 use Mediawiki\Http\HttpRequestFactory;
32 $testConfig->set(
'ServiceWiringFiles', $globalConfig->get(
'ServiceWiringFiles' ) );
33 $testConfig->set(
'ConfigRegistry', $globalConfig->get(
'ConfigRegistry' ) );
42 if ( $config ===
null ) {
49 $wiringFiles = $config->get(
'ServiceWiringFiles' );
50 $instance->loadWiringFiles( $wiringFiles );
56 $services = MediaWikiServices::getInstance();
62 $oldServices = MediaWikiServices::forceGlobalInstance( $newServices );
65 $this->assertNotSame( $oldServices, $newServices );
67 $theServices = MediaWikiServices::getInstance();
68 $this->assertSame( $theServices, $newServices );
70 MediaWikiServices::forceGlobalInstance( $oldServices );
72 $theServices = MediaWikiServices::getInstance();
73 $this->assertSame( $theServices, $oldServices );
78 $oldServices = MediaWikiServices::forceGlobalInstance( $newServices );
81 $service1->expects( $this->never() )
82 ->method(
'salvage' );
84 $newServices->defineService(
86 function ()
use ( $service1 ) {
92 $newServices->getService(
'Test' );
94 MediaWikiServices::resetGlobalInstance( $this->
newTestConfig() );
95 $theServices = MediaWikiServices::getInstance();
99 $theServices->getService(
'Test' ),
100 'service definition should survive reset'
103 $this->assertNotSame( $theServices, $newServices );
104 $this->assertNotSame( $theServices, $oldServices );
106 MediaWikiServices::forceGlobalInstance( $oldServices );
111 $oldServices = MediaWikiServices::forceGlobalInstance( $newServices );
114 $service1->expects( $this->never() )
115 ->method(
'salvage' );
118 $service2->expects( $this->once() )
119 ->method(
'salvage' )
123 $instantiatorReturnValues = [
128 $newServices->defineService(
130 function ()
use ( &$instantiatorReturnValues ) {
131 return array_shift( $instantiatorReturnValues );
136 $newServices->getService(
'Test' );
138 MediaWikiServices::resetGlobalInstance( $this->
newTestConfig(),
'quick' );
139 $theServices = MediaWikiServices::getInstance();
141 $this->assertSame( $service2, $theServices->getService(
'Test' ) );
143 $this->assertNotSame( $theServices, $newServices );
144 $this->assertNotSame( $theServices, $oldServices );
146 MediaWikiServices::forceGlobalInstance( $oldServices );
151 $oldServices = MediaWikiServices::forceGlobalInstance( $newServices );
154 ->disableOriginalConstructor()
157 $newServices->redefineService(
158 'DBLoadBalancerFactory',
159 function ()
use ( $lbFactory ) {
165 $newServices->getService(
'DBLoadBalancerFactory' );
167 MediaWikiServices::disableStorageBackend();
170 MediaWikiServices::getInstance()->getService(
'DBLoadBalancerFactory' );
171 $this->fail(
'DBLoadBalancerFactory should have been disabled' );
175 }
catch ( Throwable $ex ) {
176 $this->fail(
'ServiceDisabledException expected, caught ' . get_class( $ex ) );
179 MediaWikiServices::forceGlobalInstance( $oldServices );
180 $newServices->destroy();
183 $this->assertTrue(
true );
188 $oldServices = MediaWikiServices::forceGlobalInstance( $newServices );
191 $service1->expects( $this->once() )
192 ->method(
'destroy' );
195 $service2->expects( $this->never() )
196 ->method(
'destroy' );
199 $instantiatorReturnValues = [
204 $newServices->defineService(
206 function ()
use ( &$instantiatorReturnValues ) {
207 return array_shift( $instantiatorReturnValues );
212 $oldTestService = $newServices->getService(
'Test' );
214 MediaWikiServices::resetChildProcessServices();
215 $finalServices = MediaWikiServices::getInstance();
217 $newTestService = $finalServices->getService(
'Test' );
218 $this->assertNotSame( $oldTestService, $newTestService );
220 MediaWikiServices::forceGlobalInstance( $oldServices );
229 function ()
use ( &$serviceCounter ) {
232 $service->expects( $this->once() )->method(
'destroy' );
238 $services->resetServiceForTesting(
'Test' );
239 $this->assertEquals( 0, $serviceCounter,
'No service instance should be created yet.' );
241 $oldInstance =
$services->getService(
'Test' );
242 $this->assertEquals( 1, $serviceCounter,
'A service instance should exit now.' );
245 $services->resetServiceForTesting(
'Test' );
246 $newInstance =
$services->getService(
'Test' );
248 $this->assertNotSame( $oldInstance, $newInstance );
251 $newInstance->destroy();
261 $service->expects( $this->never() )->method(
'destroy' );
266 $oldInstance =
$services->getService(
'Test' );
269 $services->resetServiceForTesting(
'Test',
false );
270 $newInstance =
$services->getService(
'Test' );
272 $this->assertNotSame( $oldInstance, $newInstance );
280 foreach ( $getServiceCases
as $name => $case ) {
281 if (
$name[0] ===
'_' ) {
285 list( $service, $class ) = $case;
286 $getterCases[
$name] = [
300 $services = MediaWikiServices::getInstance();
302 $this->assertInstanceOf(
$type, $service );
359 $services = MediaWikiServices::getInstance();
362 $this->assertInstanceOf(
$type, $service );
369 $services = MediaWikiServices::getInstance();
375 $this->assertInternalType(
'object', $service );