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<ob>ar',
- 'zh-tw' => 'FO<OB>AR',
- ), '-{zh-cn:fo<ob>ar;zh-tw:FO<OB>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