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

Reply via email to