Separate MediaWiki unit and integration tests
[lhc/web/wiklou.git] / tests / phpunit / unit / includes / api / ApiMessageTest.php
1 <?php
2
3 use Wikimedia\TestingAccessWrapper;
4
5 /**
6 * @group API
7 */
8 class ApiMessageTest extends \MediaWikiUnitTestCase {
9
10 private function compareMessages( Message $msg, Message $msg2 ) {
11 $this->assertSame( $msg->getKey(), $msg2->getKey(), 'getKey' );
12 $this->assertSame( $msg->getKeysToTry(), $msg2->getKeysToTry(), 'getKeysToTry' );
13 $this->assertSame( $msg->getParams(), $msg2->getParams(), 'getParams' );
14 $this->assertSame( $msg->getLanguage(), $msg2->getLanguage(), 'getLanguage' );
15
16 $msg = TestingAccessWrapper::newFromObject( $msg );
17 $msg2 = TestingAccessWrapper::newFromObject( $msg2 );
18 $this->assertSame( $msg->interface, $msg2->interface, 'interface' );
19 $this->assertSame( $msg->useDatabase, $msg2->useDatabase, 'useDatabase' );
20 $this->assertSame( $msg->format, $msg2->format, 'format' );
21 $this->assertSame(
22 $msg->title ? $msg->title->getFullText() : null,
23 $msg2->title ? $msg2->title->getFullText() : null,
24 'title'
25 );
26 }
27
28 /**
29 * @covers ApiMessageTrait
30 */
31 public function testCodeDefaults() {
32 $msg = new ApiMessage( 'foo' );
33 $this->assertSame( 'foo', $msg->getApiCode() );
34
35 $msg = new ApiMessage( 'apierror-bar' );
36 $this->assertSame( 'bar', $msg->getApiCode() );
37
38 $msg = new ApiMessage( 'apiwarn-baz' );
39 $this->assertSame( 'baz', $msg->getApiCode() );
40
41 // Weird "message key"
42 $msg = new ApiMessage( "<foo> bar\nbaz" );
43 $this->assertSame( '_foo__bar_baz', $msg->getApiCode() );
44
45 // BC case
46 $msg = new ApiMessage( 'actionthrottledtext' );
47 $this->assertSame( 'ratelimited', $msg->getApiCode() );
48
49 $msg = new ApiMessage( [ 'apierror-missingparam', 'param' ] );
50 $this->assertSame( 'noparam', $msg->getApiCode() );
51 }
52
53 /**
54 * @covers ApiMessageTrait
55 * @dataProvider provideInvalidCode
56 * @param mixed $code
57 */
58 public function testInvalidCode( $code ) {
59 $msg = new ApiMessage( 'foo' );
60 try {
61 $msg->setApiCode( $code );
62 $this->fail( 'Expected exception not thrown' );
63 } catch ( InvalidArgumentException $ex ) {
64 $this->assertTrue( true );
65 }
66
67 try {
68 new ApiMessage( 'foo', $code );
69 $this->fail( 'Expected exception not thrown' );
70 } catch ( InvalidArgumentException $ex ) {
71 $this->assertTrue( true );
72 }
73 }
74
75 public static function provideInvalidCode() {
76 return [
77 [ '' ],
78 [ 42 ],
79 [ 'A bad code' ],
80 [ 'Project:A_page_title' ],
81 [ "WTF\nnewlines" ],
82 ];
83 }
84
85 /**
86 * @covers ApiMessage
87 * @covers ApiMessageTrait
88 */
89 public function testApiMessage() {
90 $msg = new Message( [ 'foo', 'bar' ], [ 'baz' ] );
91 $msg->inLanguage( 'de' )->title( Title::newMainPage() );
92 $msg2 = new ApiMessage( $msg, 'code', [ 'data' ] );
93 $this->compareMessages( $msg, $msg2 );
94 $this->assertEquals( 'code', $msg2->getApiCode() );
95 $this->assertEquals( [ 'data' ], $msg2->getApiData() );
96
97 $msg2 = unserialize( serialize( $msg2 ) );
98 $this->compareMessages( $msg, $msg2 );
99 $this->assertEquals( 'code', $msg2->getApiCode() );
100 $this->assertEquals( [ 'data' ], $msg2->getApiData() );
101
102 $msg = new Message( [ 'foo', 'bar' ], [ 'baz' ] );
103 $msg2 = new ApiMessage( [ [ 'foo', 'bar' ], 'baz' ], 'code', [ 'data' ] );
104 $this->compareMessages( $msg, $msg2 );
105 $this->assertEquals( 'code', $msg2->getApiCode() );
106 $this->assertEquals( [ 'data' ], $msg2->getApiData() );
107
108 $msg = new Message( 'foo' );
109 $msg2 = new ApiMessage( 'foo' );
110 $this->compareMessages( $msg, $msg2 );
111 $this->assertEquals( 'foo', $msg2->getApiCode() );
112 $this->assertEquals( [], $msg2->getApiData() );
113
114 $msg2->setApiCode( 'code', [ 'data' ] );
115 $this->assertEquals( 'code', $msg2->getApiCode() );
116 $this->assertEquals( [ 'data' ], $msg2->getApiData() );
117 $msg2->setApiCode( null );
118 $this->assertEquals( 'foo', $msg2->getApiCode() );
119 $this->assertEquals( [ 'data' ], $msg2->getApiData() );
120 $msg2->setApiData( [ 'data2' ] );
121 $this->assertEquals( [ 'data2' ], $msg2->getApiData() );
122 }
123
124 /**
125 * @covers ApiRawMessage
126 * @covers ApiMessageTrait
127 */
128 public function testApiRawMessage() {
129 $msg = new RawMessage( 'foo', [ 'baz' ] );
130 $msg->inLanguage( 'de' )->title( Title::newMainPage() );
131 $msg2 = new ApiRawMessage( $msg, 'code', [ 'data' ] );
132 $this->compareMessages( $msg, $msg2 );
133 $this->assertEquals( 'code', $msg2->getApiCode() );
134 $this->assertEquals( [ 'data' ], $msg2->getApiData() );
135
136 $msg2 = unserialize( serialize( $msg2 ) );
137 $this->compareMessages( $msg, $msg2 );
138 $this->assertEquals( 'code', $msg2->getApiCode() );
139 $this->assertEquals( [ 'data' ], $msg2->getApiData() );
140
141 $msg = new RawMessage( 'foo', [ 'baz' ] );
142 $msg2 = new ApiRawMessage( [ 'foo', 'baz' ], 'code', [ 'data' ] );
143 $this->compareMessages( $msg, $msg2 );
144 $this->assertEquals( 'code', $msg2->getApiCode() );
145 $this->assertEquals( [ 'data' ], $msg2->getApiData() );
146
147 $msg = new RawMessage( 'foo' );
148 $msg2 = new ApiRawMessage( 'foo', 'code', [ 'data' ] );
149 $this->compareMessages( $msg, $msg2 );
150 $this->assertEquals( 'code', $msg2->getApiCode() );
151 $this->assertEquals( [ 'data' ], $msg2->getApiData() );
152
153 $msg2->setApiCode( 'code', [ 'data' ] );
154 $this->assertEquals( 'code', $msg2->getApiCode() );
155 $this->assertEquals( [ 'data' ], $msg2->getApiData() );
156 $msg2->setApiCode( null );
157 $this->assertEquals( 'foo', $msg2->getApiCode() );
158 $this->assertEquals( [ 'data' ], $msg2->getApiData() );
159 $msg2->setApiData( [ 'data2' ] );
160 $this->assertEquals( [ 'data2' ], $msg2->getApiData() );
161 }
162
163 /**
164 * @covers ApiMessage::create
165 */
166 public function testApiMessageCreate() {
167 $this->assertInstanceOf( ApiMessage::class, ApiMessage::create( new Message( 'mainpage' ) ) );
168 $this->assertInstanceOf(
169 ApiRawMessage::class, ApiMessage::create( new RawMessage( 'mainpage' ) )
170 );
171 $this->assertInstanceOf( ApiMessage::class, ApiMessage::create( 'mainpage' ) );
172
173 $msg = new ApiMessage( [ 'parentheses', 'foobar' ] );
174 $msg2 = new Message( 'parentheses', [ 'foobar' ] );
175
176 $this->assertSame( $msg, ApiMessage::create( $msg ) );
177 $this->assertEquals( $msg, ApiMessage::create( $msg2 ) );
178 $this->assertEquals( $msg, ApiMessage::create( [ 'parentheses', 'foobar' ] ) );
179 $this->assertEquals( $msg,
180 ApiMessage::create( [ 'message' => 'parentheses', 'params' => [ 'foobar' ] ] )
181 );
182 $this->assertSame( $msg,
183 ApiMessage::create( [ 'message' => $msg, 'params' => [ 'xxx' ] ] )
184 );
185 $this->assertEquals( $msg,
186 ApiMessage::create( [ 'message' => $msg2, 'params' => [ 'xxx' ] ] )
187 );
188 $this->assertSame( $msg,
189 ApiMessage::create( [ 'message' => $msg ] )
190 );
191
192 $msg = new ApiRawMessage( [ 'parentheses', 'foobar' ] );
193 $this->assertSame( $msg, ApiMessage::create( $msg ) );
194 }
195
196 }