jenkins-bot has submitted this change and it was merged. Change subject: Rework MessageSnakFormatterTest ......................................................................
Rework MessageSnakFormatterTest ... and clean up MessageSnakFormatter. This is a base patch for T63662. This patch does not change any semantics, the next patch does. * Make test independent from core. * Add a lot more test cases. * Add missing support for FORMAT_HTML_DIFF. * Add missing docs. * Fix outdated docs. Bug: T63662 Change-Id: I93eca5e171e2d5ef7acf66b61fc0790debbfa0c9 --- M lib/includes/formatters/MessageSnakFormatter.php M lib/tests/phpunit/formatters/MessageSnakFormatterTest.php 2 files changed, 99 insertions(+), 34 deletions(-) Approvals: Adrian Lang: Looks good to me, approved jenkins-bot: Verified diff --git a/lib/includes/formatters/MessageSnakFormatter.php b/lib/includes/formatters/MessageSnakFormatter.php index 2c8828d..a1ddbb4 100644 --- a/lib/includes/formatters/MessageSnakFormatter.php +++ b/lib/includes/formatters/MessageSnakFormatter.php @@ -4,6 +4,7 @@ use InvalidArgumentException; use Message; +use RuntimeException; use Wikibase\DataModel\Snak\Snak; /** @@ -17,7 +18,7 @@ class MessageSnakFormatter implements SnakFormatter { /** - * @var string + * @var string One of the SnakFormatter::FORMAT_... constants. */ private $format; @@ -27,16 +28,16 @@ private $message; /** - * @var String + * @var string */ private $snakType; /** - * @param string $snakType + * @param string $snakType Type of the snak, usually "value", "somevalue" or "novalue". * @param Message $message - * @param string $format + * @param string $format One of the SnakFormatter::FORMAT_... constants. * - * @throws \InvalidArgumentException + * @throws InvalidArgumentException */ public function __construct( $snakType, Message $message, $format ) { if ( !is_string( $snakType ) ) { @@ -53,10 +54,9 @@ } /** - * Returns the format ID of the format this formatter generates. - * This uses the FORMAT_XXX constants defined in OutputFormatSnakFormatterFactory. + * @see SnakFormatter::getFormat * - * @return string + * @return string One of the SnakFormatter::FORMAT_... constants. */ public function getFormat() { return $this->format; @@ -64,31 +64,35 @@ /** * Returns a string from the message provided to the constructor. - * Depending on the desired format, the text is returned as HTML or wikitext. + * Depending on the desired format, the text is returned as plain, wikitext or HTML. * * Note that this method does not look at the snak given. It simply returns the same * message always. * - * @param Snak $snak + * @see SnakFormatter::formatSnak * - * @return string + * @param Snak $snak Unused in this implementation. + * + * @throws RuntimeException If the requested output format is not known. + * @return string Plain, wikitext or HTML */ public function formatSnak( Snak $snak ) { - if ( $this->format === SnakFormatter::FORMAT_HTML - || $this->format === SnakFormatter::FORMAT_HTML_WIDGET - ) { - $text = $this->message->parse(); - } else { - $text = $this->message->text(); + if ( $this->format === SnakFormatter::FORMAT_PLAIN ) { + return $this->message->plain(); + } elseif ( $this->format === SnakFormatter::FORMAT_WIKI ) { + return $this->message->text(); + } elseif ( strpos( $this->format, SnakFormatter::FORMAT_HTML ) === 0 ) { + $html = $this->message->parse(); + return $html; } - return $text; + throw new RuntimeException( 'Unknown format' ); } /** * Checks whether the snak type supplied to the constructor matches the given snak. * - * @see SnakFormatter::canFormatSnak() + * @see SnakFormatter::canFormatSnak * * @param Snak $snak * diff --git a/lib/tests/phpunit/formatters/MessageSnakFormatterTest.php b/lib/tests/phpunit/formatters/MessageSnakFormatterTest.php index 83e9f7f..d13fe01 100644 --- a/lib/tests/phpunit/formatters/MessageSnakFormatterTest.php +++ b/lib/tests/phpunit/formatters/MessageSnakFormatterTest.php @@ -2,54 +2,115 @@ namespace Wikibase\Lib\Test; +use DataValues\StringValue; use Wikibase\DataModel\Entity\PropertyId; use Wikibase\DataModel\Snak\PropertyNoValueSnak; use Wikibase\DataModel\Snak\PropertySomeValueSnak; +use Wikibase\DataModel\Snak\PropertyValueSnak; +use Wikibase\DataModel\Snak\Snak; use Wikibase\Lib\MessageSnakFormatter; use Wikibase\Lib\SnakFormatter; /** * @covers Wikibase\Lib\MessageSnakFormatter + * @uses Wikibase\DataModel\Entity\PropertyId + * @uses Wikibase\DataModel\Snak\PropertyNoValueSnak + * @uses Wikibase\DataModel\Snak\PropertySomeValueSnak * * @group ValueFormatters * @group DataValueExtensions * @group WikibaseLib * @group Wikibase - * @group Database * * @licence GNU GPL v2+ * @author Daniel Kinzler + * @author Thiemo Mättig */ class MessageSnakFormatterTest extends \MediaWikiTestCase { - public function testFormatSnak() { - //TODO: Find a better message for testing, one that actually contains wikitext. - $msg = wfMessage( 'wikibase-snakview-snaktypeselector-novalue' ); - $snak = new PropertyNoValueSnak( new PropertyId( "P23" ) ); + /** + * @param string $snakType + * @param string $format + * + * @return MessageSnakFormatter + */ + private function getFormatter( $snakType, $format ) { + $message = $this->getMockBuilder( 'Message' ) + ->disableOriginalConstructor() + ->getMock(); - $formatter = new MessageSnakFormatter( $snak->getType(), $msg, SnakFormatter::FORMAT_WIKI ); - $this->assertEquals( $msg->text(), $formatter->formatSnak( $snak ) ); + foreach ( array( 'parse', 'text', 'plain' ) as $method ) { + $message->expects( $this->any() ) + ->method( $method ) + ->will( $this->returnValue( $method ) ); + } - $formatter = new MessageSnakFormatter( $snak->getType(), $msg, SnakFormatter::FORMAT_HTML ); - $this->assertEquals( $msg->parse(), $formatter->formatSnak( $snak ) ); + return new MessageSnakFormatter( $snakType, $message, $format ); } public function testGetFormat() { - $msg = wfMessage( 'wikibase-snakview-snaktypeselector-novalue' ); - $formatter = new MessageSnakFormatter( 'any', $msg, 'test' ); + $formatter = $this->getFormatter( 'any', 'test' ); $this->assertEquals( 'test', $formatter->getFormat() ); } public function testCanFormatSnak() { - $msg = wfMessage( 'wikibase-snakview-snaktypeselector-novalue' ); - $formatter = new MessageSnakFormatter( 'novalue', $msg, 'test' ); + $id = new PropertyId( 'P1' ); + $formatter = $this->getFormatter( 'novalue', 'test' ); - $snak = new PropertyNoValueSnak( new PropertyId( "P23" ) ); + $snak = new PropertyNoValueSnak( $id ); $this->assertTrue( $formatter->canFormatSnak( $snak ), $snak->getType() ); - $snak = new PropertySomeValueSnak( new PropertyId( "P23" ) ); + $snak = new PropertySomeValueSnak( $id ); $this->assertFalse( $formatter->canFormatSnak( $snak ), $snak->getType() ); } + /** + * @dataProvider snakProvider + */ + public function testFormatSnak_givenDifferentSnakTypes( Snak $snak, $expected ) { + $formatter = $this->getFormatter( $snak->getType(), SnakFormatter::FORMAT_HTML ); + + $this->assertEquals( $expected, $formatter->formatSnak( $snak ) ); + } + + public function snakProvider() { + $id = new PropertyId( 'P1' ); + + return array( + array( + new PropertyValueSnak( $id, new StringValue( 'string' ) ), + 'parse' + ), + array( + new PropertySomeValueSnak( $id ), + 'parse' + ), + array( + new PropertyNoValueSnak( $id ), + 'parse' + ), + ); + } + + /** + * @dataProvider formatProvider + */ + public function testFormatSnak_givenDifferentFormats( $format, $expected ) { + $snak = new PropertyValueSnak( new PropertyId( 'P1' ), new StringValue( 'string' ) ); + $formatter = $this->getFormatter( $snak->getType(), $format ); + + $this->assertEquals( $expected, $formatter->formatSnak( $snak ) ); + } + + public function formatProvider() { + return array( + array( SnakFormatter::FORMAT_PLAIN, 'plain' ), + array( SnakFormatter::FORMAT_WIKI, 'text' ), + array( SnakFormatter::FORMAT_HTML, 'parse' ), + array( SnakFormatter::FORMAT_HTML_WIDGET, 'parse' ), + array( SnakFormatter::FORMAT_HTML_DIFF, 'parse' ), + ); + } + } -- To view, visit https://gerrit.wikimedia.org/r/195876 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I93eca5e171e2d5ef7acf66b61fc0790debbfa0c9 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Thiemo Mättig (WMDE) <thiemo.maet...@wikimedia.de> Gerrit-Reviewer: Adrian Lang <adrian.he...@wikimedia.de> Gerrit-Reviewer: Aude <aude.w...@gmail.com> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits