Merge "Convert legacy bugs ID to Phabricator tasks ID for Parser class"
[lhc/web/wiklou.git] / tests / phpunit / includes / api / ApiErrorFormatterTest.php
index a08a86e..1b7f6bf 100644 (file)
@@ -5,6 +5,30 @@
  */
 class ApiErrorFormatterTest extends MediaWikiLangTestCase {
 
+       /**
+        * @covers ApiErrorFormatter
+        */
+       public function testErrorFormatterBasics() {
+               $result = new ApiResult( 8388608 );
+               $formatter = new ApiErrorFormatter( $result, Language::factory( 'de' ), 'wikitext', false );
+               $this->assertSame( 'de', $formatter->getLanguage()->getCode() );
+
+               $formatter->addMessagesFromStatus( null, Status::newGood() );
+               $this->assertSame(
+                       [ ApiResult::META_TYPE => 'assoc' ],
+                       $result->getResultData()
+               );
+
+               $this->assertSame( [], $formatter->arrayFromStatus( Status::newGood() ) );
+
+               $wrappedFormatter = TestingAccessWrapper::newFromObject( $formatter );
+               $this->assertSame(
+                       'Blah "kbd" <X> ðŸ˜Š',
+                       $wrappedFormatter->stripMarkup( 'Blah <kbd>kbd</kbd> <b>&lt;X&gt;</b> &#x1f60a;' ),
+                       'stripMarkup'
+               );
+       }
+
        /**
         * @covers ApiErrorFormatter
         * @dataProvider provideErrorFormatter
@@ -22,19 +46,30 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase {
 
                $formatter->addWarning( 'string', 'mainpage' );
                $formatter->addError( 'err', 'mainpage' );
-               $this->assertSame( $expect1, $result->getResultData(), 'Simple test' );
+               $this->assertEquals( $expect1, $result->getResultData(), 'Simple test' );
 
                $result->reset();
                $formatter->addWarning( 'foo', 'mainpage' );
                $formatter->addWarning( 'foo', 'mainpage' );
-               $formatter->addWarning( 'foo', array( 'parentheses', 'foobar' ) );
+               $formatter->addWarning( 'foo', [ 'parentheses', 'foobar' ] );
                $msg1 = wfMessage( 'mainpage' );
                $formatter->addWarning( 'message', $msg1 );
-               $msg2 = new ApiMessage( 'mainpage', 'overriddenCode', array( 'overriddenData' => true ) );
+               $msg2 = new ApiMessage( 'mainpage', 'overriddenCode', [ 'overriddenData' => true ] );
                $formatter->addWarning( 'messageWithData', $msg2 );
                $formatter->addError( 'errWithData', $msg2 );
                $this->assertSame( $expect2, $result->getResultData(), 'Complex test' );
 
+               $this->assertEquals(
+                       $this->removeModuleTag( $expect2['warnings'][2] ),
+                       $formatter->formatMessage( $msg1 ),
+                       'formatMessage test 1'
+               );
+               $this->assertEquals(
+                       $this->removeModuleTag( $expect2['warnings'][3] ),
+                       $formatter->formatMessage( $msg2 ),
+                       'formatMessage test 2'
+               );
+
                $result->reset();
                $status = Status::newGood();
                $status->warning( 'mainpage' );
@@ -47,249 +82,260 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase {
                $this->assertSame( $expect3, $result->getResultData(), 'Status test' );
 
                $this->assertSame(
-                       $expect3['errors']['status'],
+                       array_map( [ $this, 'removeModuleTag' ], $expect3['errors'] ),
                        $formatter->arrayFromStatus( $status, 'error' ),
                        'arrayFromStatus test for error'
                );
                $this->assertSame(
-                       $expect3['warnings']['status'],
+                       array_map( [ $this, 'removeModuleTag' ], $expect3['warnings'] ),
                        $formatter->arrayFromStatus( $status, 'warning' ),
                        'arrayFromStatus test for warning'
                );
        }
 
+       private function removeModuleTag( $s ) {
+               if ( is_array( $s ) ) {
+                       unset( $s['module'] );
+               }
+               return $s;
+       }
+
        public static function provideErrorFormatter() {
-               $mainpagePlain = wfMessage( 'mainpage' )->useDatabase( false )->plain();
-               $parensPlain = wfMessage( 'parentheses', 'foobar' )->useDatabase( false )->plain();
-               $mainpageText = wfMessage( 'mainpage' )->inLanguage( 'de' )->text();
-               $parensText = wfMessage( 'parentheses', 'foobar' )->inLanguage( 'de' )->text();
+               $mainpageText = wfMessage( 'mainpage' )->inLanguage( 'de' )->useDatabase( false )->text();
+               $parensText = wfMessage( 'parentheses', 'foobar' )->inLanguage( 'de' )
+                       ->useDatabase( false )->text();
+               $mainpageHTML = wfMessage( 'mainpage' )->inLanguage( 'en' )->parse();
+               $parensHTML = wfMessage( 'parentheses', 'foobar' )->inLanguage( 'en' )->parse();
                $C = ApiResult::META_CONTENT;
                $I = ApiResult::META_INDEXED_TAG_NAME;
+               $overriddenData = [ 'overriddenData' => true, ApiResult::META_TYPE => 'assoc' ];
 
-               return array(
-                       array( 'wikitext', 'de', true,
-                               array(
-                                       'errors' => array(
-                                               'err' => array(
-                                                       array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
-                                                       $I => 'error',
-                                               ),
-                                       ),
-                                       'warnings' => array(
-                                               'string' => array(
-                                                       array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
-                                                       $I => 'warning',
-                                               ),
-                                       ),
-                               ),
-                               array(
-                                       'errors' => array(
-                                               'errWithData' => array(
-                                                       array( 'code' => 'overriddenCode', 'text' => $mainpageText,
-                                                               'overriddenData' => true, $C => 'text' ),
-                                                       $I => 'error',
-                                               ),
-                                       ),
-                                       'warnings' => array(
-                                               'messageWithData' => array(
-                                                       array( 'code' => 'overriddenCode', 'text' => $mainpageText,
-                                                               'overriddenData' => true, $C => 'text' ),
-                                                       $I => 'warning',
-                                               ),
-                                               'message' => array(
-                                                       array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
-                                                       $I => 'warning',
-                                               ),
-                                               'foo' => array(
-                                                       array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
-                                                       array( 'code' => 'parentheses', 'text' => $parensText, $C => 'text' ),
-                                                       $I => 'warning',
-                                               ),
-                                       ),
-                               ),
-                               array(
-                                       'errors' => array(
-                                               'status' => array(
-                                                       array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
-                                                       array( 'code' => 'parentheses', 'text' => $parensText, $C => 'text' ),
-                                                       $I => 'error',
-                                               ),
-                                       ),
-                                       'warnings' => array(
-                                               'status' => array(
-                                                       array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
-                                                       array( 'code' => 'parentheses', 'text' => $parensText, $C => 'text' ),
-                                                       array( 'code' => 'overriddenCode', 'text' => $mainpageText,
-                                                               'overriddenData' => true, $C => 'text' ),
-                                                       $I => 'warning',
-                                               ),
-                                       ),
-                               ),
-                       ),
-                       array( 'raw', 'fr', true,
-                               array(
-                                       'errors' => array(
-                                               'err' => array(
-                                                       array(
-                                                               'code' => 'mainpage',
-                                                               'message' => 'mainpage',
-                                                               'params' => array( $I => 'param' )
-                                                       ),
-                                                       $I => 'error',
-                                               ),
-                                       ),
-                                       'warnings' => array(
-                                               'string' => array(
-                                                       array(
-                                                               'code' => 'mainpage',
-                                                               'message' => 'mainpage',
-                                                               'params' => array( $I => 'param' )
-                                                       ),
-                                                       $I => 'warning',
-                                               ),
-                                       ),
-                               ),
-                               array(
-                                       'errors' => array(
-                                               'errWithData' => array(
-                                                       array(
-                                                               'code' => 'overriddenCode',
-                                                               'message' => 'mainpage',
-                                                               'params' => array( $I => 'param' ),
-                                                               'overriddenData' => true
-                                                       ),
-                                                       $I => 'error',
-                                               ),
-                                       ),
-                                       'warnings' => array(
-                                               'messageWithData' => array(
-                                                       array(
-                                                               'code' => 'overriddenCode',
-                                                               'message' => 'mainpage',
-                                                               'params' => array( $I => 'param' ),
-                                                               'overriddenData' => true
-                                                       ),
-                                                       $I => 'warning',
-                                               ),
-                                               'message' => array(
-                                                       array(
-                                                               'code' => 'mainpage',
-                                                               'message' => 'mainpage',
-                                                               'params' => array( $I => 'param' )
-                                                       ),
-                                                       $I => 'warning',
-                                               ),
-                                               'foo' => array(
-                                                       array(
-                                                               'code' => 'mainpage',
-                                                               'message' => 'mainpage',
-                                                               'params' => array( $I => 'param' )
-                                                       ),
-                                                       array(
-                                                               'code' => 'parentheses',
-                                                               'message' => 'parentheses',
-                                                               'params' => array( 'foobar', $I => 'param' )
-                                                       ),
-                                                       $I => 'warning',
-                                               ),
-                                       ),
-                               ),
-                               array(
-                                       'errors' => array(
-                                               'status' => array(
-                                                       array(
-                                                               'code' => 'mainpage',
-                                                               'message' => 'mainpage',
-                                                               'params' => array( $I => 'param' )
-                                                       ),
-                                                       array(
-                                                               'code' => 'parentheses',
-                                                               'message' => 'parentheses',
-                                                               'params' => array( 'foobar', $I => 'param' )
-                                                       ),
-                                                       $I => 'error',
-                                               ),
-                                       ),
-                                       'warnings' => array(
-                                               'status' => array(
-                                                       array(
-                                                               'code' => 'mainpage',
-                                                               'message' => 'mainpage',
-                                                               'params' => array( $I => 'param' )
-                                                       ),
-                                                       array(
-                                                               'code' => 'parentheses',
-                                                               'message' => 'parentheses',
-                                                               'params' => array( 'foobar', $I => 'param' )
-                                                       ),
-                                                       array(
-                                                               'code' => 'overriddenCode',
-                                                               'message' => 'mainpage',
-                                                               'params' => array( $I => 'param' ),
-                                                               'overriddenData' => true
-                                                       ),
-                                                       $I => 'warning',
-                                               ),
-                                       ),
-                               ),
-                       ),
-                       array( 'none', 'fr', true,
-                               array(
-                                       'errors' => array(
-                                               'err' => array(
-                                                       array( 'code' => 'mainpage' ),
-                                                       $I => 'error',
-                                               ),
-                                       ),
-                                       'warnings' => array(
-                                               'string' => array(
-                                                       array( 'code' => 'mainpage' ),
-                                                       $I => 'warning',
-                                               ),
-                                       ),
-                               ),
-                               array(
-                                       'errors' => array(
-                                               'errWithData' => array(
-                                                       array( 'code' => 'overriddenCode', 'overriddenData' => true ),
-                                                       $I => 'error',
-                                               ),
-                                       ),
-                                       'warnings' => array(
-                                               'messageWithData' => array(
-                                                       array( 'code' => 'overriddenCode', 'overriddenData' => true ),
-                                                       $I => 'warning',
-                                               ),
-                                               'message' => array(
-                                                       array( 'code' => 'mainpage' ),
-                                                       $I => 'warning',
-                                               ),
-                                               'foo' => array(
-                                                       array( 'code' => 'mainpage' ),
-                                                       array( 'code' => 'parentheses' ),
-                                                       $I => 'warning',
-                                               ),
-                                       ),
-                               ),
-                               array(
-                                       'errors' => array(
-                                               'status' => array(
-                                                       array( 'code' => 'mainpage' ),
-                                                       array( 'code' => 'parentheses' ),
-                                                       $I => 'error',
-                                               ),
-                                       ),
-                                       'warnings' => array(
-                                               'status' => array(
-                                                       array( 'code' => 'mainpage' ),
-                                                       array( 'code' => 'parentheses' ),
-                                                       array( 'code' => 'overriddenCode', 'overriddenData' => true ),
-                                                       $I => 'warning',
-                                               ),
-                                       ),
-                               ),
-                       ),
-               );
+               return [
+                       $tmp = [ 'wikitext', 'de', false,
+                               [
+                                       'errors' => [
+                                               [ 'code' => 'mainpage', 'text' => $mainpageText, 'module' => 'err', $C => 'text' ],
+                                               $I => 'error',
+                                       ],
+                                       'warnings' => [
+                                               [ 'code' => 'mainpage', 'text' => $mainpageText, 'module' => 'string', $C => 'text' ],
+                                               $I => 'warning',
+                                       ],
+                               ],
+                               [
+                                       'errors' => [
+                                               [ 'code' => 'overriddenCode', 'text' => $mainpageText,
+                                                       'data' => $overriddenData, 'module' => 'errWithData', $C => 'text' ],
+                                               $I => 'error',
+                                       ],
+                                       'warnings' => [
+                                               [ 'code' => 'mainpage', 'text' => $mainpageText, 'module' => 'foo', $C => 'text' ],
+                                               [ 'code' => 'parentheses', 'text' => $parensText, 'module' => 'foo', $C => 'text' ],
+                                               [ 'code' => 'mainpage', 'text' => $mainpageText, 'module' => 'message', $C => 'text' ],
+                                               [ 'code' => 'overriddenCode', 'text' => $mainpageText,
+                                                       'data' => $overriddenData, 'module' => 'messageWithData', $C => 'text' ],
+                                               $I => 'warning',
+                                       ],
+                               ],
+                               [
+                                       'errors' => [
+                                               [ 'code' => 'mainpage', 'text' => $mainpageText, 'module' => 'status', $C => 'text' ],
+                                               [ 'code' => 'parentheses', 'text' => $parensText, 'module' => 'status', $C => 'text' ],
+                                               $I => 'error',
+                                       ],
+                                       'warnings' => [
+                                               [ 'code' => 'mainpage', 'text' => $mainpageText, 'module' => 'status', $C => 'text' ],
+                                               [ 'code' => 'parentheses', 'text' => $parensText, 'module' => 'status', $C => 'text' ],
+                                               [ 'code' => 'overriddenCode', 'text' => $mainpageText,
+                                                       'data' => $overriddenData, 'module' => 'status', $C => 'text' ],
+                                               $I => 'warning',
+                                       ],
+                               ],
+                       ],
+                       [ 'plaintext' ] + $tmp, // For these messages, plaintext and wikitext are the same
+                       [ 'html', 'en', true,
+                               [
+                                       'errors' => [
+                                               [ 'code' => 'mainpage', 'html' => $mainpageHTML, 'module' => 'err', $C => 'html' ],
+                                               $I => 'error',
+                                       ],
+                                       'warnings' => [
+                                               [ 'code' => 'mainpage', 'html' => $mainpageHTML, 'module' => 'string', $C => 'html' ],
+                                               $I => 'warning',
+                                       ],
+                               ],
+                               [
+                                       'errors' => [
+                                               [ 'code' => 'overriddenCode', 'html' => $mainpageHTML,
+                                                       'data' => $overriddenData, 'module' => 'errWithData', $C => 'html' ],
+                                               $I => 'error',
+                                       ],
+                                       'warnings' => [
+                                               [ 'code' => 'mainpage', 'html' => $mainpageHTML, 'module' => 'foo', $C => 'html' ],
+                                               [ 'code' => 'parentheses', 'html' => $parensHTML, 'module' => 'foo', $C => 'html' ],
+                                               [ 'code' => 'mainpage', 'html' => $mainpageHTML, 'module' => 'message', $C => 'html' ],
+                                               [ 'code' => 'overriddenCode', 'html' => $mainpageHTML,
+                                                       'data' => $overriddenData, 'module' => 'messageWithData', $C => 'html' ],
+                                               $I => 'warning',
+                                       ],
+                               ],
+                               [
+                                       'errors' => [
+                                               [ 'code' => 'mainpage', 'html' => $mainpageHTML, 'module' => 'status', $C => 'html' ],
+                                               [ 'code' => 'parentheses', 'html' => $parensHTML, 'module' => 'status', $C => 'html' ],
+                                               $I => 'error',
+                                       ],
+                                       'warnings' => [
+                                               [ 'code' => 'mainpage', 'html' => $mainpageHTML, 'module' => 'status', $C => 'html' ],
+                                               [ 'code' => 'parentheses', 'html' => $parensHTML, 'module' => 'status', $C => 'html' ],
+                                               [ 'code' => 'overriddenCode', 'html' => $mainpageHTML,
+                                                       'data' => $overriddenData, 'module' => 'status', $C => 'html' ],
+                                               $I => 'warning',
+                                       ],
+                               ],
+                       ],
+                       [ 'raw', 'fr', true,
+                               [
+                                       'errors' => [
+                                               [
+                                                       'code' => 'mainpage',
+                                                       'key' => 'mainpage',
+                                                       'params' => [ $I => 'param' ],
+                                                       'module' => 'err',
+                                               ],
+                                               $I => 'error',
+                                       ],
+                                       'warnings' => [
+                                               [
+                                                       'code' => 'mainpage',
+                                                       'key' => 'mainpage',
+                                                       'params' => [ $I => 'param' ],
+                                                       'module' => 'string',
+                                               ],
+                                               $I => 'warning',
+                                       ],
+                               ],
+                               [
+                                       'errors' => [
+                                               [
+                                                       'code' => 'overriddenCode',
+                                                       'key' => 'mainpage',
+                                                       'params' => [ $I => 'param' ],
+                                                       'data' => $overriddenData,
+                                                       'module' => 'errWithData',
+                                               ],
+                                               $I => 'error',
+                                       ],
+                                       'warnings' => [
+                                               [
+                                                       'code' => 'mainpage',
+                                                       'key' => 'mainpage',
+                                                       'params' => [ $I => 'param' ],
+                                                       'module' => 'foo',
+                                               ],
+                                               [
+                                                       'code' => 'parentheses',
+                                                       'key' => 'parentheses',
+                                                       'params' => [ 'foobar', $I => 'param' ],
+                                                       'module' => 'foo',
+                                               ],
+                                               [
+                                                       'code' => 'mainpage',
+                                                       'key' => 'mainpage',
+                                                       'params' => [ $I => 'param' ],
+                                                       'module' => 'message',
+                                               ],
+                                               [
+                                                       'code' => 'overriddenCode',
+                                                       'key' => 'mainpage',
+                                                       'params' => [ $I => 'param' ],
+                                                       'data' => $overriddenData,
+                                                       'module' => 'messageWithData',
+                                               ],
+                                               $I => 'warning',
+                                       ],
+                               ],
+                               [
+                                       'errors' => [
+                                               [
+                                                       'code' => 'mainpage',
+                                                       'key' => 'mainpage',
+                                                       'params' => [ $I => 'param' ],
+                                                       'module' => 'status',
+                                               ],
+                                               [
+                                                       'code' => 'parentheses',
+                                                       'key' => 'parentheses',
+                                                       'params' => [ 'foobar', $I => 'param' ],
+                                                       'module' => 'status',
+                                               ],
+                                               $I => 'error',
+                                       ],
+                                       'warnings' => [
+                                               [
+                                                       'code' => 'mainpage',
+                                                       'key' => 'mainpage',
+                                                       'params' => [ $I => 'param' ],
+                                                       'module' => 'status',
+                                               ],
+                                               [
+                                                       'code' => 'parentheses',
+                                                       'key' => 'parentheses',
+                                                       'params' => [ 'foobar', $I => 'param' ],
+                                                       'module' => 'status',
+                                               ],
+                                               [
+                                                       'code' => 'overriddenCode',
+                                                       'key' => 'mainpage',
+                                                       'params' => [ $I => 'param' ],
+                                                       'data' => $overriddenData,
+                                                       'module' => 'status',
+                                               ],
+                                               $I => 'warning',
+                                       ],
+                               ],
+                       ],
+                       [ 'none', 'fr', true,
+                               [
+                                       'errors' => [
+                                               [ 'code' => 'mainpage', 'module' => 'err' ],
+                                               $I => 'error',
+                                       ],
+                                       'warnings' => [
+                                               [ 'code' => 'mainpage', 'module' => 'string' ],
+                                               $I => 'warning',
+                                       ],
+                               ],
+                               [
+                                       'errors' => [
+                                               [ 'code' => 'overriddenCode', 'data' => $overriddenData,
+                                                       'module' => 'errWithData' ],
+                                               $I => 'error',
+                                       ],
+                                       'warnings' => [
+                                               [ 'code' => 'mainpage', 'module' => 'foo' ],
+                                               [ 'code' => 'parentheses', 'module' => 'foo' ],
+                                               [ 'code' => 'mainpage', 'module' => 'message' ],
+                                               [ 'code' => 'overriddenCode', 'data' => $overriddenData,
+                                                       'module' => 'messageWithData' ],
+                                               $I => 'warning',
+                                       ],
+                               ],
+                               [
+                                       'errors' => [
+                                               [ 'code' => 'mainpage', 'module' => 'status' ],
+                                               [ 'code' => 'parentheses', 'module' => 'status' ],
+                                               $I => 'error',
+                                       ],
+                                       'warnings' => [
+                                               [ 'code' => 'mainpage', 'module' => 'status' ],
+                                               [ 'code' => 'parentheses', 'module' => 'status' ],
+                                               [ 'code' => 'overriddenCode', 'data' => $overriddenData, 'module' => 'status' ],
+                                               $I => 'warning',
+                                       ],
+                               ],
+                       ],
+               ];
        }
 
        /**
@@ -302,53 +348,85 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase {
                $result = new ApiResult( 8388608 );
                $formatter = new ApiErrorFormatter_BackCompat( $result );
 
+               $this->assertSame( 'en', $formatter->getLanguage()->getCode() );
+
+               $this->assertSame( [], $formatter->arrayFromStatus( Status::newGood() ) );
+
                $formatter->addWarning( 'string', 'mainpage' );
+               $formatter->addWarning( 'raw',
+                       new RawMessage( 'Blah <kbd>kbd</kbd> <b>&lt;X&gt;</b> &#x1f61e;' )
+               );
                $formatter->addError( 'err', 'mainpage' );
-               $this->assertSame( array(
-                       'error' => array(
+               $this->assertSame( [
+                       'error' => [
                                'code' => 'mainpage',
                                'info' => $mainpagePlain,
-                       ),
-                       'warnings' => array(
-                               'string' => array(
+                       ],
+                       'warnings' => [
+                               'raw' => [
+                                       'warnings' => 'Blah "kbd" <X> ðŸ˜ž',
+                                       ApiResult::META_CONTENT => 'warnings',
+                               ],
+                               'string' => [
                                        'warnings' => $mainpagePlain,
                                        ApiResult::META_CONTENT => 'warnings',
-                               ),
-                       ),
+                               ],
+                       ],
                        ApiResult::META_TYPE => 'assoc',
-               ), $result->getResultData(), 'Simple test' );
+               ], $result->getResultData(), 'Simple test' );
 
                $result->reset();
                $formatter->addWarning( 'foo', 'mainpage' );
                $formatter->addWarning( 'foo', 'mainpage' );
-               $formatter->addWarning( 'foo', array( 'parentheses', 'foobar' ) );
+               $formatter->addWarning( 'xxx+foo', [ 'parentheses', 'foobar' ] );
                $msg1 = wfMessage( 'mainpage' );
                $formatter->addWarning( 'message', $msg1 );
-               $msg2 = new ApiMessage( 'mainpage', 'overriddenCode', array( 'overriddenData' => true ) );
+               $msg2 = new ApiMessage( 'mainpage', 'overriddenCode', [ 'overriddenData' => true ] );
                $formatter->addWarning( 'messageWithData', $msg2 );
                $formatter->addError( 'errWithData', $msg2 );
-               $this->assertSame( array(
-                       'error' => array(
+               $formatter->addWarning( null, 'mainpage' );
+               $this->assertSame( [
+                       'error' => [
                                'code' => 'overriddenCode',
                                'info' => $mainpagePlain,
                                'overriddenData' => true,
-                       ),
-                       'warnings' => array(
-                               'messageWithData' => array(
+                       ],
+                       'warnings' => [
+                               'unknown' => [
+                                       'warnings' => $mainpagePlain,
+                                       ApiResult::META_CONTENT => 'warnings',
+                               ],
+                               'messageWithData' => [
                                        'warnings' => $mainpagePlain,
                                        ApiResult::META_CONTENT => 'warnings',
-                               ),
-                               'message' => array(
+                               ],
+                               'message' => [
                                        'warnings' => $mainpagePlain,
                                        ApiResult::META_CONTENT => 'warnings',
-                               ),
-                               'foo' => array(
+                               ],
+                               'foo' => [
                                        'warnings' => "$mainpagePlain\n$parensPlain",
                                        ApiResult::META_CONTENT => 'warnings',
-                               ),
-                       ),
+                               ],
+                       ],
                        ApiResult::META_TYPE => 'assoc',
-               ), $result->getResultData(), 'Complex test' );
+               ], $result->getResultData(), 'Complex test' );
+
+               $this->assertSame(
+                       [
+                               'code' => 'mainpage',
+                               'info' => 'Main Page',
+                       ],
+                       $formatter->formatMessage( $msg1 )
+               );
+               $this->assertSame(
+                       [
+                               'code' => 'overriddenCode',
+                               'info' => 'Main Page',
+                               'overriddenData' => true,
+                       ],
+                       $formatter->formatMessage( $msg2 )
+               );
 
                $result->reset();
                $status = Status::newGood();
@@ -359,62 +437,68 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase {
                $status->error( 'mainpage' );
                $status->error( 'parentheses', 'foobar' );
                $formatter->addMessagesFromStatus( 'status', $status );
-               $this->assertSame( array(
-                       'error' => array(
+               $this->assertSame( [
+                       'error' => [
                                'code' => 'parentheses',
                                'info' => $parensPlain,
-                       ),
-                       'warnings' => array(
-                               'status' => array(
+                       ],
+                       'warnings' => [
+                               'status' => [
                                        'warnings' => "$mainpagePlain\n$parensPlain",
                                        ApiResult::META_CONTENT => 'warnings',
-                               ),
-                       ),
+                               ],
+                       ],
                        ApiResult::META_TYPE => 'assoc',
-               ), $result->getResultData(), 'Status test' );
+               ], $result->getResultData(), 'Status test' );
 
                $I = ApiResult::META_INDEXED_TAG_NAME;
                $this->assertSame(
-                       array(
-                               array(
-                                       'type' => 'error',
+                       [
+                               [
                                        'message' => 'mainpage',
-                                       'params' => array( $I => 'param' )
-                               ),
-                               array(
+                                       'params' => [ $I => 'param' ],
+                                       'code' => 'mainpage',
                                        'type' => 'error',
+                               ],
+                               [
                                        'message' => 'parentheses',
-                                       'params' => array( 'foobar', $I => 'param' )
-                               ),
+                                       'params' => [ 'foobar', $I => 'param' ],
+                                       'code' => 'parentheses',
+                                       'type' => 'error',
+                               ],
                                $I => 'error',
-                       ),
+                       ],
                        $formatter->arrayFromStatus( $status, 'error' ),
                        'arrayFromStatus test for error'
                );
                $this->assertSame(
-                       array(
-                               array(
-                                       'type' => 'warning',
+                       [
+                               [
                                        'message' => 'mainpage',
-                                       'params' => array( $I => 'param' )
-                               ),
-                               array(
+                                       'params' => [ $I => 'param' ],
+                                       'code' => 'mainpage',
                                        'type' => 'warning',
+                               ],
+                               [
                                        'message' => 'parentheses',
-                                       'params' => array( 'foobar', $I => 'param' )
-                               ),
-                               array(
+                                       'params' => [ 'foobar', $I => 'param' ],
+                                       'code' => 'parentheses',
+                                       'type' => 'warning',
+                               ],
+                               [
                                        'message' => 'mainpage',
-                                       'params' => array( $I => 'param' ),
-                                       'type' => 'warning'
-                               ),
-                               array(
+                                       'params' => [ $I => 'param' ],
+                                       'code' => 'mainpage',
+                                       'type' => 'warning',
+                               ],
+                               [
                                        'message' => 'mainpage',
-                                       'params' => array( $I => 'param' ),
-                                       'type' => 'warning'
-                               ),
+                                       'params' => [ $I => 'param' ],
+                                       'code' => 'overriddenCode',
+                                       'type' => 'warning',
+                               ],
                                $I => 'warning',
-                       ),
+                       ],
                        $formatter->arrayFromStatus( $status, 'warning' ),
                        'arrayFromStatus test for warning'
                );