Aude has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/148096

Change subject: Introduce VariantsRenderer for property parser function
......................................................................

Introduce VariantsRenderer for property parser function

Change-Id: I5b674ee287db316e76b32ffee859257da2a2f2d5
---
A client/includes/DataAccess/PropertyParserFunction/LanguageRenderer.php
M client/includes/DataAccess/PropertyParserFunction/Renderer.php
M client/includes/DataAccess/PropertyParserFunction/RendererFactory.php
M client/includes/DataAccess/PropertyParserFunction/Runner.php
A client/includes/DataAccess/PropertyParserFunction/VariantsRenderer.php
R 
client/tests/phpunit/includes/DataAccess/PropertyParserFunction/LanguageRendererTest.php
M 
client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RendererFactoryTest.php
M client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RunnerTest.php
A 
client/tests/phpunit/includes/DataAccess/PropertyParserFunction/VariantsRendererTest.php
9 files changed, 470 insertions(+), 286 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/96/148096/1

diff --git 
a/client/includes/DataAccess/PropertyParserFunction/LanguageRenderer.php 
b/client/includes/DataAccess/PropertyParserFunction/LanguageRenderer.php
new file mode 100644
index 0000000..d43f890
--- /dev/null
+++ b/client/includes/DataAccess/PropertyParserFunction/LanguageRenderer.php
@@ -0,0 +1,127 @@
+<?php
+
+namespace Wikibase\DataAccess\PropertyParserFunction;
+
+use InvalidArgumentException;
+use Language;
+use Status;
+use Wikibase\Client\WikibaseClient;
+use Wikibase\DataModel\Claim\Claims;
+use Wikibase\DataModel\Entity\Entity;
+use Wikibase\DataModel\Entity\EntityId;
+use Wikibase\DataModel\Entity\EntityIdParsingException;
+use Wikibase\DataModel\Entity\PropertyId;
+use Wikibase\Lib\PropertyLabelNotResolvedException;
+use Wikibase\Lib\SnakFormatter;
+use Wikibase\Lib\Store\EntityLookup;
+use Wikibase\PropertyLabelResolver;
+
+/**
+ * Renderer of the {{#property}} parser function.
+ *
+ * @fixme see what code can be shared with Lua handling code.
+ *
+ * @since 0.5
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < [email protected] >
+ * @author Jeroen De Dauw < [email protected] >
+ * @author Daniel Kinzler
+ * @author Liangent < [email protected] >
+ */
+class LanguageRenderer implements Renderer {
+
+       private $language;
+       private $snaksFinder;
+       private $snakFormatter;
+
+       public function __construct(
+               Language $language,
+               SnaksFinder $snaksFinder,
+               SnakFormatter $snakFormatter
+       ) {
+               $this->language = $language;
+               $this->snaksFinder = $snaksFinder;
+               $this->snakFormatter = $snakFormatter;
+       }
+
+       /**
+        * @param EntityId $entityId
+        * @param string $propertyLabel property label or ID (pXXX)
+        *
+        * @return string
+        */
+       public function render( EntityId $entityId, $propertyLabel ) {
+               try {
+                       $status = $this->getStatus( $entityId, $propertyLabel );
+               } catch ( PropertyLabelNotResolvedException $ex ) {
+                       $status = $this->getStatusForException( $propertyLabel, 
$ex->getMessage() );
+               } catch ( InvalidArgumentException $ex ) {
+                       $status = $this->getStatusForException( $propertyLabel, 
$ex->getMessage() );
+               }
+
+               if ( !$status->isGood() ) {
+                       $error = $status->getMessage()->inLanguage( 
$this->language )->text();
+                       return '<p class="error wikibase-error">' . $error . 
'</p>';
+               }
+
+               $text = $status->getValue();
+               return $text;
+       }
+
+       /**
+        * @param string $propertyLabel
+        * @param string $message
+        *
+        * @return Status
+        */
+       private function getStatusForException( $propertyLabel, $message ) {
+               return Status::newFatal(
+                       'wikibase-property-render-error',
+                       $propertyLabel,
+                       $message
+               );
+       }
+
+       /**
+        * @param Snak[] $snaks
+        *
+        * @return string wikitext
+        */
+       private function formatSnaks( array $snaks ) {
+               $formattedValues = array();
+
+               foreach ( $snaks as $snak ) {
+                       $formattedValues[] = $this->snakFormatter->formatSnak( 
$snak );
+               }
+
+               return $this->language->commaList( $formattedValues );
+       }
+
+       /**
+        * @param EntityId $entityId
+        * @param string $propertyLabel
+        *
+        * @return Status a status object wrapping a wikitext string
+        */
+       private function getStatus( EntityId $entityId, $propertyLabel ) {
+               wfProfileIn( __METHOD__ );
+
+               $snaks = $this->snaksFinder->findSnaks(
+                       $entityId,
+                       $propertyLabel,
+                       $this->language->getCode()
+               );
+
+               if ( !$snaks ) {
+                       return Status::newGood( '' );
+               }
+
+               $text = $this->formatSnaks( $snaks, $propertyLabel );
+               $status = Status::newGood( $text );
+
+               wfProfileOut( __METHOD__ );
+               return $status;
+       }
+
+}
diff --git a/client/includes/DataAccess/PropertyParserFunction/Renderer.php 
b/client/includes/DataAccess/PropertyParserFunction/Renderer.php
index 18ca037..17d6f8e 100644
--- a/client/includes/DataAccess/PropertyParserFunction/Renderer.php
+++ b/client/includes/DataAccess/PropertyParserFunction/Renderer.php
@@ -2,127 +2,24 @@
 
 namespace Wikibase\DataAccess\PropertyParserFunction;
 
-use InvalidArgumentException;
-use Language;
-use Status;
-use Wikibase\Client\WikibaseClient;
-use Wikibase\DataModel\Claim\Claims;
-use Wikibase\DataModel\Entity\Entity;
 use Wikibase\DataModel\Entity\EntityId;
-use Wikibase\DataModel\Entity\EntityIdParsingException;
-use Wikibase\DataModel\Entity\PropertyId;
-use Wikibase\Lib\PropertyLabelNotResolvedException;
-use Wikibase\Lib\SnakFormatter;
-use Wikibase\Lib\Store\EntityLookup;
-use Wikibase\PropertyLabelResolver;
 
 /**
- * Renderer of the {{#property}} parser function.
- *
- * @fixme this does more than just rendering, so should be split,
- * cleaned up and see what code can be shared with Lua handling code.
+ * Renderer for the {{#property}} parser function.
  *
  * @since 0.5
  *
  * @licence GNU GPL v2+
  * @author Katie Filbert < [email protected] >
- * @author Jeroen De Dauw < [email protected] >
- * @author Daniel Kinzler
- * @author Liangent < [email protected] >
  */
-class Renderer {
-
-       private $language;
-       private $snaksFinder;
-       private $snakFormatter;
-
-       public function __construct(
-               Language $language,
-               SnaksFinder $snaksFinder,
-               SnakFormatter $snakFormatter
-       ) {
-               $this->language = $language;
-               $this->snaksFinder = $snaksFinder;
-               $this->snakFormatter = $snakFormatter;
-       }
+interface Renderer {
 
        /**
         * @param EntityId $entityId
-        * @param string $propertyLabel property label or ID (pXXX)
+        * @param string $propertyLabelOrId property label or ID (pXXX)
         *
         * @return string
         */
-       public function render( EntityId $entityId, $propertyLabel ) {
-               try {
-                       $status = $this->getStatus( $entityId, $propertyLabel );
-               } catch ( PropertyLabelNotResolvedException $ex ) {
-                       $status = $this->getStatusForException( $propertyLabel, 
$ex->getMessage() );
-               } catch ( InvalidArgumentException $ex ) {
-                       $status = $this->getStatusForException( $propertyLabel, 
$ex->getMessage() );
-               }
-
-               if ( !$status->isGood() ) {
-                       $error = $status->getMessage()->inLanguage( 
$this->language )->text();
-                       return '<p class="error wikibase-error">' . $error . 
'</p>';
-               }
-
-               $text = $status->getValue();
-               return $text;
-       }
-
-       /**
-        * @param string $propertyLabel
-        * @param string $message
-        *
-        * @return Status
-        */
-       private function getStatusForException( $propertyLabel, $message ) {
-               return Status::newFatal(
-                       'wikibase-property-render-error',
-                       $propertyLabel,
-                       $message
-               );
-       }
-
-       /**
-        * @param Snak[] $snaks
-        *
-        * @return string wikitext
-        */
-       private function formatSnaks( array $snaks ) {
-               $formattedValues = array();
-
-               foreach ( $snaks as $snak ) {
-                       $formattedValues[] = $this->snakFormatter->formatSnak( 
$snak );
-               }
-
-               return $this->language->commaList( $formattedValues );
-       }
-
-       /**
-        * @param EntityId $entityId
-        * @param string $propertyLabel
-        *
-        * @return Status a status object wrapping a wikitext string
-        */
-       private function getStatus( EntityId $entityId, $propertyLabel ) {
-               wfProfileIn( __METHOD__ );
-
-               $snaks = $this->snaksFinder->findSnaks(
-                       $entityId,
-                       $propertyLabel,
-                       $this->language->getCode()
-               );
-
-               if ( !$snaks ) {
-                       return Status::newGood( '' );
-               }
-
-               $text = $this->formatSnaks( $snaks, $propertyLabel );
-               $status = Status::newGood( $text );
-
-               wfProfileOut( __METHOD__ );
-               return $status;
-       }
+       public function render( EntityId $entityId, $propertyLabelOrId );
 
 }
diff --git 
a/client/includes/DataAccess/PropertyParserFunction/RendererFactory.php 
b/client/includes/DataAccess/PropertyParserFunction/RendererFactory.php
index e329ea2..280eeb4 100644
--- a/client/includes/DataAccess/PropertyParserFunction/RendererFactory.php
+++ b/client/includes/DataAccess/PropertyParserFunction/RendererFactory.php
@@ -54,7 +54,7 @@
         * @return Renderer
         */
        public function newFromLanguage( Language $language ) {
-               return new Renderer(
+               return new LanguageRenderer(
                        $language,
                        $this->snaksFinder,
                        $this->newSnakFormatterForLanguage( $language )
@@ -62,6 +62,15 @@
        }
 
        /**
+        * @param string[] $variants
+        *
+        * @return VariantsRenderer
+        */
+       public function newVariantsRenderer( array $variants ) {
+               return new VariantsRenderer( $this, $variants );
+       }
+
+       /**
         * @param Language $language
         *
         * @return SnakFormatter
diff --git a/client/includes/DataAccess/PropertyParserFunction/Runner.php 
b/client/includes/DataAccess/PropertyParserFunction/Runner.php
index 58ef71d..3dfeea8 100644
--- a/client/includes/DataAccess/PropertyParserFunction/Runner.php
+++ b/client/includes/DataAccess/PropertyParserFunction/Runner.php
@@ -61,75 +61,6 @@
        }
 
        /**
-        * Check whether variants are used in this parser run.
-        *
-        * @param Parser $parser
-        *
-        * @return bool
-        */
-       public function isParserUsingVariants( Parser $parser ) {
-               $parserOptions = $parser->getOptions();
-               return $parser->OutputType() === Parser::OT_HTML && 
!$parserOptions->getInterfaceMessage()
-                       && !$parserOptions->getDisableContentConversion();
-       }
-
-       /**
-        * Post-process rendered array (variant text) into wikitext to be used 
in pages.
-        *
-        * @param string[] $textArray
-        *
-        * @return string
-        */
-       public function processRenderedArray( array $textArray ) {
-               // We got arrays, so they must have already checked that 
variants are being used.
-               $text = '';
-               foreach ( $textArray as $variantCode => $variantText ) {
-                       $text .= "$variantCode:$variantText;";
-               }
-               if ( $text !== '' ) {
-                       $text = '-{' . $text . '}-';
-               }
-
-               return $text;
-       }
-
-       /**
-        * @param EntityId $entityId
-        * @param string $propertyLabel property label or ID (pXXX)
-        * @param Language $language
-        *
-        * @return string
-        */
-       public function renderInLanguage( EntityId $entityId, $propertyLabel, 
Language $language ) {
-               $renderer = $this->rendererFactory->newFromLanguage( $language 
);
-               return $renderer->render( $entityId, $propertyLabel );
-       }
-
-       /**
-        * @param EntityId $entityId
-        * @param string $propertyLabel property label or ID (pXXX)
-        * @param string[] $variants Variant codes
-        *
-        * @return string[], key by variant codes
-        */
-       public function renderInVariants( EntityId $entityId, $propertyLabel, 
array $variants ) {
-               $textArray = array();
-
-               foreach ( $variants as $variantCode ) {
-                       $variantLanguage = Language::factory( $variantCode );
-                       $variantText = $this->renderInLanguage( $entityId, 
$propertyLabel, $variantLanguage );
-                       // LanguageConverter doesn't handle empty strings 
correctly, and it's more difficult
-                       // to fix the issue there, as it's using empty string 
as a special value.
-                       // Also keeping the ability to check a missing property 
with {{#if: }} is another reason.
-                       if ( $variantText !== '' ) {
-                               $textArray[$variantCode] = $variantText;
-                       }
-               }
-
-               return $textArray;
-       }
-
-       /**
         * @param Parser $parser
         * @param string $propertyLabelOrId property label or ID (pXXX)
         *
@@ -147,7 +78,7 @@
                        return '';
                }
 
-               $rendered = $this->renderForEntityId( $parser, $itemId, 
$propertyLabel );
+               $rendered = $this->renderForEntityId( $parser, $itemId, 
$propertyLabelOrId );
                $result = $this->buildResult( $rendered );
 
                wfProfileOut( __METHOD__ );
@@ -157,24 +88,66 @@
        /**
         * @param Parser $parser
         * @param EntityId $entityId
-        * @param string $propertyLabel
+        * @param string $propertyLabelOrId
         *
         * @return string
         */
-       private function renderForEntityId( Parser $parser, EntityId $entityId, 
$propertyLabel ) {
-               $targetLanguage = $parser->getTargetLanguage();
-
-               if ( $this->isParserUsingVariants( $parser ) && 
$parser->getConverterLanguage()->hasVariants() ) {
-                       $renderedVariantsArray = $this->renderInVariants(
-                               $entityId,
-                               $propertyLabel,
-                               $parser->getConverterLanguage()->getVariants()
-                       );
-
-                       return $this->processRenderedArray( 
$renderedVariantsArray );
+       private function renderForEntityId( Parser $parser, EntityId $entityId, 
$propertyLabelOrId ) {
+               if ( $this->useVariants( $parser ) ) {
+                       return $this->renderInVariants( $parser, $entityId, 
$propertyLabelOrId );
                } else {
-                       return $this->renderInLanguage( $entityId, 
$propertyLabel, $targetLanguage );
+                       $targetLanguage = $parser->getTargetLanguage();
+                       return $this->renderInLanguage( $entityId, 
$propertyLabelOrId, $targetLanguage );
                }
+       }
+
+       /**
+        * Check whether variants are used in this parser run.
+        *
+        * @param Parser $parser
+        *
+        * @return boolean
+        */
+       private function isParserUsingVariants( Parser $parser ) {
+               $parserOptions = $parser->getOptions();
+               return $parser->OutputType() === Parser::OT_HTML && 
!$parserOptions->getInterfaceMessage()
+                       && !$parserOptions->getDisableContentConversion();
+       }
+
+       /**
+        * @param Parser $parser
+        *
+        * @return boolean
+        */
+       private function useVariants( Parser $parser ) {
+               $converterLanguageHasVariants = 
$parser->getConverterLanguage()->hasVariants();
+               return $this->isParserUsingVariants( $parser ) && 
$converterLanguageHasVariants;
+       }
+
+       /**
+        * @param Parser $parser
+        * @param EntityId $entityId
+        * @param string $propertyLabelOrId
+        *
+        * @return string
+        */
+       private function renderInVariants( Parser $parser, EntityId $entityId, 
$propertyLabelOrId ) {
+               $variants = $parser->getConverterLanguage()->getVariants();
+               $variantsRenderer = 
$this->rendererFactory->newVariantsRenderer( $variants );
+
+               return $variantsRenderer->render( $entityId, $propertyLabelOrId 
);
+       }
+
+       /**
+        * @param EntityId $entityId
+        * @param string $propertyLabelOrId property label or ID (pXXX)
+        * @param Language $language
+        *
+        * @return string
+        */
+       private function renderInLanguage( EntityId $entityId, 
$propertyLabelOrId, Language $language ) {
+               $renderer = $this->rendererFactory->newFromLanguage( $language 
);
+               return $renderer->render( $entityId, $propertyLabelOrId );
        }
 
        /**
@@ -209,15 +182,15 @@
         * @since 0.4
         *
         * @param Parser $parser
-        * @param string $propertyLabel property label or ID (pXXX)
+        * @param string $propertyLabelOrId property label or ID (pXXX)
         *
         * @return array
         */
-       public static function render( Parser $parser, $propertyLabel ) {
+       public static function render( Parser $parser, $propertyLabelOrId ) {
                wfProfileIn( __METHOD__ );
 
                $runner = 
WikibaseClient::getDefaultInstance()->getPropertyParserFunctionRunner();
-               $result = $runner->runPropertyParserFunction( $parser, 
$propertyLabel );
+               $result = $runner->runPropertyParserFunction( $parser, 
$propertyLabelOrId );
 
                wfProfileOut( __METHOD__ );
                return $result;
diff --git 
a/client/includes/DataAccess/PropertyParserFunction/VariantsRenderer.php 
b/client/includes/DataAccess/PropertyParserFunction/VariantsRenderer.php
new file mode 100644
index 0000000..ddfbfef
--- /dev/null
+++ b/client/includes/DataAccess/PropertyParserFunction/VariantsRenderer.php
@@ -0,0 +1,109 @@
+<?php
+
+namespace Wikibase\DataAccess\PropertyParserFunction;
+
+use Language;
+use Wikibase\DataModel\Entity\EntityId;
+
+/**
+ * Handler of the {{#property}} parser function.
+ *
+ * @since 0.5
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < [email protected] >
+ * @author Jeroen De Dauw < [email protected] >
+ * @author Daniel Kinzler
+ * @author Liangent < [email protected] >
+ */
+class VariantsRenderer implements Renderer {
+
+       /**
+        * @var RendererFactory
+        */
+       private $rendererFactory;
+
+       /**
+        * @param string[]
+        */
+       private $variants;
+
+       /**
+        * @param RendererFactory $rendererFactory
+        * @param string[] $variants
+        */
+       public function __construct( RendererFactory $rendererFactory, array 
$variants ) {
+               $this->rendererFactory = $rendererFactory;
+               $this->variants = $variants;
+       }
+
+       /**
+        * @param EntityId $entityId
+        * @param string $propertyLabel property label or ID (pXXX)
+        *
+        * @return string
+        */
+       public function render( EntityId $entityId, $propertyLabel ) {
+               $renderedVariantsArray = $this->buildRenderedVariantsArray( 
$entityId, $propertyLabel );
+
+               return $this->processRenderedArray( $renderedVariantsArray );
+       }
+
+       /**
+        * @param EntityId $entityId
+        * @param string $propertyLabel
+        *
+        * @return string[], key by variant codes
+        */
+       private function buildRenderedVariantsArray( EntityId $entityId, 
$propertyLabel ) {
+               $renderedVariantsArray = array();
+
+               foreach ( $this->variants as $variantCode ) {
+                       $variantText = $this->getVariantText( $variantCode, 
$entityId, $propertyLabel );
+
+                       // LanguageConverter doesn't handle empty strings 
correctly, and it's more difficult
+                       // to fix the issue there, as it's using empty string 
as a special value.
+                       // Also keeping the ability to check a missing property 
with {{#if: }} is another reason.
+                       if ( $variantText !== '' ) {
+                               $renderedVariantsArray[$variantCode] = 
$variantText;
+                       }
+               }
+
+               return $renderedVariantsArray;
+       }
+
+       /**
+        * Post-process rendered array (variant text) into wikitext to be used 
in pages.
+        *
+        * @param string[] $textArray
+        *
+        * @return string
+        */
+       private function processRenderedArray( array $textArray ) {
+               // We got arrays, so they must have already checked that 
variants are being used.
+               $text = '';
+               foreach ( $textArray as $variantCode => $variantText ) {
+                       $text .= "$variantCode:$variantText;";
+               }
+               if ( $text !== '' ) {
+                       $text = '-{' . $text . '}-';
+               }
+
+               return $text;
+       }
+
+       /**
+        * @param string $variantCode
+        * @param EntityId $entityId
+        * @param string $propertyLabel
+        *
+        * @return string
+        */
+       private function getVariantText( $variantCode, EntityId $entityId, 
$propertyLabel ) {
+               $variantLanguage = Language::factory( $variantCode );
+               $renderer = $this->rendererFactory->newFromLanguage( 
$variantLanguage );
+
+               return $renderer->render( $entityId, $propertyLabel );
+       }
+
+}
diff --git 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RendererTest.php
 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/LanguageRendererTest.php
similarity index 89%
rename from 
client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RendererTest.php
rename to 
client/tests/phpunit/includes/DataAccess/PropertyParserFunction/LanguageRendererTest.php
index 1db5786..1bf8da0 100644
--- 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RendererTest.php
+++ 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/LanguageRendererTest.php
@@ -4,23 +4,17 @@
 
 use DataValues\StringValue;
 use Language;
-use Wikibase\Claim;
-use Wikibase\DataAccess\PropertyParserFunction\Renderer;
+use Wikibase\DataAccess\PropertyParserFunction\LanguageRenderer;
 use Wikibase\DataAccess\PropertyParserFunction\SnaksFinder;
-use Wikibase\DataModel\Claim\Statement;
 use Wikibase\DataModel\Entity\ItemId;
 use Wikibase\DataModel\Entity\PropertyId;
 use Wikibase\Item;
 use Wikibase\Lib\PropertyLabelNotResolvedException;
 use Wikibase\Property;
 use Wikibase\PropertyValueSnak;
-use Wikibase\Test\MockPropertyLabelResolver;
-use Wikibase\Test\MockRepository;
 
 /**
  * @covers Wikibase\DataAccess\PropertyParserFunction\Renderer
- *
- * @fixme add test cases to cover all error possibilities
  *
  * @group Wikibase
  * @group WikibaseClient
@@ -30,15 +24,16 @@
  * @licence GNU GPL v2+
  * @author Katie Filbert < [email protected] >
  */
-class RendererTest extends \PHPUnit_Framework_TestCase {
+class LanguageRendererTest extends \PHPUnit_Framework_TestCase {
 
        /**
+        * @param SnaksFinder $snaksFinder
         * @param string $languageCode
         */
        private function getRenderer( SnaksFinder $snaksFinder, $languageCode ) 
{
                $targetLanguage = Language::factory( $languageCode );
 
-               return new Renderer(
+               return new LanguageRenderer(
                        $targetLanguage,
                        $snaksFinder,
                        $this->getSnakFormatter()
diff --git 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RendererFactoryTest.php
 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RendererFactoryTest.php
index 7262dee..44b8f65 100644
--- 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RendererFactoryTest.php
+++ 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RendererFactoryTest.php
@@ -35,7 +35,7 @@
                $language = Language::factory( 'he' );
                $renderer = $rendererFactory->newFromLanguage( $language );
 
-               $expectedClass = 
'Wikibase\DataAccess\PropertyParserFunction\Renderer';
+               $expectedClass = 
'Wikibase\DataAccess\PropertyParserFunction\LanguageRenderer';
                $this->assertInstanceOf( $expectedClass, $renderer );
        }
 
diff --git 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RunnerTest.php
 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RunnerTest.php
index 195ac86..9e33abc 100644
--- 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RunnerTest.php
+++ 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/RunnerTest.php
@@ -26,107 +26,58 @@
  * @group PropertyParserFunctionTest
  *
  * @licence GNU GPL v2+
- * @author Jeroen De Dauw < [email protected] >
- * @author Marius Hoch < [email protected] >
+ * @author Katie Filbert < [email protected] >
  */
 class RunnerTest extends \PHPUnit_Framework_TestCase {
 
        /**
-        * @param Parser $parser
-        * @param Renderer $renderer
-        *
         * @return Runner
         */
-       private function getRunner( Parser $parser, Renderer $renderer ) {
+       private function getRunner() {
                return new Runner(
-                       $this->getRendererFactory( $renderer ),
+                       $this->getRendererFactory(),
                        $this->getSiteLinkLookup(),
                        'enwiki'
                );
        }
 
        /**
-        * @dataProvider isParserUsingVariantsProvider
+        * @dataProvider runPropertyParserFunctionProvider
         */
-       public function testIsParserUsingVariants(
-               $outputType,
+       public function testRunPropertyParserFunction(
+               $expectedRendered,
+               $languageCode,
                $interfaceMessage,
                $disableContentConversion,
                $disableTitleConversion,
-               $expected
+               $outputType
        ) {
-               $parserOptions = new ParserOptions();
-               $parserOptions->setInterfaceMessage( $interfaceMessage );
-               $parserOptions->disableContentConversion( 
$disableContentConversion );
-               $parserOptions->disableTitleConversion( $disableTitleConversion 
);
+               $parser = $this->getParser( $languageCode, $interfaceMessage, 
$disableContentConversion,
+                       $disableTitleConversion, $outputType );
 
-               $parser = $this->getParser( 'de' );
-               $parser->startExternalParse( null, $parserOptions, $outputType 
);
+               $runner = $this->getRunner();
+               $result = $runner->runPropertyParserFunction( $parser, 'gato' );
 
-               $runner = $this->getRunner( $parser, $this->getRenderer() );
+               $expected = array(
+                       $expectedRendered,
+                       'noparse' => false,
+                       'nowiki' => false
+               );
 
-               $this->assertEquals( $expected, $runner->isParserUsingVariants( 
$parser ) );
+               $this->assertEquals( $expected, $result );
        }
 
-       public function isParserUsingVariantsProvider() {
+       public function runPropertyParserFunctionProvider() {
                return array(
-                       array( Parser::OT_HTML, false, false, false, true ),
-                       array( Parser::OT_WIKI, false, false, false, false ),
-                       array( Parser::OT_PREPROCESS, false, false, false, 
false ),
-                       array( Parser::OT_PLAIN, false, false, false, false ),
-                       array( Parser::OT_HTML, true, false, false, false ),
-                       array( Parser::OT_HTML, false, true, false, false ),
-                       array( Parser::OT_HTML, false, false, true, true ),
+                       array( 'meow!', 'en', false, false, false, 
Parser::OT_HTML ),
+                       array( 'meow!', 'ku', false, false, false, 
Parser::OT_PLAIN ),
+                       array( 'meow!', 'zh', false, false, false, 
Parser::OT_WIKI ),
+                       array( 'meow!', 'zh', false, true, false, 
Parser::OT_HTML ),
+                       array( 'meow!', 'zh', true, false, false, 
Parser::OT_HTML ),
+                       array( 'meow!', 'zh', false, false, false, 
Parser::OT_PREPROCESS ),
+                       array( 'm30w!', 'zh', false, false, true, 
Parser::OT_HTML ),
+                       array( 'm30w!', 'ku', false, false, false, 
Parser::OT_HTML )
                );
-       }
-
-       /**
-        * @dataProvider processRenderedArrayProvider
-        */
-       public function testProcessRenderedArray( $outputType, array 
$textArray, $expected ) {
-               $parser = new Parser();
-               $parserOptions = new ParserOptions();
-               $parser->startExternalParse( null, $parserOptions, $outputType 
);
-               $runner = $this->getRunner( $parser, $this->getRenderer() );
-               $this->assertEquals( $expected, $runner->processRenderedArray( 
$textArray ) );
-       }
-
-       public function processRenderedArrayProvider() {
-               return array(
-                       array( Parser::OT_HTML, array(
-                               'zh-cn' => 'fo&#60;ob&#62;ar',
-                               'zh-tw' => 'FO&#60;OB&#62;AR',
-                       ), '-{zh-cn:fo&#60;ob&#62;ar;zh-tw:FO&#60;OB&#62;AR;}-' 
),
-                       // Don't create "-{}-" for empty input,
-                       // to keep the ability to check a missing property with 
{{#if: }}.
-                       array( Parser::OT_HTML, array(), '' ),
-               );
-       }
-
-       public function testRenderInLanguage() {
-               $runner = $this->getRunner(
-                       $this->getParser( 'es' ),
-                       $this->getRenderer()
-               );
-
-               $language = Language::factory( 'he' );
-               $result = $runner->renderInLanguage( new ItemId( 'Q3' ), 
'gato', $language );
-
-               $this->assertEquals( 'meow!', $result );
-       }
-
-       private function getRenderer() {
-               $renderer = $this->getMockBuilder(
-                               
'Wikibase\DataAccess\PropertyParserFunction\Renderer'
-                       )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-
-               $renderer->expects( $this->any() )
-                       ->method( 'render' )
-                       ->will( $this->returnValue( 'meow!' ) );
-
-               return $renderer;
        }
 
        private function getSiteLinkLookup() {
@@ -140,7 +91,10 @@
                return $siteLinkLookup;
        }
 
-       private function getRendererFactory( Renderer $renderer ) {
+       private function getRendererFactory() {
+               $languageRenderer = $this->getLanguageRenderer();
+               $variantsRenderer = $this->getVariantsRenderer();
+
                $rendererFactory = $this->getMockBuilder(
                                
'Wikibase\DataAccess\PropertyParserFunction\RendererFactory'
                        )
@@ -149,22 +103,60 @@
 
                $rendererFactory->expects( $this->any() )
                        ->method( 'newFromLanguage' )
-                       ->will( $this->returnValue( $renderer ) );
+                       ->will( $this->returnValue( $languageRenderer ) );
+
+               $rendererFactory->expects( $this->any() )
+                       ->method( 'newVariantsRenderer' )
+                       ->will( $this->returnValue( $variantsRenderer ) );
 
                return $rendererFactory;
        }
 
-       private function getParser( $languageCode ) {
-               $parserConfig = array( 'class' => 'Parser' );
-               $parser = new Parser( $parserConfig );
+       private function getLanguageRenderer() {
+               $languageRenderer = $this->getMockBuilder(
+                               
'Wikibase\DataAccess\PropertyParserFunction\LanguageRenderer'
+                       )
+                       ->disableOriginalConstructor()
+                       ->getMock();
 
+               $languageRenderer->expects( $this->any() )
+                       ->method( 'render' )
+                       ->will( $this->returnValue( 'meow!' ) );
+
+               return $languageRenderer;
+       }
+
+       private function getVariantsRenderer() {
+               $variantsRenderer = $this->getMockBuilder(
+                               
'Wikibase\DataAccess\PropertyParserFunction\VariantsRenderer'
+                       )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               $variantsRenderer->expects( $this->any() )
+                       ->method( 'render' )
+                       ->will( $this->returnValue( 'm30w!' ) );
+
+               return $variantsRenderer;
+       }
+
+       private function getParser( $languageCode, $interfaceMessage, 
$disableContentConversion,
+               $disableTitleConversion, $outputType
+       ) {
+               $parserConfig = array( 'class' => 'Parser' );
+
+               $parser = new Parser( $parserConfig );
                $parser->setTitle( Title::newFromText( 'Cat' ) );
 
                $language = Language::factory( $languageCode );
+
                $parserOptions = new ParserOptions( User::newFromId( 0 ), 
$languageCode );
                $parserOptions->setTargetLanguage( $language );
+               $parserOptions->setInterfaceMessage( $interfaceMessage );
+               $parserOptions->disableContentConversion( 
$disableContentConversion );
+               $parserOptions->disableTitleConversion( $disableTitleConversion 
);
 
-               $parser->startExternalParse( null, $parserOptions, 
Parser::OT_WIKI );
+               $parser->startExternalParse( null, $parserOptions, $outputType 
);
 
                return $parser;
        }
diff --git 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/VariantsRendererTest.php
 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/VariantsRendererTest.php
new file mode 100644
index 0000000..7204716
--- /dev/null
+++ 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/VariantsRendererTest.php
@@ -0,0 +1,82 @@
+<?php
+
+namespace Wikibase\Test;
+
+use Language;
+use Wikibase\DataAccess\PropertyParserFunction\VariantsRenderer;
+use Wikibase\DataModel\Entity\ItemId;
+
+/**
+ * @covers Wikibase\DataAccess\PropertyParserFunction\VariantsRenderer
+ *
+ * @group Wikibase
+ * @group WikibaseClient
+ * @group PropertyParserFunctionTest
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < [email protected] >
+ */
+class VariantsRendererTest extends \PHPUnit_Framework_TestCase {
+
+       /**
+        * @dataProvider renderProvider
+        */
+       public function testRender( $expected, $itemId, $variants, 
$propertyLabel ) {
+               $languageRenderer = $this->getLanguageRenderer();
+
+               $rendererFactory = $this->getMockBuilder(
+                               
'Wikibase\DataAccess\PropertyParserFunction\RendererFactory'
+                       )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               $rendererFactory->expects( $this->any() )
+                       ->method( 'newFromLanguage' )
+                       ->will( $this->returnValue( $languageRenderer ) );
+
+               $variantsRenderer = new VariantsRenderer(
+                       $rendererFactory,
+                       $variants
+               );
+
+               $result = $variantsRenderer->render( $itemId, $propertyLabel );
+
+               $this->assertEquals( $expected, $result );
+       }
+
+       public function renderProvider() {
+               $itemId = new ItemId( 'Q3' );
+
+               return array(
+                       array(
+                               
'-{zh:mooooo;zh-hans:mooooo;zh-hant:mooooo;zh-cn:mooooo;zh-hk:mooooo;}-',
+                               $itemId,
+                               array ( 'zh', 'zh-hans', 'zh-hant', 'zh-cn', 
'zh-hk' ),
+                               'cat'
+                       ),
+                       // Don't create "-{}-" for empty input,
+                       // to keep the ability to check a missing property with 
{{#if: }}.
+                       array(
+                               '',
+                               $itemId,
+                               array(),
+                               'cat'
+                       )
+               );
+       }
+
+       private function getLanguageRenderer() {
+               $languageRenderer = $this->getMockBuilder(
+                       'Wikibase\DataAccess\PropertyParserFunction\Renderer'
+               )
+               ->disableOriginalConstructor()
+               ->getMock();
+
+               $languageRenderer->expects( $this->any() )
+                       ->method( 'render' )
+                       ->will( $this->returnValue( 'mooooo' ) );
+
+               return $languageRenderer;
+       }
+
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/148096
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5b674ee287db316e76b32ffee859257da2a2f2d5
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Aude <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to