jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/330043 )

Change subject: Fix disappearing language names on Category: and File: pages
......................................................................


Fix disappearing language names on Category: and File: pages

When $wgBabelMainCategory or one of the $wgBabelCategoryNames booleans is
false, the language name is hackishly made into a self-link (since the
localised message requires a link target). On category and file pages,
a self-link like [[Category:XYZ|English]] was being used, which has an
obvious problem.

Bug: T36507
Change-Id: I51c5d561312e255c686d7d18960f30ebd0fa7845
---
M BabelBox/LanguageBabelBox.php
M tests/phpunit/BabelTest.php
2 files changed, 65 insertions(+), 13 deletions(-)

Approvals:
  jenkins-bot: Verified
  Nikerabbit: Looks good to me, but someone else must approve
  Thiemo Mättig (WMDE): Looks good to me, approved



diff --git a/BabelBox/LanguageBabelBox.php b/BabelBox/LanguageBabelBox.php
index 9cd474f..d49e957 100644
--- a/BabelBox/LanguageBabelBox.php
+++ b/BabelBox/LanguageBabelBox.php
@@ -124,14 +124,14 @@
                global $wgBabelMainCategory, $wgBabelCategoryNames;
 
                if ( $wgBabelCategoryNames[$level] === false ) {
-                       $categoryLevel = $title->getFullText();
+                       $categoryLevel = ':' . $title->getFullText();
                } else {
                        $categoryLevel = ':Category:' .
                                self::getCategoryName( 
$wgBabelCategoryNames[$level], $language );
                }
 
                if ( $wgBabelMainCategory === false ) {
-                       $categoryMain = $title->getFullText();
+                       $categoryMain = ':' . $title->getFullText();
                } else {
                        $categoryMain = ':Category:' .
                                self::getCategoryName( $wgBabelMainCategory, 
$language );
diff --git a/tests/phpunit/BabelTest.php b/tests/phpunit/BabelTest.php
index 3a463da..ade6b03 100644
--- a/tests/phpunit/BabelTest.php
+++ b/tests/phpunit/BabelTest.php
@@ -39,6 +39,8 @@
                $user->addToDatabase();
                $title = $user->getUserPage();
                $this->insertPage( $title->getPrefixedText(), 
'{{#babel:en-1|es-2|de}}' );
+               // Test on a category page too (
+               $this->insertPage( Title::newFromText( 'Category:X1', 
'{{#babel:en-1|es-2|de}}' ) );
                $page = WikiPage::factory( $title );
                // Force a run of LinksUpdate
                $updates = $page->getContent()->getSecondaryDataUpdates( $title 
);
@@ -48,9 +50,10 @@
        }
 
        /**
+        * @param Title $title
         * @return Parser
         */
-       private function getParser() {
+       private function getParser( Title $title ) {
                $options = new ParserOptions();
                $options->setIsPreview( true );
 
@@ -64,7 +67,7 @@
 
                $parser->expects( $this->any() )
                        ->method( 'getTitle' )
-                       ->will( $this->returnValue( Title::newFromText( 
'User:User-1' ) ) );
+                       ->will( $this->returnValue( $title ) );
 
                $parser->expects( $this->any() )
                        ->method( 'getOutput' )
@@ -106,21 +109,36 @@
        }
 
        public function testRenderEmptyBox() {
-               $wikiText = Babel::Render( $this->getParser(), '' );
+               $title = Title::newFromText( 'User:User-1' );
+               $parser = $this->getParser( $title );
+               $wikiText = Babel::Render( $parser, '' );
                $this->assertSame(
                        '{|style=" padding: (babel-box-cellpadding);  
border-spacing: (babel-box-cellspacing);"'
                        . ' class="mw-babel-wrapper"'
                        . "\n"
                        . '! class="mw-babel-header" | [[(babel-url)|(babel: 
User-1)]]'
                        . "\n|-\n| \n|-\n"
-                       .  '! class="mw-babel-footer" | 
[[(babel-footer-url)|(babel-footer: User-1)]]'
+                       . '! class="mw-babel-footer" | 
[[(babel-footer-url)|(babel-footer: User-1)]]'
                        . "\n|}",
                        $wikiText
                );
        }
 
-       public function testRenderDefaultLevel() {
-               $parser = $this->getParser();
+       /**
+        * Provides different page names, such as pages in the Category 
namespace.
+        */
+       public static function providePageNames() {
+               return [
+                       [ 'User:User-1' ],
+                       [ 'Category:X1' ],
+               ];
+       }
+
+       /**
+        * @dataProvider providePageNames
+        */
+       public function testRenderDefaultLevel( $pageName ) {
+               $parser = $this->getParser( Title::newFromText( $pageName ) );
                $wikiText = Babel::Render( $parser, 'en' );
                $this->assertBabelBoxCount( 1, $wikiText );
                $this->assertContains(
@@ -136,12 +154,40 @@
                        . '</div>',
                        $wikiText
                );
+
                $this->assertHasCategory( $parser, 'en', 'N' );
                $this->assertHasCategory( $parser, 'en-N', '' );
        }
 
+       /**
+        * @dataProvider providePageNames
+        */
+       public function testRenderDefaultLevelNoCategory( $pageName ) {
+               $this->setMwGlobals( [ 'wgBabelMainCategory' => false ] );
+
+               $parser = $this->getParser( Title::newFromText( $pageName ) );
+               $wikiText = Babel::Render( $parser, 'en' );
+               $this->assertBabelBoxCount( 1, $wikiText );
+               $this->assertContains(
+                       '<div class="mw-babel-box mw-babel-box-N" dir="ltr">'
+                       . "\n"
+                       . '{|style=" padding: (babel-cellpadding);  
border-spacing: (babel-cellspacing);"'
+                       . "\n"
+                       . '! dir="ltr" | [[(babel-portal: en)|en]]<span 
class="mw-babel-box-level-N">-N</span>'
+                       . "\n"
+                       . '| dir="ltr" lang="en" | This user has a 
[[:Category:en-N|native]] understanding of '
+                       . "[[:$pageName|English]]."
+                       . "\n|}\n"
+                       . '</div>',
+                       $wikiText
+               );
+
+               $this->assertNotHasCategory( $parser, 'en' );
+               $this->assertHasCategory( $parser, 'en-N', '' );
+       }
+
        public function testRenderCustomLevel() {
-               $parser = $this->getParser();
+               $parser = $this->getParser( Title::newFromText( 'User:User-1' ) 
);
                $wikiText = Babel::Render( $parser, 'EN-1', 'zh-Hant' );
                $this->assertBabelBoxCount( 2, $wikiText );
                $this->assertContains(
@@ -157,8 +203,10 @@
                        . '</div>',
                        $wikiText
                );
+
                $this->assertHasCategory( $parser, 'en', '1' );
                $this->assertHasCategory( $parser, 'en-1', '' );
+
                $this->assertContains(
                        '<div class="mw-babel-box mw-babel-box-N" dir="ltr">'
                        . "\n"
@@ -173,12 +221,13 @@
                        . '</div>',
                        $wikiText
                );
+
                $this->assertHasCategory( $parser, 'zh-Hant', 'N' );
                $this->assertHasCategory( $parser, 'zh-Hant-N', '' );
        }
 
        public function testRenderPlain() {
-               $parser = $this->getParser();
+               $parser = $this->getParser( Title::newFromText( 'User:User-1' ) 
);
                $wikiText = Babel::Render( $parser, 'plain=1', 'en' );
                $this->assertSame(
                        '<div class="mw-babel-box mw-babel-box-N" dir="ltr">'
@@ -193,12 +242,14 @@
                        . '</div>',
                        $wikiText
                );
+
                $this->assertHasCategory( $parser, 'en', 'N' );
                $this->assertHasCategory( $parser, 'en-N', '' );
        }
 
        public function testRenderRedLink() {
-               $wikiText = Babel::Render( $this->getParser(), 'redLink' );
+               $parser = $this->getParser( Title::newFromText( 'User:User-1' ) 
);
+               $wikiText = Babel::Render( $parser, 'redLink' );
                $this->assertBabelBoxCount( 0, $wikiText );
                $this->assertContains(
                        '<div class="mw-babel-notabox" 
dir="ltr">[[(babel-template: redLink)]]</div>',
@@ -207,7 +258,8 @@
        }
 
        public function testRenderInvalidTitle() {
-               $wikiText = Babel::Render( $this->getParser(), '<invalidTitle>' 
);
+               $parser = $this->getParser( Title::newFromText( 'User:User-1' ) 
);
+               $wikiText = Babel::Render( $parser, '<invalidTitle>' );
                $this->assertBabelBoxCount( 0, $wikiText );
                $this->assertContains(
                        '<div class="mw-babel-notabox" 
dir="ltr">(babel-template: <invalidTitle>)</div>',
@@ -216,7 +268,7 @@
        }
 
        public function testRenderNoSkillNoCategory() {
-               $parser = $this->getParser();
+               $parser = $this->getParser( Title::newFromText( 'User:User-1' ) 
);
                $wikiText = Babel::Render( $parser, 'en-0' );
                $this->assertNotHasCategory( $parser, 'en' );
        }

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I51c5d561312e255c686d7d18960f30ebd0fa7845
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/Babel
Gerrit-Branch: master
Gerrit-Owner: TTO <[email protected]>
Gerrit-Reviewer: Florianschmidtwelzow <[email protected]>
Gerrit-Reviewer: Nikerabbit <[email protected]>
Gerrit-Reviewer: TTO <[email protected]>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to