X-Git-Url: http://git.cyclocoop.org//%27http:/jquery.khurshid.com/ifixpng.php/%27?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2FOutputPageTest.php;h=097aef7f55030ef396cde0693547dddc1881a032;hb=da42dd58e76f2355a33d4f4d57d1e56c0cf2e9f4;hp=ba794eb2fd7825c367383366f0a326ee070441e0;hpb=a91757523a050ac81e4e1bb022981c3184349fa1;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/OutputPageTest.php b/tests/phpunit/includes/OutputPageTest.php index ba794eb2fd..097aef7f55 100644 --- a/tests/phpunit/includes/OutputPageTest.php +++ b/tests/phpunit/includes/OutputPageTest.php @@ -12,6 +12,14 @@ class OutputPageTest extends MediaWikiTestCase { const SCREEN_MEDIA_QUERY = 'screen and (min-width: 982px)'; const SCREEN_ONLY_MEDIA_QUERY = 'only screen and (min-width: 982px)'; + // @codingStandardsIgnoreStart Generic.Files.LineLength + const RSS_RC_LINK = ''; + const ATOM_RC_LINK = ''; + + const RSS_TEST_LINK = ''; + const ATOM_TEST_LINK = ''; + // @codingStandardsIgnoreEnd + // Ensure that we don't affect the global ResourceLoader state. protected function setUp() { parent::setUp(); @@ -51,6 +59,64 @@ class OutputPageTest extends MediaWikiTestCase { ]; } + private function setupFeedLinks( $feed, $types ) { + $outputPage = $this->newInstance( [ + 'AdvertisedFeedTypes' => $types, + 'Feed' => $feed, + 'OverrideSiteFeed' => false, + 'Script' => '/w', + 'Sitename' => false, + ] ); + $outputPage->setTitle( Title::makeTitle( NS_MAIN, 'Test' ) ); + $this->setMwGlobals( [ + 'wgScript' => '/w/index.php', + ] ); + return $outputPage; + } + + private function assertFeedLinks( $outputPage, $message, $present, $non_present ) { + $links = $outputPage->getHeadLinksArray(); + foreach ( $present as $link ) { + $this->assertContains( $link, $links, $message ); + } + foreach ( $non_present as $link ) { + $this->assertNotContains( $link, $links, $message ); + } + } + + private function assertFeedUILinks( $outputPage, $ui_links ) { + if ( $ui_links ) { + $this->assertTrue( $outputPage->isSyndicated(), 'Syndication should be offered' ); + $this->assertGreaterThan( 0, count( $outputPage->getSyndicationLinks() ), + 'Some syndication links should be there' ); + } else { + $this->assertFalse( $outputPage->isSyndicated(), 'No syndication should be offered' ); + $this->assertEquals( 0, count( $outputPage->getSyndicationLinks() ), + 'No syndication links should be there' ); + } + } + + public static function provideFeedLinkData() { + return [ + [ + true, [ 'rss' ], 'Only RSS RC link should be offerred', + [ self::RSS_RC_LINK ], [ self::ATOM_RC_LINK ] + ], + [ + true, [ 'atom' ], 'Only Atom RC link should be offerred', + [ self::ATOM_RC_LINK ], [ self::RSS_RC_LINK ] + ], + [ + true, [], 'No RC feed formats should be offerred', + [], [ self::ATOM_RC_LINK, self::RSS_RC_LINK ] + ], + [ + false, [ 'atom' ], 'No RC feeds should be offerred', + [], [ self::ATOM_RC_LINK, self::RSS_RC_LINK ] + ], + ]; + } + /** * @covers OutputPage::setCopyrightUrl * @covers OutputPage::getHeadLinksArray @@ -65,6 +131,67 @@ class OutputPageTest extends MediaWikiTestCase { ); } + /** + * @dataProvider provideFeedLinkData + * @covers OutputPage::getHeadLinksArray + */ + public function testRecentChangesFeed( $feed, $advertised_feed_types, + $message, $present, $non_present ) { + $outputPage = $this->setupFeedLinks( $feed, $advertised_feed_types ); + $this->assertFeedLinks( $outputPage, $message, $present, $non_present ); + } + + public static function provideAdditionalFeedData() { + return [ + [ + true, [ 'atom' ], 'Additional Atom feed should be offered', + 'atom', + [ self::ATOM_TEST_LINK, self::ATOM_RC_LINK ], + [ self::RSS_TEST_LINK, self::RSS_RC_LINK ], + true, + ], + [ + true, [ 'rss' ], 'Additional RSS feed should be offered', + 'rss', + [ self::RSS_TEST_LINK, self::RSS_RC_LINK ], + [ self::ATOM_TEST_LINK, self::ATOM_RC_LINK ], + true, + ], + [ + true, [ 'rss' ], 'Additional Atom feed should NOT be offered with RSS enabled', + 'atom', + [ self::RSS_RC_LINK ], + [ self::RSS_TEST_LINK, self::ATOM_TEST_LINK, self::ATOM_RC_LINK ], + false, + ], + [ + false, [ 'atom' ], 'Additional Atom feed should NOT be offered, all feeds disabled', + 'atom', + [], + [ + self::RSS_TEST_LINK, self::ATOM_TEST_LINK, + self::ATOM_RC_LINK, self::ATOM_RC_LINK, + ], + false, + ], + ]; + } + + /** + * @dataProvider provideAdditionalFeedData + * @covers OutputPage::getHeadLinksArray + * @covers OutputPage::addFeedLink + * @covers OutputPage::getSyndicationLinks + * @covers OutputPage::isSyndicated + */ + public function testAdditionalFeeds( $feed, $advertised_feed_types, $message, + $additional_feed_type, $present, $non_present, $any_ui_links ) { + $outputPage = $this->setupFeedLinks( $feed, $advertised_feed_types ); + $outputPage->addFeedLink( $additional_feed_type, 'fake-link' ); + $this->assertFeedLinks( $outputPage, $message, $present, $non_present ); + $this->assertFeedUILinks( $outputPage, $any_ui_links ); + } + // @todo How to test setStatusCode? /** @@ -797,7 +924,7 @@ class OutputPageTest extends MediaWikiTestCase { * @covers OutputPage::isSyndicated */ public function testSetSyndicated() { - $op = $this->newInstance(); + $op = $this->newInstance( [ 'Feed' => true ] ); $this->assertFalse( $op->isSyndicated() ); $op->setSyndicated(); @@ -805,6 +932,12 @@ class OutputPageTest extends MediaWikiTestCase { $op->setSyndicated( false ); $this->assertFalse( $op->isSyndicated() ); + + $op = $this->newInstance(); // Feed => false by default + $this->assertFalse( $op->isSyndicated() ); + + $op->setSyndicated(); + $this->assertFalse( $op->isSyndicated() ); } /** @@ -814,7 +947,7 @@ class OutputPageTest extends MediaWikiTestCase { * @covers OutputPage::getSyndicationLinks() */ public function testFeedLinks() { - $op = $this->newInstance(); + $op = $this->newInstance( [ 'Feed' => true ] ); $this->assertSame( [], $op->getSyndicationLinks() ); $op->addFeedLink( 'not a supported format', 'abc' ); @@ -839,6 +972,13 @@ class OutputPageTest extends MediaWikiTestCase { $expected[$type] = $op->getTitle()->getLocalURL( "feed=$type&apples=oranges" ); } $this->assertSame( $expected, $op->getSyndicationLinks() ); + + $op = $this->newInstance(); // Feed => false by default + $this->assertSame( [], $op->getSyndicationLinks() ); + + $op->addFeedLink( $feedTypes[0], 'def' ); + $this->assertFalse( $op->isSyndicated() ); + $this->assertSame( [], $op->getSyndicationLinks() ); } /**