Merge "Add autocomplete for WhatLinksHere subpages"
[lhc/web/wiklou.git] / tests / phpunit / includes / parser / ParserOutputTest.php
index 68f77ab..a6b4880 100644 (file)
@@ -1,8 +1,12 @@
 <?php
 
+/**
+ * @group Database
+ *        ^--- trigger DB shadowing because we are using Title magic
+ */
 class ParserOutputTest extends MediaWikiTestCase {
 
-       function dataIsLinkInternal() {
+       public static function provideIsLinkInternal() {
                return array(
                        // Different domains
                        array( false, 'http://example.org', 'http://mediawiki.org' ),
@@ -29,13 +33,17 @@ class ParserOutputTest extends MediaWikiTestCase {
 
        /**
         * Test to make sure ParserOutput::isLinkInternal behaves properly
-        * @dataProvider dataIsLinkInternal
+        * @dataProvider provideIsLinkInternal
+        * @covers ParserOutput::isLinkInternal
         */
-       function testIsLinkInternal( $shouldMatch, $server, $url ) {
-
+       public function testIsLinkInternal( $shouldMatch, $server, $url ) {
                $this->assertEquals( $shouldMatch, ParserOutput::isLinkInternal( $server, $url ) );
        }
 
+       /**
+        * @covers ParserOutput::setExtensionData
+        * @covers ParserOutput::getExtensionData
+        */
        public function testExtensionData() {
                $po = new ParserOutput();
 
@@ -52,4 +60,94 @@ class ParserOutputTest extends MediaWikiTestCase {
                $this->assertNull( $po->getExtensionData( "one" ) );
                $this->assertEquals( "Bar", $po->getExtensionData( "two" ) );
        }
+
+       /**
+        * @covers ParserOutput::setProperty
+        * @covers ParserOutput::getProperty
+        * @covers ParserOutput::unsetProperty
+        * @covers ParserOutput::getProperties
+        */
+       public function testProperties() {
+               $po = new ParserOutput();
+
+               $po->setProperty( 'foo', 'val' );
+
+               $properties = $po->getProperties();
+               $this->assertEquals( $po->getProperty( 'foo' ), 'val' );
+               $this->assertEquals( $properties['foo'], 'val' );
+
+               $po->setProperty( 'foo', 'second val' );
+
+               $properties = $po->getProperties();
+               $this->assertEquals( $po->getProperty( 'foo' ), 'second val' );
+               $this->assertEquals( $properties['foo'], 'second val' );
+
+               $po->unsetProperty( 'foo' );
+
+               $properties = $po->getProperties();
+               $this->assertEquals( $po->getProperty( 'foo' ), false );
+               $this->assertArrayNotHasKey( 'foo', $properties );
+       }
+
+       /**
+        * @covers ParserOutput::hasCustomDataUpdates
+        * @covers ParserOutput::addSecondaryDataUpdate
+        */
+       public function testHasCustomDataUpdates() {
+               $po = new ParserOutput();
+               $this->assertFalse( $po->hasCustomDataUpdates() );
+
+               $dataUpdate = $this->getMock( 'DataUpdate' );
+               $po->addSecondaryDataUpdate( $dataUpdate );
+               $this->assertTrue( $po->hasCustomDataUpdates() );
+       }
+
+       /**
+        * @covers ParserOutput::getSecondaryDataUpdate
+        * @covers ParserOutput::addSecondaryDataUpdate
+        */
+       public function testGetSecondaryDataUpdates() {
+               // NOTE: getSecondaryDataUpdates always returns a LinksUpdate object
+               // in addition to the DataUpdates registered via addSecondaryDataUpdate().
+
+               $title = Title::makeTitle( NS_MAIN, 'Dummy' );
+               $title->resetArticleID( 7777777 );
+
+               $po = new ParserOutput();
+               $this->assertCount( 1, $po->getSecondaryDataUpdates( $title ) );
+
+               $dataUpdate = $this->getMock( 'DataUpdate' );
+               $po->addSecondaryDataUpdate( $dataUpdate );
+               $this->assertCount( 2, $po->getSecondaryDataUpdates( $title ) );
+
+               // Test Fallback to getTitleText
+               $this->insertPage( 'Project:ParserOutputTestDummyPage' );
+               $po->setTitleText( 'Project:ParserOutputTestDummyPage' );
+               $this->assertCount( 2, $po->getSecondaryDataUpdates() );
+       }
+
+       /**
+        * @covers ParserOutput::getSecondaryDataUpdate
+        * @covers ParserOutput::__sleep
+        */
+       public function testGetSecondaryDataUpdates_serialization() {
+               $title = Title::makeTitle( NS_MAIN, 'Dummy' );
+               $title->resetArticleID( 7777777 );
+
+               $po = new ParserOutput();
+
+               // Serializing is fine with no custom DataUpdates.
+               $po = unserialize( serialize( $po ) );
+               $this->assertCount( 1, $po->getSecondaryDataUpdates( $title ) );
+
+               // If there are custom DataUpdates, getSecondaryDataUpdates
+               // should fail after serialization.
+               $dataUpdate = $this->getMock( 'DataUpdate' );
+               $po->addSecondaryDataUpdate( $dataUpdate );
+               $po = unserialize( serialize( $po ) );
+
+               $this->setExpectedException( 'MWException' );
+               $po->getSecondaryDataUpdates( $title );
+       }
+
 }