Liangent has uploaded a new change for review.

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


Change subject: Make LanguageFallbackChainFactory work with $wgDisabledVariants
......................................................................

Make LanguageFallbackChainFactory work with $wgDisabledVariants

Change-Id: Ia11f744d3d1a5c4b71b590d25baa481ca7b3bd95
---
M lib/includes/LanguageFallbackChainFactory.php
M lib/tests/phpunit/LanguageFallbackChainFactoryTest.php
2 files changed, 46 insertions(+), 4 deletions(-)


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

diff --git a/lib/includes/LanguageFallbackChainFactory.php 
b/lib/includes/LanguageFallbackChainFactory.php
index e077ebf..23a359d 100644
--- a/lib/includes/LanguageFallbackChainFactory.php
+++ b/lib/includes/LanguageFallbackChainFactory.php
@@ -152,7 +152,7 @@
                                }
 
                                foreach ( $variants as $variant ) {
-                                       if ( isset( $fetched[$variant] ) ) {
+                                       if ( isset( $fetched[$variant] ) || 
!$parentLanguage->hasVariant( $variant ) ) {
                                                continue;
                                        }
 
diff --git a/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php 
b/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php
index d9ced64..3696a76 100644
--- a/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php
+++ b/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php
@@ -34,13 +34,31 @@
                }
        }
 
+       private function setupDisabledVariants( $disabledVariants ) {
+               global $wgDisabledVariants, $wgLangObjCacheSize;
+               $originalDisabledVariants = $wgDisabledVariants;
+               $originalLangObjCacheSize = $wgLangObjCacheSize;
+               if ( $disabledVariants ) {
+                       $wgDisabledVariants = $disabledVariants;
+               }
+               $wgLangObjCacheSize = 0;
+               return array( $originalDisabledVariants, 
$originalLangObjCacheSize );
+       }
+
+       private function clearDisabledVariants( $state ) {
+               global $wgDisabledVariants, $wgLangObjCacheSize;
+               list( $wgDisabledVariants, $wgLangObjCacheSize ) = $state;
+       }
+
        /**
         * @group WikibaseLib
         * @dataProvider providerNewFromLanguage
         */
-       public function testNewFromLanguage( $lang, $mode, $expected ) {
+       public function testNewFromLanguage( $lang, $mode, $expected, 
$disabledVariants = null ) {
+               $state = $this->setupDisabledVariants( $disabledVariants );
                $factory = new LanguageFallbackChainFactory();
                $chain = $factory->newFromLanguage( \Language::factory( $lang 
), $mode )->getFallbackChain();
+               $this->clearDisabledVariants( $state );
                $this->assertChainEquals( $expected, $chain );
        }
 
@@ -48,9 +66,11 @@
         * @group WikibaseLib
         * @dataProvider providerNewFromLanguage
         */
-       public function testNewFromLanguageCode( $lang, $mode, $expected ) {
+       public function testNewFromLanguageCode( $lang, $mode, $expected, 
$disabledVariants = null ) {
+               $state = $this->setupDisabledVariants( $disabledVariants );
                $factory = new LanguageFallbackChainFactory();
                $chain = $factory->newFromLanguageCode( $lang, $mode 
)->getFallbackChain();
+               $this->clearDisabledVariants( $state );
                $this->assertChainEquals( $expected, $chain );
        }
 
@@ -80,6 +100,16 @@
                                array( 'zh', 'zh-my' ),
                                'en',
                        ) ),
+                       array( 'zh', 
LanguageFallbackChainFactory::FALLBACK_ALL, array(
+                               'zh',
+                               array( 'zh', 'zh-hans' ),
+                               array( 'zh', 'zh-hant' ),
+                               array( 'zh', 'zh-cn' ),
+                               array( 'zh', 'zh-tw' ),
+                               array( 'zh', 'zh-hk' ),
+                               array( 'zh', 'zh-sg' ),
+                               'en',
+                       ), array( 'zh-mo', 'zh-my' ) ),
                        array( 'zh', 
LanguageFallbackChainFactory::FALLBACK_SELF, array( 'zh' ) ),
                        array( 'zh', 
LanguageFallbackChainFactory::FALLBACK_VARIANTS, array(
                                array( 'zh', 'zh-hans' ),
@@ -109,6 +139,16 @@
                                array( 'zh-cn', 'zh-tw' ),
                                'en',
                        ) ),
+                       array( 'zh-cn', 
LanguageFallbackChainFactory::FALLBACK_ALL, array(
+                               'zh-cn',
+                               array( 'zh-cn', 'zh-sg' ),
+                               array( 'zh-cn', 'zh' ),
+                               array( 'zh-cn', 'zh-hant' ),
+                               array( 'zh-cn', 'zh-hk' ),
+                               array( 'zh-cn', 'zh-tw' ),
+                               'zh-hans',
+                               'en',
+                       ), array( 'zh-mo', 'zh-my', 'zh-hans' ) ),
                        array( 'zh-cn', 
~LanguageFallbackChainFactory::FALLBACK_VARIANTS,
                                array( 'zh-cn', 'zh-hans', 'en' )
                        ),
@@ -201,14 +241,16 @@
         * @group WikibaseLib
         * @dataProvider providerNewFromLanguage
         */
-       public function testNewFromUserAndLanguageCode( $lang, $mode, $expected 
) {
+       public function testNewFromUserAndLanguageCode( $lang, $mode, 
$expected, $disabledVariants = null ) {
                if ( $mode !== LanguageFallbackChainFactory::FALLBACK_ALL ) {
                        $this->assertTrue( true );
                        return;
                }
+               $state = $this->setupDisabledVariants( $disabledVariants );
                $factory = new LanguageFallbackChainFactory();
                $anon = new \User();
                $chain = $factory->newFromUserAndLanguageCode( $anon, $lang 
)->getFallbackChain();
+               $this->clearDisabledVariants( $state );
                $this->assertChainEquals( $expected, $chain );
        }
 

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia11f744d3d1a5c4b71b590d25baa481ca7b3bd95
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Liangent <liang...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to