assertEquals( $shouldMatch, ParserOutput::isLinkInternal( $server, $url ) ); } /** * @covers ParserOutput::setExtensionData * @covers ParserOutput::getExtensionData */ public function testExtensionData() { $po = new ParserOutput(); $po->setExtensionData( "one", "Foo" ); $this->assertEquals( "Foo", $po->getExtensionData( "one" ) ); $this->assertNull( $po->getExtensionData( "spam" ) ); $po->setExtensionData( "two", "Bar" ); $this->assertEquals( "Foo", $po->getExtensionData( "one" ) ); $this->assertEquals( "Bar", $po->getExtensionData( "two" ) ); $po->setExtensionData( "one", null ); $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::getSecondaryDataUpdates * @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::getSecondaryDataUpdates * @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 ); } }