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