Thiemo Mättig (WMDE) has uploaded a new change for review.

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

Change subject: Fix #property parser function's default language
......................................................................

Fix #property parser function's default language

This is a more proper fix compared to the hotfix in I76a9615.
I suggest to merge both.

Change-Id: I0685ad9c64d821e29e6a334469d9ba547864cd40
Fixes: T116503
---
M 
client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php
M 
client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
M lib/includes/LanguageFallbackChainFactory.php
M lib/includes/formatters/MwTimeIsoFormatter.php
4 files changed, 59 insertions(+), 26 deletions(-)


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

diff --git 
a/client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php
 
b/client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php
index 75a63be..55a47f1 100644
--- 
a/client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php
+++ 
b/client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php
@@ -7,6 +7,7 @@
 use Parser;
 use StubUserLang;
 use ValueFormatters\FormatterOptions;
+use ValueFormatters\ValueFormatter;
 use Wikibase\Client\DataAccess\PropertyIdResolver;
 use Wikibase\Client\DataAccess\SnaksFinder;
 use Wikibase\Client\DataAccess\StatementTransclusionInteractor;
@@ -205,7 +206,10 @@
         *
         * @return SnakFormatter
         */
-       private function newSnakFormatterForLanguage( Language $language, 
UsageAccumulator $usageAccumulator ) {
+       private function newSnakFormatterForLanguage(
+               Language $language,
+               UsageAccumulator $usageAccumulator
+       ) {
                $languageFallbackChain = 
$this->languageFallbackChainFactory->newFromLanguage(
                        $language,
                        LanguageFallbackChainFactory::FALLBACK_SELF | 
LanguageFallbackChainFactory::FALLBACK_VARIANTS
@@ -213,6 +217,7 @@
 
                $options = new FormatterOptions( array(
                        
FormatterLabelDescriptionLookupFactory::OPT_LANGUAGE_FALLBACK_CHAIN => 
$languageFallbackChain,
+                       ValueFormatter::OPT_LANG => $language->getCode(),
                        // ...more options... (?)
                ) );
 
diff --git 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
index 76802a3..66eb88e 100644
--- 
a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
+++ 
b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php
@@ -7,7 +7,10 @@
 use ParserOptions;
 use Title;
 use User;
+use ValueFormatters\FormatterOptions;
+use ValueFormatters\ValueFormatter;
 use 
Wikibase\Client\DataAccess\PropertyParserFunction\StatementGroupRendererFactory;
+use Wikibase\Client\DataAccess\SnaksFinder;
 use Wikibase\Client\Usage\ParserOutputUsageAccumulator;
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\DataModel\Entity\EntityIdValue;
@@ -32,7 +35,7 @@
 class StatementGroupRendererFactoryTest extends \PHPUnit_Framework_TestCase {
 
        public function testNewRendererForInterfaceMessage() {
-               $parser = $this->getParser( 'zh', true, false, false, 
Parser::OT_HTML );
+               $parser = $this->getParser( 'zh', true );
 
                $rendererFactory = $this->getStatementGroupRendererFactory();
                $renderer = $rendererFactory->newRendererFromParser( $parser );
@@ -44,7 +47,7 @@
        }
 
        public function testNewRenderer_contentConversionDisabled() {
-               $parser = $this->getParser( 'zh', false, true, false, 
Parser::OT_HTML );
+               $parser = $this->getParser( 'zh', false, true );
 
                $rendererFactory = $this->getStatementGroupRendererFactory();
                $renderer = $rendererFactory->newRendererFromParser( $parser );
@@ -56,7 +59,7 @@
        }
 
        public function testNewRenderer_titleConversionDisabled() {
-               $parser = $this->getParser( 'zh', false, false, true, 
Parser::OT_HTML );
+               $parser = $this->getParser( 'zh', false, false, true );
 
                $rendererFactory = $this->getStatementGroupRendererFactory();
                $renderer = $rendererFactory->newRendererFromParser( $parser );
@@ -91,7 +94,7 @@
        }
 
        public function testNewRenderer_forNonVariantLanguage() {
-               $parser = $this->getParser( 'en', true, false, false, 
Parser::OT_HTML );
+               $parser = $this->getParser( 'en', true );
 
                $rendererFactory = $this->getStatementGroupRendererFactory();
                $renderer = $rendererFactory->newRendererFromParser( $parser );
@@ -103,7 +106,7 @@
        }
 
        public function testNewRender_forVariantLanguage() {
-               $parser = $this->getParser( 'zh', false, false, false, 
Parser::OT_HTML );
+               $parser = $this->getParser( 'zh' );
 
                $rendererFactory = $this->getStatementGroupRendererFactory();
                $renderer = $rendererFactory->newRendererFromParser( $parser );
@@ -115,7 +118,7 @@
        }
 
        public function testNewRenderer_usageTracking() {
-               $parser = $this->getParser( 'en', true, false, false, 
Parser::OT_HTML );
+               $parser = $this->getParser( 'en', true );
 
                $rendererFactory = $this->getStatementGroupRendererFactory();
                $renderer = $rendererFactory->newRendererFromParser( $parser );
@@ -126,6 +129,32 @@
                $usages = $usageAccumulator->getUsages();
                $this->assertArrayHasKey( 'Q7#L.en', $usages );
                $this->assertArrayHasKey( 'Q7#T', $usages );
+       }
+
+       public function testNewRendererFromParser_languageOption() {
+               $idResolver = $this->getMockBuilder( 
'Wikibase\Client\DataAccess\PropertyIdResolver' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               $formatterFactory = $this->getMockBuilder( 
'Wikibase\Lib\OutputFormatSnakFormatterFactory' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $self = $this;
+               $formatterFactory->expects( $this->once() )
+                       ->method( 'getSnakFormatter' )
+                       ->will( $this->returnCallback( function( $format, 
FormatterOptions $options ) use ( $self )  {
+                               $self->assertSame( 'de', $options->getOption( 
ValueFormatter::OPT_LANG ) );
+                               return $self->getMock( 
'Wikibase\Lib\SnakFormatter' );
+                       } ) );
+
+               $factory = new StatementGroupRendererFactory(
+                       $idResolver,
+                       new SnaksFinder(),
+                       new LanguageFallbackChainFactory(),
+                       $formatterFactory,
+                       $this->getMock( 
'Wikibase\DataModel\Services\Lookup\EntityLookup' )
+               );
+               $factory->newRendererFromParser( $this->getParser( 'de' ) );
        }
 
        private function getStatementGroupRendererFactory() {
@@ -216,8 +245,12 @@
                return $entityLookup;
        }
 
-       private function getParser( $languageCode, $interfaceMessage, 
$disableContentConversion,
-               $disableTitleConversion, $outputType
+       private function getParser(
+               $languageCode = 'en',
+               $interfaceMessage = false,
+               $disableContentConversion = false,
+               $disableTitleConversion = false,
+               $outputType = Parser::OT_HTML
        ) {
                $parserConfig = array( 'class' => 'Parser' );
 
diff --git a/lib/includes/LanguageFallbackChainFactory.php 
b/lib/includes/LanguageFallbackChainFactory.php
index 6564961..6d2588a 100644
--- a/lib/includes/LanguageFallbackChainFactory.php
+++ b/lib/includes/LanguageFallbackChainFactory.php
@@ -81,16 +81,14 @@
         * @return LanguageFallbackChain
         */
        public function newFromLanguage( Language $language, $mode = 
self::FALLBACK_ALL ) {
-               if ( isset( $this->languageCache[$language->getCode()][$mode] ) 
) {
-                       return 
$this->languageCache[$language->getCode()][$mode];
+               $languageCode = $language->getCode();
+
+               if ( !isset( $this->languageCache[$languageCode][$mode] ) ) {
+                       $chain = $this->buildFromLanguage( $language, $mode );
+                       $this->languageCache[$languageCode][$mode] = new 
LanguageFallbackChain( $chain );
                }
 
-               $chain = $this->buildFromLanguage( $language, $mode );
-               $languageFallbackChain = new LanguageFallbackChain( $chain );
-
-               $this->languageCache[$language->getCode()][$mode] = 
$languageFallbackChain;
-
-               return $languageFallbackChain;
+               return $this->languageCache[$languageCode][$mode];
        }
 
        /**
@@ -104,16 +102,12 @@
        public function newFromLanguageCode( $languageCode, $mode = 
self::FALLBACK_ALL ) {
                $languageCode = LanguageWithConversion::validateLanguageCode( 
$languageCode );
 
-               if ( isset( $this->languageCache[$languageCode][$mode] ) ) {
-                       return $this->languageCache[$languageCode][$mode];
+               if ( !isset( $this->languageCache[$languageCode][$mode] ) ) {
+                       $chain = $this->buildFromLanguage( $languageCode, $mode 
);
+                       $this->languageCache[$languageCode][$mode] = new 
LanguageFallbackChain( $chain );
                }
 
-               $chain = $this->buildFromLanguage( $languageCode, $mode );
-               $languageFallbackChain = new LanguageFallbackChain( $chain );
-
-               $this->languageCache[$languageCode][$mode] = 
$languageFallbackChain;
-
-               return $languageFallbackChain;
+               return $this->languageCache[$languageCode][$mode];
        }
 
        /**
diff --git a/lib/includes/formatters/MwTimeIsoFormatter.php 
b/lib/includes/formatters/MwTimeIsoFormatter.php
index 0571d67..bc969a2 100644
--- a/lib/includes/formatters/MwTimeIsoFormatter.php
+++ b/lib/includes/formatters/MwTimeIsoFormatter.php
@@ -33,7 +33,8 @@
        public function __construct( FormatterOptions $options = null ) {
                parent::__construct( $options );
 
-               $this->language = Language::factory( $this->getOption( 
ValueFormatter::OPT_LANG ) );
+               $languageCode = $this->getOption( ValueFormatter::OPT_LANG );
+               $this->language = Language::factory( $languageCode );
        }
 
        /**

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0685ad9c64d821e29e6a334469d9ba547864cd40
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

Reply via email to