Daniel Kinzler has uploaded a new change for review.

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

Change subject: Inject InterwikiLookup into MediaWikiTitleCodec
......................................................................

Inject InterwikiLookup into MediaWikiTitleCodec

Change-Id: I72e4800ad58fe964d5eef5772220aa8c528d31f0
---
M includes/Title.php
M includes/specials/SpecialCategories.php
M includes/specials/SpecialLinkSearch.php
M includes/title/MediaWikiTitleCodec.php
M tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php
M tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
6 files changed, 60 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/53/250153/3

diff --git a/includes/Title.php b/includes/Title.php
index 9ada4f3..c202228 100644
--- a/includes/Title.php
+++ b/includes/Title.php
@@ -186,9 +186,11 @@
                }
 
                if ( !$titleCodec ) {
+                       // @todo: move this into MediaWikiServices
                        $titleCodec = new MediaWikiTitleCodec(
                                $wgContLang,
                                GenderCache::singleton(),
+                               
MediaWikiServices::getInstance()->getInterwikiLookup(),
                                $wgLocalInterwikis
                        );
                        $titleCodecFingerprint = $fingerprint;
diff --git a/includes/specials/SpecialCategories.php 
b/includes/specials/SpecialCategories.php
index cea6ceb..48e4214 100644
--- a/includes/specials/SpecialCategories.php
+++ b/includes/specials/SpecialCategories.php
@@ -60,7 +60,11 @@
        private function initServices() {
                if ( !$this->linkRenderer ) {
                        $lang = $this->getContext()->getLanguage();
-                       $titleFormatter = new MediaWikiTitleCodec( $lang, 
GenderCache::singleton() );
+                       $titleFormatter = new MediaWikiTitleCodec(
+                               $lang,
+                               GenderCache::singleton(),
+                               
MediaWikiServices::getInstance()->getInterwikiLookup()
+                       );
                        $this->linkRenderer = new MediaWikiPageLinkRenderer( 
$titleFormatter );
                }
        }
diff --git a/includes/specials/SpecialLinkSearch.php 
b/includes/specials/SpecialLinkSearch.php
index f474867..c76731d 100644
--- a/includes/specials/SpecialLinkSearch.php
+++ b/includes/specials/SpecialLinkSearch.php
@@ -71,7 +71,11 @@
                global $wgLanguageCode;
                if ( !$this->linkRenderer ) {
                        $lang = Language::factory( $wgLanguageCode );
-                       $titleFormatter = new MediaWikiTitleCodec( $lang, 
GenderCache::singleton() );
+                       $titleFormatter = new MediaWikiTitleCodec(
+                               $lang,
+                               GenderCache::singleton(),
+                               
MediaWikiServices::getInstance()->getInterwikiLookup()
+                       );
                        $this->linkRenderer = new MediaWikiPageLinkRenderer( 
$titleFormatter );
                }
        }
diff --git a/includes/title/MediaWikiTitleCodec.php 
b/includes/title/MediaWikiTitleCodec.php
index 0fb208e..a8437e9 100644
--- a/includes/title/MediaWikiTitleCodec.php
+++ b/includes/title/MediaWikiTitleCodec.php
@@ -21,6 +21,7 @@
  * @license GPL 2+
  * @author Daniel Kinzler
  */
+use MediaWiki\InterwikiLookup;
 
 /**
  * A codec for %MediaWiki page titles.
@@ -45,6 +46,11 @@
        protected $genderCache;
 
        /**
+        * @var InterwikiLookup
+        */
+       private $interwikiLookup;
+
+       /**
         * @var string[]
         */
        protected $localInterwikis;
@@ -52,13 +58,15 @@
        /**
         * @param Language $language The language object to use for localizing 
namespace names.
         * @param GenderCache $genderCache The gender cache for generating 
gendered namespace names
+        * @param InterwikiLookup $interwikiLookup
         * @param string[]|string $localInterwikis
         */
        public function __construct( Language $language, GenderCache 
$genderCache,
-               $localInterwikis = array()
+               InterwikiLookup $interwikiLookup, $localInterwikis = array()
        ) {
                $this->language = $language;
                $this->genderCache = $genderCache;
+               $this->interwikiLookup = $interwikiLookup;
                $this->localInterwikis = (array)$localInterwikis;
        }
 
@@ -265,13 +273,13 @@
                                                if ( 
$this->language->getNsIndex( $x[1] ) ) {
                                                        # Disallow Talk:File:x 
type titles...
                                                        throw new 
MalformedTitleException( 'title-invalid-talk-namespace', $text );
-                                               } elseif ( 
Interwiki::isValidInterwiki( $x[1] ) ) {
+                                               } elseif ( 
$this->interwikiLookup->isValidInterwiki( $x[1] ) ) {
                                                        // TODO: get rid of 
global state!
                                                        # Disallow 
Talk:Interwiki:x type titles...
                                                        throw new 
MalformedTitleException( 'title-invalid-talk-namespace', $text );
                                                }
                                        }
-                               } elseif ( Interwiki::isValidInterwiki( $p ) ) {
+                               } elseif ( 
$this->interwikiLookup->isValidInterwiki( $p ) ) {
                                        # Interwiki link
                                        $dbkey = $m[2];
                                        $parts['interwiki'] = 
$this->language->lc( $p );
diff --git a/tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php 
b/tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php
index 6cfddf0..86bab45 100644
--- a/tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php
+++ b/tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php
@@ -18,6 +18,7 @@
  * @file
  * @author Daniel Kinzler
  */
+use MediaWiki\InterwikiLookup;
 
 /**
  * @covers MediaWikiPageLinkRenderer
@@ -52,6 +53,21 @@
                return $genderCache;
        }
 
+       /**
+        * @return InterwikiLookup
+        */
+       private function getInterwikiLookup() {
+               $lookup = $this->getMock( 'MediaWiki\InterwikiLookup' );
+
+               $lookup->expects( $this->any() )
+                       ->method( 'isValidInterwiki' )
+                       ->will( $this->returnCallback( function ( $prefix ) {
+                               return in_array( $prefix, array( 'en', 'de' ) );
+                       } ) );
+
+               return $lookup;
+       }
+
        public static function provideGetPageUrl() {
                return array(
                        array(
@@ -78,7 +94,7 @@
 
                $lang = Language::factory( 'en' );
 
-               $formatter = new MediaWikiTitleCodec( $lang, 
$this->getGenderCache() );
+               $formatter = new MediaWikiTitleCodec( $lang, 
$this->getGenderCache(), $this->getInterwikiLookup() );
                $renderer = new MediaWikiPageLinkRenderer( $formatter, '/' );
                $actual = $renderer->getPageUrl( $title, $params );
 
@@ -120,7 +136,7 @@
 
                $lang = Language::factory( 'en' );
 
-               $formatter = new MediaWikiTitleCodec( $lang, 
$this->getGenderCache() );
+               $formatter = new MediaWikiTitleCodec( $lang, 
$this->getGenderCache(), $this->getInterwikiLookup() );
                $renderer = new MediaWikiPageLinkRenderer( $formatter );
                $actual = $renderer->renderHtmlLink( $title, $text );
 
diff --git a/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php 
b/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
index d0a9831..0f7e618 100644
--- a/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
+++ b/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
@@ -18,6 +18,7 @@
  * @file
  * @author Daniel Kinzler
  */
+use MediaWiki\InterwikiLookup;
 
 /**
  * @covers MediaWikiTitleCodec
@@ -79,12 +80,28 @@
                return $genderCache;
        }
 
+       /**
+        * @return InterwikiLookup
+        */
+       private function getInterwikiLookup() {
+               $lookup = $this->getMock( 'MediaWiki\InterwikiLookup' );
+
+               $lookup->expects( $this->any() )
+                       ->method( 'isValidInterwiki' )
+                       ->will( $this->returnCallback( function ( $prefix ) {
+                               return in_array( $prefix, array( 'en', 'de' ) );
+                       } ) );
+
+               return $lookup;
+       }
+
        protected function makeCodec( $lang ) {
                $gender = $this->getGenderCache();
+               $interwikiLookup = $this->getInterwikiLookup();
                $lang = Language::factory( $lang );
                // language object can came from cache, which does not respect 
test settings
                $lang->resetNamespaces();
-               return new MediaWikiTitleCodec( $lang, $gender );
+               return new MediaWikiTitleCodec( $lang, $gender, 
$interwikiLookup );
        }
 
        public static function provideFormat() {
@@ -376,4 +393,5 @@
 
                $this->assertEquals( $expected, $name );
        }
+
 }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I72e4800ad58fe964d5eef5772220aa8c528d31f0
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to