Merge "Move Linker::getLinkColour() into LinkRenderer"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 18 Jul 2016 16:16:07 +0000 (16:16 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 18 Jul 2016 16:16:07 +0000 (16:16 +0000)
1  2 
includes/Linker.php
includes/ServiceWiring.php
tests/phpunit/includes/LinkerTest.php
tests/phpunit/includes/linker/LinkRendererFactoryTest.php
tests/phpunit/includes/linker/LinkRendererTest.php

diff --combined includes/Linker.php
@@@ -137,31 -137,24 +137,24 @@@ class Linker 
        /**
         * Return the CSS colour of a known link
         *
+        * @deprecated since 1.28, use LinkRenderer::getLinkClasses() instead
+        *
         * @since 1.16.3
         * @param LinkTarget $t
         * @param int $threshold User defined threshold
         * @return string CSS class
         */
        public static function getLinkColour( LinkTarget $t, $threshold ) {
-               $linkCache = MediaWikiServices::getInstance()->getLinkCache();
-               // Make sure the target is in the cache
-               $id = $linkCache->addLinkObj( $t );
-               if ( $id == 0 ) {
-                       // Doesn't exist
-                       return '';
-               }
-               if ( $linkCache->getGoodLinkFieldObj( $t, 'redirect' ) ) {
-                       # Page is a redirect
-                       return 'mw-redirect';
-               } elseif ( $threshold > 0 && MWNamespace::isContent( $t->getNamespace() )
-                       && $linkCache->getGoodLinkFieldObj( $t, 'length' ) < $threshold
-               ) {
-                       # Page is a stub
-                       return 'stub';
+               wfDeprecated( __METHOD__, '1.28' );
+               $services = MediaWikiServices::getInstance();
+               $linkRenderer = $services->getLinkRenderer();
+               if ( $threshold !== $linkRenderer->getStubThreshold() ) {
+                       // Need to create a new instance with the right stub threshold...
+                       $linkRenderer = $services->getLinkRendererFactory()->create();
+                       $linkRenderer->setStubThreshold( $threshold );
                }
  
-               return '';
+               return $linkRenderer->getLinkClasses( $t );
        }
  
        /**
         *
         * If the option noBrackets is set the rollback link wont be enclosed in "[]".
         *
 -       * See the "mediawiki.page.rollback" module for the client-side handling of this link.
 -       *
         * @since 1.16.3. $context added in 1.20. $options added in 1.21
         *
         * @param Revision $rev
                        $inner = $context->msg( 'brackets' )->rawParams( $inner )->escaped();
                }
  
 -              $context->getOutput()->addModules( 'mediawiki.page.rollback' );
 -
                return '<span class="mw-rollback-link">' . $inner . '</span>';
        }
  
                $query = [
                        'action' => 'rollback',
                        'from' => $rev->getUserText(),
 +                      'token' => $context->getUser()->getEditToken( 'rollback' ),
                ];
                $attrs = [
                        'data-mw' => 'interface',
@@@ -154,10 -154,6 +154,10 @@@ return 
                return $store;
        },
  
 +      'WatchedItemQueryService' => function( MediaWikiServices $services ) {
 +              return new WatchedItemQueryService( $services->getDBLoadBalancer() );
 +      },
 +
        'LinkCache' => function( MediaWikiServices $services ) {
                return new LinkCache(
                        $services->getTitleFormatter()
  
        'LinkRendererFactory' => function( MediaWikiServices $services ) {
                return new LinkRendererFactory(
-                       $services->getTitleFormatter()
+                       $services->getTitleFormatter(),
+                       $services->getLinkCache()
                );
        },
  
@@@ -363,7 -363,6 +363,7 @@@ class LinkerTest extends MediaWikiLangT
        }
  
        /**
 +       * @covers MediaWiki\Linker\LinkRenderer::runLegacyBeginHook
         * @dataProvider provideLinkBeginHook
         */
        public function testLinkBeginHook( $callback, $expected ) {
        }
  
        /**
 +       * @covers MediaWiki\Linker\LinkRenderer::buildAElement
         * @dataProvider provideLinkEndHook
         */
        public function testLinkEndHook( $callback, $expected ) {
         * @covers Linker::getLinkColour
         */
        public function testGetLinkColour() {
+               $this->hideDeprecated( 'Linker::getLinkColour' );
                $linkCache = MediaWikiServices::getInstance()->getLinkCache();
                $foobarTitle = Title::makeTitle( NS_MAIN, 'FooBar' );
                $redirectTitle = Title::makeTitle( NS_MAIN, 'Redirect' );
@@@ -5,7 -5,7 +5,7 @@@ use MediaWiki\Linker\LinkRendererFactor
  use MediaWiki\MediaWikiServices;
  
  /**
 - * @covers LinkRendererFactory
 + * @covers MediaWiki\Linker\LinkRendererFactory
   */
  class LinkRendererFactoryTest extends MediaWikiLangTestCase {
  
         */
        private $titleFormatter;
  
+       /**
+        * @var LinkCache
+        */
+       private $linkCache;
        public function setUp() {
                parent::setUp();
                $this->titleFormatter = MediaWikiServices::getInstance()->getTitleFormatter();
+               $this->linkCache = MediaWikiServices::getInstance()->getLinkCache();
        }
  
        public static function provideCreateFromLegacyOptions() {
@@@ -48,7 -54,7 +54,7 @@@
         * @dataProvider provideCreateFromLegacyOptions
         */
        public function testCreateFromLegacyOptions( $options, $func, $val ) {
-               $factory = new LinkRendererFactory( $this->titleFormatter );
+               $factory = new LinkRendererFactory( $this->titleFormatter, $this->linkCache );
                $linkRenderer = $factory->createFromLegacyOptions(
                        $options
                );
        }
  
        public function testCreate() {
-               $factory = new LinkRendererFactory( $this->titleFormatter );
+               $factory = new LinkRendererFactory( $this->titleFormatter, $this->linkCache );
                $this->assertInstanceOf( LinkRenderer::class, $factory->create() );
        }
  
        public function testCreateForUser() {
+               /** @var PHPUnit_Framework_MockObject_MockObject|User $user */
                $user = $this->getMock( User::class, [ 'getStubThreshold' ] );
                $user->expects( $this->once() )
                        ->method( 'getStubThreshold' )
                        ->willReturn( 15 );
-               $factory = new LinkRendererFactory( $this->titleFormatter );
+               $factory = new LinkRendererFactory( $this->titleFormatter, $this->linkCache );
                $linkRenderer = $factory->createForUser( $user );
                $this->assertInstanceOf( LinkRenderer::class, $linkRenderer );
                $this->assertEquals( 15, $linkRenderer->getStubThreshold() );
@@@ -1,17 -1,18 +1,18 @@@
  <?php
  
  use MediaWiki\Linker\LinkRenderer;
+ use MediaWiki\Linker\LinkRendererFactory;
  use MediaWiki\MediaWikiServices;
  
  /**
 - * @covers LinkRenderer
 + * @covers MediaWiki\Linker\LinkRenderer
   */
  class LinkRendererTest extends MediaWikiLangTestCase {
  
        /**
-        * @var TitleFormatter
+        * @var LinkRendererFactory
         */
-       private $titleFormatter;
+       private $factory;
  
        public function setUp() {
                parent::setUp();
                        'wgScriptPath' => '/w',
                        'wgScript' => '/w/index.php',
                ] );
-               $this->titleFormatter = MediaWikiServices::getInstance()->getTitleFormatter();
+               $this->factory = MediaWikiServices::getInstance()->getLinkRendererFactory();
        }
  
        public function testMergeAttribs() {
                $target = new TitleValue( NS_SPECIAL, 'Blankpage' );
-               $linkRenderer = new LinkRenderer( $this->titleFormatter );
+               $linkRenderer = $this->factory->create();
                $link = $linkRenderer->makeBrokenLink( $target, null, [
                        // Appended to class
                        'class' => 'foobar',
@@@ -46,7 -48,7 +48,7 @@@
  
        public function testMakeKnownLink() {
                $target = new TitleValue( NS_MAIN, 'Foobar' );
-               $linkRenderer = new LinkRenderer( $this->titleFormatter );
+               $linkRenderer = $this->factory->create();
  
                // Query added
                $this->assertEquals(
@@@ -73,7 -75,7 +75,7 @@@
        public function testMakeBrokenLink() {
                $target = new TitleValue( NS_MAIN, 'Foobar' );
                $special = new TitleValue( NS_SPECIAL, 'Foobar' );
-               $linkRenderer = new LinkRenderer( $this->titleFormatter );
+               $linkRenderer = $this->factory->create();
  
                // action=edit&redlink=1 added
                $this->assertEquals(
        }
  
        public function testMakeLink() {
-               $linkRenderer = new LinkRenderer( $this->titleFormatter );
+               $linkRenderer = $this->factory->create();
                $foobar = new TitleValue( NS_SPECIAL, 'Foobar' );
                $blankpage = new TitleValue( NS_SPECIAL, 'Blankpage' );
                $this->assertEquals(
                        $linkRenderer->makeLink( $foobar, new HtmlArmor( '<script>evil()</script>' ) )
                );
        }
+       public function testGetLinkClasses() {
+               $titleFormatter = MediaWikiServices::getInstance()->getTitleFormatter();
+               $linkCache = new LinkCache( $titleFormatter );
+               $foobarTitle = new TitleValue( NS_MAIN, 'FooBar' );
+               $redirectTitle = new TitleValue( NS_MAIN, 'Redirect' );
+               $userTitle = new TitleValue( NS_USER, 'Someuser' );
+               $linkCache->addGoodLinkObj(
+                       1, // id
+                       $foobarTitle,
+                       10, // len
+                       0 // redir
+               );
+               $linkCache->addGoodLinkObj(
+                       2, // id
+                       $redirectTitle,
+                       10, // len
+                       1 // redir
+               );
+               $linkCache->addGoodLinkObj(
+                       3, // id
+                       $userTitle,
+                       10, // len
+                       0 // redir
+               );
+               $linkRenderer = new LinkRenderer( $titleFormatter, $linkCache );
+               $linkRenderer->setStubThreshold( 0 );
+               $this->assertEquals(
+                       '',
+                       $linkRenderer->getLinkClasses( $foobarTitle )
+               );
+               $linkRenderer->setStubThreshold( 20 );
+               $this->assertEquals(
+                       'stub',
+                       $linkRenderer->getLinkClasses( $foobarTitle )
+               );
+               $linkRenderer->setStubThreshold( 0 );
+               $this->assertEquals(
+                       'mw-redirect',
+                       $linkRenderer->getLinkClasses( $redirectTitle )
+               );
+               $linkRenderer->setStubThreshold( 20 );
+               $this->assertEquals(
+                       '',
+                       $linkRenderer->getLinkClasses( $userTitle )
+               );
+       }
  }