Merge "resourceloader: Remove unused getPosition() code"
[lhc/web/wiklou.git] / tests / phpunit / tests / MediaWikiTestCaseTest.php
1 <?php
2 use MediaWiki\Logger\LoggerFactory;
3 use MediaWiki\MediaWikiServices;
4 use Psr\Log\LoggerInterface;
5
6 /**
7 * @covers MediaWikiTestCase
8 * @author Addshore
9 */
10 class MediaWikiTestCaseTest extends MediaWikiTestCase {
11
12 const GLOBAL_KEY_NONEXISTING = 'MediaWikiTestCaseTestGLOBAL-NONExisting';
13
14 private static $startGlobals = [
15 'MediaWikiTestCaseTestGLOBAL-ExistingString' => 'foo',
16 'MediaWikiTestCaseTestGLOBAL-ExistingStringEmpty' => '',
17 'MediaWikiTestCaseTestGLOBAL-ExistingArray' => [ 1, 'foo' => 'bar' ],
18 'MediaWikiTestCaseTestGLOBAL-ExistingArrayEmpty' => [],
19 ];
20
21 public static function setUpBeforeClass() {
22 parent::setUpBeforeClass();
23 foreach ( self::$startGlobals as $key => $value ) {
24 $GLOBALS[$key] = $value;
25 }
26 }
27
28 public static function tearDownAfterClass() {
29 parent::tearDownAfterClass();
30 foreach ( self::$startGlobals as $key => $value ) {
31 unset( $GLOBALS[$key] );
32 }
33 }
34
35 public function provideExistingKeysAndNewValues() {
36 $providedArray = [];
37 foreach ( array_keys( self::$startGlobals ) as $key ) {
38 $providedArray[] = [ $key, 'newValue' ];
39 $providedArray[] = [ $key, [ 'newValue' ] ];
40 }
41 return $providedArray;
42 }
43
44 /**
45 * @dataProvider provideExistingKeysAndNewValues
46 *
47 * @covers MediaWikiTestCase::setMwGlobals
48 * @covers MediaWikiTestCase::tearDown
49 */
50 public function testSetGlobalsAreRestoredOnTearDown( $globalKey, $newValue ) {
51 $this->setMwGlobals( $globalKey, $newValue );
52 $this->assertEquals(
53 $newValue,
54 $GLOBALS[$globalKey],
55 'Global failed to correctly set'
56 );
57
58 $this->tearDown();
59
60 $this->assertEquals(
61 self::$startGlobals[$globalKey],
62 $GLOBALS[$globalKey],
63 'Global failed to be restored on tearDown'
64 );
65 }
66
67 /**
68 * @dataProvider provideExistingKeysAndNewValues
69 *
70 * @covers MediaWikiTestCase::stashMwGlobals
71 * @covers MediaWikiTestCase::tearDown
72 */
73 public function testStashedGlobalsAreRestoredOnTearDown( $globalKey, $newValue ) {
74 $this->stashMwGlobals( $globalKey );
75 $GLOBALS[$globalKey] = $newValue;
76 $this->assertEquals(
77 $newValue,
78 $GLOBALS[$globalKey],
79 'Global failed to correctly set'
80 );
81
82 $this->tearDown();
83
84 $this->assertEquals(
85 self::$startGlobals[$globalKey],
86 $GLOBALS[$globalKey],
87 'Global failed to be restored on tearDown'
88 );
89 }
90
91 /**
92 * @covers MediaWikiTestCase::stashMwGlobals
93 * @covers MediaWikiTestCase::tearDown
94 */
95 public function testSetNonExistentGlobalsAreUnsetOnTearDown() {
96 $globalKey = 'abcdefg1234567';
97 $this->setMwGlobals( $globalKey, true );
98 $this->assertTrue(
99 $GLOBALS[$globalKey],
100 'Global failed to correctly set'
101 );
102
103 $this->tearDown();
104
105 $this->assertFalse(
106 isset( $GLOBALS[$globalKey] ),
107 'Global failed to be correctly unset'
108 );
109 }
110
111 public function testOverrideMwServices() {
112 $initialServices = MediaWikiServices::getInstance();
113
114 $this->overrideMwServices();
115 $this->assertNotSame( $initialServices, MediaWikiServices::getInstance() );
116
117 $this->tearDown();
118 $this->assertSame( $initialServices, MediaWikiServices::getInstance() );
119 }
120
121 public function testSetService() {
122 $initialServices = MediaWikiServices::getInstance();
123 $initialService = $initialServices->getDBLoadBalancer();
124 $mockService = $this->getMockBuilder( LoadBalancer::class )
125 ->disableOriginalConstructor()->getMock();
126
127 $this->setService( 'DBLoadBalancer', $mockService );
128 $this->assertNotSame( $initialServices, MediaWikiServices::getInstance() );
129 $this->assertNotSame(
130 $initialService,
131 MediaWikiServices::getInstance()->getDBLoadBalancer()
132 );
133 $this->assertSame( $mockService, MediaWikiServices::getInstance()->getDBLoadBalancer() );
134
135 $this->tearDown();
136 $this->assertSame( $initialServices, MediaWikiServices::getInstance() );
137 $this->assertNotSame( $mockService, MediaWikiServices::getInstance()->getDBLoadBalancer() );
138 $this->assertSame( $initialService, MediaWikiServices::getInstance()->getDBLoadBalancer() );
139 }
140
141 /**
142 * @covers MediaWikiTestCase::setLogger
143 * @covers MediaWikiTestCase::restoreLogger
144 */
145 public function testLoggersAreRestoredOnTearDown_replacingExistingLogger() {
146 $logger1 = LoggerFactory::getInstance( 'foo' );
147 $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
148 $logger2 = LoggerFactory::getInstance( 'foo' );
149 $this->tearDown();
150 $logger3 = LoggerFactory::getInstance( 'foo' );
151
152 $this->assertSame( $logger1, $logger3 );
153 $this->assertNotSame( $logger1, $logger2 );
154 }
155
156 /**
157 * @covers MediaWikiTestCase::setLogger
158 * @covers MediaWikiTestCase::restoreLogger
159 */
160 public function testLoggersAreRestoredOnTearDown_replacingNonExistingLogger() {
161 $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
162 $logger1 = LoggerFactory::getInstance( 'foo' );
163 $this->tearDown();
164 $logger2 = LoggerFactory::getInstance( 'foo' );
165
166 $this->assertNotSame( $logger1, $logger2 );
167 $this->assertInstanceOf( '\Psr\Log\LoggerInterface', $logger2 );
168 }
169
170 /**
171 * @covers MediaWikiTestCase::setLogger
172 * @covers MediaWikiTestCase::restoreLogger
173 */
174 public function testLoggersAreRestoredOnTearDown_replacingSameLoggerTwice() {
175 $logger1 = LoggerFactory::getInstance( 'baz' );
176 $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
177 $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
178 $this->tearDown();
179 $logger2 = LoggerFactory::getInstance( 'baz' );
180
181 $this->assertSame( $logger1, $logger2 );
182 }
183 }