Thiemo Mättig (WMDE) has uploaded a new change for review.
https://gerrit.wikimedia.org/r/195876
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(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/76/195876/1
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: newchange
Gerrit-Change-Id: I93eca5e171e2d5ef7acf66b61fc0790debbfa0c9
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Thiemo Mättig (WMDE) <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits