Merge "Add and use Title::getOtherPage()"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 25 Dec 2014 15:22:36 +0000 (15:22 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 25 Dec 2014 15:22:36 +0000 (15:22 +0000)
includes/Title.php
includes/page/WikiPage.php
tests/phpunit/includes/TitleMethodsTest.php

index 4b60bcb..cf11bd3 100644 (file)
@@ -1334,6 +1334,25 @@ class Title {
                return Title::makeTitle( $subjectNS, $this->getDBkey() );
        }
 
+       /**
+        * Get the other title for this page, if this is a subject page
+        * get the talk page, if it is a subject page get the talk page
+        *
+        * @since 1.25
+        * @throws MWException
+        * @return Title
+        */
+       public function getOtherPage() {
+               if ( $this->isSpecialPage() ) {
+                       throw new MWException( 'Special pages cannot have other pages' );
+               }
+               if ( $this->isTalkPage() ) {
+                       return $this->getSubjectPage();
+               } else {
+                       return $this->getTalkPage();
+               }
+       }
+
        /**
         * Get the default namespace index, for when there is no namespace
         *
index 2825064..dcebe54 100644 (file)
@@ -3158,11 +3158,7 @@ class WikiPage implements Page, IDBAccessObject {
         */
        public static function onArticleCreate( $title ) {
                // Update existence markers on article/talk tabs...
-               if ( $title->isTalkPage() ) {
-                       $other = $title->getSubjectPage();
-               } else {
-                       $other = $title->getTalkPage();
-               }
+               $other = $title->getOtherPage();
 
                $other->invalidateCache();
                $other->purgeSquid();
@@ -3179,11 +3175,7 @@ class WikiPage implements Page, IDBAccessObject {
         */
        public static function onArticleDelete( $title ) {
                // Update existence markers on article/talk tabs...
-               if ( $title->isTalkPage() ) {
-                       $other = $title->getSubjectPage();
-               } else {
-                       $other = $title->getTalkPage();
-               }
+               $other = $title->getOtherPage();
 
                $other->invalidateCache();
                $other->purgeSquid();
index 5904fac..707a4a1 100644 (file)
@@ -297,4 +297,30 @@ class TitleMethodsTest extends MediaWikiTestCase {
                $title = Title::newFromText( $title );
                $this->assertEquals( $expectedBool, $title->isWikitextPage() );
        }
+
+       public static function provideGetOtherPage() {
+               return array(
+                       array( 'Main Page', 'Talk:Main Page' ),
+                       array( 'Talk:Main Page', 'Main Page' ),
+                       array( 'Help:Main Page', 'Help talk:Main Page' ),
+                       array( 'Help talk:Main Page', 'Help:Main Page' ),
+                       array( 'Special:FooBar', null ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetOtherpage
+        * @covers Title::getOtherPage
+        *
+        * @param string $text
+        * @param string|null $expected
+        */
+       public function testGetOtherPage( $text, $expected ) {
+               if ( $expected === null ) {
+                       $this->setExpectedException( 'MWException' );
+               }
+
+               $title = Title::newFromText( $text );
+               $this->assertEquals( $expected, $title->getOtherPage()->getPrefixedText() );
+       }
 }