6 class ApiErrorFormatterTest
extends MediaWikiTestCase
{
9 * @covers ApiErrorFormatter
10 * @dataProvider provideErrorFormatter
12 public function testErrorFormatter( $format, $lang, $useDB,
13 $expect1, $expect2, $expect3
15 $result = new ApiResult( 8388608 );
16 $formatter = new ApiErrorFormatter( $result, Language
::factory( $lang ), $format, $useDB );
19 $expect1[ApiResult
::META_TYPE
] = 'assoc';
20 $expect2[ApiResult
::META_TYPE
] = 'assoc';
21 $expect3[ApiResult
::META_TYPE
] = 'assoc';
23 $formatter->addWarning( 'string', 'mainpage' );
24 $formatter->addError( 'err', 'mainpage' );
25 $this->assertSame( $expect1, $result->getResultData(), 'Simple test' );
28 $formatter->addWarning( 'foo', 'mainpage' );
29 $formatter->addWarning( 'foo', 'mainpage' );
30 $formatter->addWarning( 'foo', array( 'parentheses', 'foobar' ) );
31 $msg1 = wfMessage( 'mainpage' );
32 $formatter->addWarning( 'message', $msg1 );
33 $msg2 = new ApiMessage( 'mainpage', 'overriddenCode', array( 'overriddenData' => true ) );
34 $formatter->addWarning( 'messageWithData', $msg2 );
35 $formatter->addError( 'errWithData', $msg2 );
36 $this->assertSame( $expect2, $result->getResultData(), 'Complex test' );
39 $status = Status
::newGood();
40 $status->warning( 'mainpage' );
41 $status->warning( 'parentheses', 'foobar' );
42 $status->warning( $msg1 );
43 $status->warning( $msg2 );
44 $status->error( 'mainpage' );
45 $status->error( 'parentheses', 'foobar' );
46 $formatter->addMessagesFromStatus( 'status', $status );
47 $this->assertSame( $expect3, $result->getResultData(), 'Status test' );
50 $expect3['errors']['status'],
51 $formatter->arrayFromStatus( $status, 'error' ),
52 'arrayFromStatus test for error'
55 $expect3['warnings']['status'],
56 $formatter->arrayFromStatus( $status, 'warning' ),
57 'arrayFromStatus test for warning'
61 public static function provideErrorFormatter() {
62 $mainpagePlain = wfMessage( 'mainpage' )->useDatabase( false )->plain();
63 $parensPlain = wfMessage( 'parentheses', 'foobar' )->useDatabase( false )->plain();
64 $mainpageText = wfMessage( 'mainpage' )->inLanguage( 'de' )->text();
65 $parensText = wfMessage( 'parentheses', 'foobar' )->inLanguage( 'de' )->text();
66 $C = ApiResult
::META_CONTENT
;
67 $I = ApiResult
::META_INDEXED_TAG_NAME
;
70 array( 'wikitext', 'de', true,
74 array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
80 array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
87 'errWithData' => array(
88 array( 'code' => 'overriddenCode', 'text' => $mainpageText,
89 'overriddenData' => true, $C => 'text' ),
94 'messageWithData' => array(
95 array( 'code' => 'overriddenCode', 'text' => $mainpageText,
96 'overriddenData' => true, $C => 'text' ),
100 array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
104 array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
105 array( 'code' => 'parentheses', 'text' => $parensText, $C => 'text' ),
113 array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
114 array( 'code' => 'parentheses', 'text' => $parensText, $C => 'text' ),
120 array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
121 array( 'code' => 'parentheses', 'text' => $parensText, $C => 'text' ),
122 array( 'code' => 'overriddenCode', 'text' => $mainpageText,
123 'overriddenData' => true, $C => 'text' ),
129 array( 'raw', 'fr', true,
133 array( 'code' => 'mainpage', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
139 array( 'code' => 'mainpage', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
146 'errWithData' => array(
147 array( 'code' => 'overriddenCode', 'message' => 'mainpage', 'params' => array( $I => 'param' ),
148 'overriddenData' => true ),
153 'messageWithData' => array(
154 array( 'code' => 'overriddenCode', 'message' => 'mainpage', 'params' => array( $I => 'param' ),
155 'overriddenData' => true ),
159 array( 'code' => 'mainpage', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
163 array( 'code' => 'mainpage', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
164 array( 'code' => 'parentheses', 'message' => 'parentheses', 'params' => array( 'foobar', $I => 'param' ) ),
172 array( 'code' => 'mainpage', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
173 array( 'code' => 'parentheses', 'message' => 'parentheses', 'params' => array( 'foobar', $I => 'param' ) ),
179 array( 'code' => 'mainpage', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
180 array( 'code' => 'parentheses', 'message' => 'parentheses', 'params' => array( 'foobar', $I => 'param' ) ),
181 array( 'code' => 'overriddenCode', 'message' => 'mainpage', 'params' => array( $I => 'param' ),
182 'overriddenData' => true ),
188 array( 'none', 'fr', true,
192 array( 'code' => 'mainpage' ),
198 array( 'code' => 'mainpage' ),
205 'errWithData' => array(
206 array( 'code' => 'overriddenCode', 'overriddenData' => true ),
211 'messageWithData' => array(
212 array( 'code' => 'overriddenCode', 'overriddenData' => true ),
216 array( 'code' => 'mainpage' ),
220 array( 'code' => 'mainpage' ),
221 array( 'code' => 'parentheses' ),
229 array( 'code' => 'mainpage' ),
230 array( 'code' => 'parentheses' ),
236 array( 'code' => 'mainpage' ),
237 array( 'code' => 'parentheses' ),
238 array( 'code' => 'overriddenCode', 'overriddenData' => true ),
248 * @covers ApiErrorFormatter_BackCompat
250 public function testErrorFormatterBC() {
251 $mainpagePlain = wfMessage( 'mainpage' )->useDatabase( false )->plain();
252 $parensPlain = wfMessage( 'parentheses', 'foobar' )->useDatabase( false )->plain();
254 $result = new ApiResult( 8388608 );
255 $formatter = new ApiErrorFormatter_BackCompat( $result );
257 $formatter->addWarning( 'string', 'mainpage' );
258 $formatter->addError( 'err', 'mainpage' );
259 $this->assertSame( array(
261 'code' => 'mainpage',
262 'info' => $mainpagePlain,
266 'warnings' => $mainpagePlain,
267 ApiResult
::META_CONTENT
=> 'warnings',
270 ApiResult
::META_TYPE
=> 'assoc',
271 ), $result->getResultData(), 'Simple test' );
274 $formatter->addWarning( 'foo', 'mainpage' );
275 $formatter->addWarning( 'foo', 'mainpage' );
276 $formatter->addWarning( 'foo', array( 'parentheses', 'foobar' ) );
277 $msg1 = wfMessage( 'mainpage' );
278 $formatter->addWarning( 'message', $msg1 );
279 $msg2 = new ApiMessage( 'mainpage', 'overriddenCode', array( 'overriddenData' => true ) );
280 $formatter->addWarning( 'messageWithData', $msg2 );
281 $formatter->addError( 'errWithData', $msg2 );
282 $this->assertSame( array(
284 'code' => 'overriddenCode',
285 'info' => $mainpagePlain,
286 'overriddenData' => true,
289 'messageWithData' => array(
290 'warnings' => $mainpagePlain,
291 ApiResult
::META_CONTENT
=> 'warnings',
294 'warnings' => $mainpagePlain,
295 ApiResult
::META_CONTENT
=> 'warnings',
298 'warnings' => "$mainpagePlain\n$parensPlain",
299 ApiResult
::META_CONTENT
=> 'warnings',
302 ApiResult
::META_TYPE
=> 'assoc',
303 ), $result->getResultData(), 'Complex test' );
306 $status = Status
::newGood();
307 $status->warning( 'mainpage' );
308 $status->warning( 'parentheses', 'foobar' );
309 $status->warning( $msg1 );
310 $status->warning( $msg2 );
311 $status->error( 'mainpage' );
312 $status->error( 'parentheses', 'foobar' );
313 $formatter->addMessagesFromStatus( 'status', $status );
314 $this->assertSame( array(
316 'code' => 'parentheses',
317 'info' => $parensPlain,
321 'warnings' => "$mainpagePlain\n$parensPlain",
322 ApiResult
::META_CONTENT
=> 'warnings',
325 ApiResult
::META_TYPE
=> 'assoc',
326 ), $result->getResultData(), 'Status test' );
328 $I = ApiResult
::META_INDEXED_TAG_NAME
;
331 array( 'type' => 'error', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
332 array( 'type' => 'error', 'message' => 'parentheses', 'params' => array( 'foobar', $I => 'param' ) ),
335 $formatter->arrayFromStatus( $status, 'error' ),
336 'arrayFromStatus test for error'
340 array( 'type' => 'warning', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
341 array( 'type' => 'warning', 'message' => 'parentheses', 'params' => array( 'foobar', $I => 'param' ) ),
342 array( 'message' => 'mainpage', 'params' => array( $I => 'param' ), 'type' => 'warning' ),
343 array( 'message' => 'mainpage', 'params' => array( $I => 'param' ), 'type' => 'warning' ),
346 $formatter->arrayFromStatus( $status, 'warning' ),
347 'arrayFromStatus test for warning'