Merge "Reset scoped session for upload jobs after deferred updates"
[lhc/web/wiklou.git] / tests / phpunit / tests / MediaWikiTestCaseTest.php
1 <?php
2 use MediaWiki\Logger\LoggerFactory;
3
4 /**
5 * @covers MediaWikiTestCase
6 * @author Addshore
7 */
8 class MediaWikiTestCaseTest extends MediaWikiTestCase {
9
10 const GLOBAL_KEY_NONEXISTING = 'MediaWikiTestCaseTestGLOBAL-NONExisting';
11
12 private static $startGlobals = [
13 'MediaWikiTestCaseTestGLOBAL-ExistingString' => 'foo',
14 'MediaWikiTestCaseTestGLOBAL-ExistingStringEmpty' => '',
15 'MediaWikiTestCaseTestGLOBAL-ExistingArray' => [ 1, 'foo' => 'bar' ],
16 'MediaWikiTestCaseTestGLOBAL-ExistingArrayEmpty' => [],
17 ];
18
19 public static function setUpBeforeClass() {
20 parent::setUpBeforeClass();
21 foreach ( self::$startGlobals as $key => $value ) {
22 $GLOBALS[$key] = $value;
23 }
24 }
25
26 public static function tearDownAfterClass() {
27 parent::tearDownAfterClass();
28 foreach ( self::$startGlobals as $key => $value ) {
29 unset( $GLOBALS[$key] );
30 }
31 }
32
33 public function provideExistingKeysAndNewValues() {
34 $providedArray = [];
35 foreach ( array_keys( self::$startGlobals ) as $key ) {
36 $providedArray[] = [ $key, 'newValue' ];
37 $providedArray[] = [ $key, [ 'newValue' ] ];
38 }
39 return $providedArray;
40 }
41
42 /**
43 * @dataProvider provideExistingKeysAndNewValues
44 *
45 * @covers MediaWikiTestCase::setMwGlobals
46 * @covers MediaWikiTestCase::tearDown
47 */
48 public function testSetGlobalsAreRestoredOnTearDown( $globalKey, $newValue ) {
49 $this->setMwGlobals( $globalKey, $newValue );
50 $this->assertEquals(
51 $newValue,
52 $GLOBALS[$globalKey],
53 'Global failed to correctly set'
54 );
55
56 $this->tearDown();
57
58 $this->assertEquals(
59 self::$startGlobals[$globalKey],
60 $GLOBALS[$globalKey],
61 'Global failed to be restored on tearDown'
62 );
63 }
64
65 /**
66 * @dataProvider provideExistingKeysAndNewValues
67 *
68 * @covers MediaWikiTestCase::stashMwGlobals
69 * @covers MediaWikiTestCase::tearDown
70 */
71 public function testStashedGlobalsAreRestoredOnTearDown( $globalKey, $newValue ) {
72 $this->stashMwGlobals( $globalKey );
73 $GLOBALS[$globalKey] = $newValue;
74 $this->assertEquals(
75 $newValue,
76 $GLOBALS[$globalKey],
77 'Global failed to correctly set'
78 );
79
80 $this->tearDown();
81
82 $this->assertEquals(
83 self::$startGlobals[$globalKey],
84 $GLOBALS[$globalKey],
85 'Global failed to be restored on tearDown'
86 );
87 }
88
89 /**
90 * @covers MediaWikiTestCase::stashMwGlobals
91 */
92 public function testExceptionThrownWhenStashingNonExistentGlobals() {
93 $this->setExpectedException(
94 'Exception',
95 'Global with key ' . self::GLOBAL_KEY_NONEXISTING . ' doesn\'t exist and cant be stashed'
96 );
97
98 $this->stashMwGlobals( self::GLOBAL_KEY_NONEXISTING );
99 }
100
101 /**
102 * @covers MediaWikiTestCase::setLogger
103 * @covers MediaWikiTestCase::restoreLogger
104 */
105 public function testLoggersAreRestoredOnTearDown() {
106 // replacing an existing logger
107 $logger1 = LoggerFactory::getInstance( 'foo' );
108 $this->setLogger( 'foo', $this->getMock( '\Psr\Log\LoggerInterface' ) );
109 $logger2 = LoggerFactory::getInstance( 'foo' );
110 $this->tearDown();
111 $logger3 = LoggerFactory::getInstance( 'foo' );
112
113 $this->assertSame( $logger1, $logger3 );
114 $this->assertNotSame( $logger1, $logger2 );
115
116 // replacing a non-existing logger
117 $this->setLogger( 'bar', $this->getMock( '\Psr\Log\LoggerInterface' ) );
118 $logger1 = LoggerFactory::getInstance( 'bar' );
119 $this->tearDown();
120 $logger2 = LoggerFactory::getInstance( 'bar' );
121
122 $this->assertNotSame( $logger1, $logger2 );
123 $this->assertInstanceOf( '\Psr\Log\LoggerInterface', $logger2 );
124
125 // replacing same logger twice
126 $logger1 = LoggerFactory::getInstance( 'baz' );
127 $this->setLogger( 'baz', $this->getMock( '\Psr\Log\LoggerInterface' ) );
128 $this->setLogger( 'baz', $this->getMock( '\Psr\Log\LoggerInterface' ) );
129 $this->tearDown();
130 $logger2 = LoggerFactory::getInstance( 'baz' );
131
132 $this->assertSame( $logger1, $logger2 );
133 }
134 }