<?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' ),
/**
* 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();
$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 );
+ }
+
}