X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2Fapi%2FApiErrorFormatterTest.php;h=1b7f6bff5737efa7acb083c458c806d63d07c7ae;hb=9e07891ca7cd2f83004206c637e50da2a0419a31;hp=a08a86ef3a33bb8b8675e858909defafe81b9c2d;hpb=2a197150f6da26486a6f5bd28d0328786bc23c22;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/api/ApiErrorFormatterTest.php b/tests/phpunit/includes/api/ApiErrorFormatterTest.php index a08a86ef3a..1b7f6bff57 100644 --- a/tests/phpunit/includes/api/ApiErrorFormatterTest.php +++ b/tests/phpunit/includes/api/ApiErrorFormatterTest.php @@ -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" 😊', + $wrappedFormatter->stripMarkup( 'Blah kbd <X> 😊' ), + '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 <X> 😞' ) + ); $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" 😞', + 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' );