From fbc6ec7cbde50fe7fc77ea9e6fb132c6f69bf96d Mon Sep 17 00:00:00 2001 From: Antoine Musso Date: Mon, 25 Jul 2011 15:42:50 +0000 Subject: [PATCH] Test for external links in the sidebar follow up r90949 Note: this does NOT test the parser external links only externals links inside the sidebar. This might help rewrite r90949. --- tests/phpunit/skins/SideBarTest.php | 170 ++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 tests/phpunit/skins/SideBarTest.php diff --git a/tests/phpunit/skins/SideBarTest.php b/tests/phpunit/skins/SideBarTest.php new file mode 100644 index 0000000000..c53675bef5 --- /dev/null +++ b/tests/phpunit/skins/SideBarTest.php @@ -0,0 +1,170 @@ +initMessagesHref(); + parent::__construct(); + } + + /** Build $this->messages array */ + private function initMessagesHref() { + # List of default messages for the sidebar: + $URL_messages = array( + 'mainpage', + 'portal-url', + 'currentevents-url', + 'recentchanges-url', + 'randompage-url', + 'helppage', + ); + + foreach( $URL_messages as $m ) { + $titleName = MessageCache::singleton()->get($m); + $title = Title::newFromText( $titleName ); + $this->messages[$m]['href'] = $title->getLocalURL(); + } + } + + function setUp() { + $this->skin = new SkinTemplate(); + } + function tearDown() { + $this->skin = null; + } + + /** + * Internal helper to test the sidebar + * @param $expected + * @param $text + * @param $message (Default: '') + */ + private function assertSideBar( $expected, $text, $message = '' ) { + $bar = array(); + $this->skin->addToSidebarPlain( $bar, $text ); + $this->assertEquals( $expected, $bar, $message ); + } + + function testSidebarWithOnlyTwoTitles() { + $this->assertSideBar( + array( + 'Title1' => array(), + 'Title2' => array(), + ), +'* Title1 +* Title2 +' + ); + } + + function testExpandMessages() { + $this->assertSidebar( + array( 'Title' => array( + array( + 'text' => 'Help', + 'href' => $this->messages['helppage']['href'], + 'id' => 'n-help', + 'active' => null + ) + )), +'* Title +** helppage|help +' + ); + } + + function testExternalUrlsRequireADescription() { + $this->assertSidebar( + array( 'Title' => array( + # ** http://www.mediawiki.org/| Home + array( + 'text' => 'Home', + 'href' => 'http://www.mediawiki.org/', + 'id' => 'n-Home', + 'active' => null, + 'rel' => 'nofollow', + ), + # ** http://valid.no.desc.org/ + # ... skipped since it is missing a pipe with a description + )), +'* Title +** http://www.mediawiki.org/| Home +** http://valid.no.desc.org/ +' + + ); + + } + + + #### Attributes for external links ########################## + private function getAttribs( ) { + # Sidebar text we will use everytime + $text = '* Title +** http://www.mediawiki.org/| Home'; + + $bar = array(); + $this->skin->addToSideBarPlain( $bar, $text ); + + return $bar['Title'][0]; + } + + /** + * Simple test to verify our helper assertAttribs() is functional + * Please note this assume MediaWiki default settings: + * $wgNoFollowLinks = true + * $wgExternalLinkTarget = false + */ + function testTestAttributesAssertionHelper() { + $attribs = $this->getAttribs(); + + $this->assertArrayHasKey( 'rel', $attribs ); + $this->assertEquals( 'nofollow', $attribs['rel'] ); + + $this->assertArrayNotHasKey( 'target', $attribs ); + } + + /** + * Test wgNoFollowLinks in sidebar + */ + function testRespectWgnofollowlinks() { + global $wgNoFollowLinks; + $saved = $wgNoFollowLinks; + $wgNoFollowLinks = false; + + $attribs = $this->getAttribs(); + $this->assertArrayNotHasKey( 'rel', $attribs, + 'External URL in sidebar do not have rel=nofollow when wgNoFollowLinks = false' + ); + + // Restore global + $wgNoFollowLinks = $saved; + } + + /** + * Test wgExternaLinkTarget in sidebar + */ + function testRespectExternallinktarget() { + global $wgExternalLinkTarget; + $saved = $wgExternalLinkTarget; + + $wgExternalLinkTarget = '_blank'; + $attribs = $this->getAttribs(); + $this->assertArrayHasKey( 'target', $attribs ); + $this->assertEquals( $attribs['target'], '_blank' ); + + $wgExternalLinkTarget = '_self'; + $attribs = $this->getAttribs(); + $this->assertArrayHasKey( 'target', $attribs ); + $this->assertEquals( $attribs['target'], '_self' ); + + // Restore global + $wgExternalLinkTarget = $saved; + } + +} -- 2.20.1