MediaWiki REL1_31
SideBarTest.php
Go to the documentation of this file.
1<?php
2
7
12 private $skin;
14 private $messages;
15
17 private function initMessagesHref() {
18 # List of default messages for the sidebar. The sidebar doesn't care at
19 # all whether they are full URLs, interwiki links or local titles.
20 $URL_messages = [
21 'mainpage',
22 'portal-url',
23 'currentevents-url',
24 'recentchanges-url',
25 'randompage-url',
26 'helppage',
27 ];
28
29 # We're assuming that isValidURI works as advertised: it's also
30 # tested separately, in tests/phpunit/includes/HttpTest.php.
31 foreach ( $URL_messages as $m ) {
32 $titleName = MessageCache::singleton()->get( $m );
33 if ( Http::isValidURI( $titleName ) ) {
34 $this->messages[$m]['href'] = $titleName;
35 } else {
36 $title = Title::newFromText( $titleName );
37 $this->messages[$m]['href'] = $title->getLocalURL();
38 }
39 }
40 }
41
42 protected function setUp() {
43 parent::setUp();
44 $this->initMessagesHref();
45 $this->skin = new SkinTemplate();
46 $this->skin->getContext()->setLanguage( Language::factory( 'en' ) );
47 }
48
56 private function assertSideBar( $expected, $text, $message = '' ) {
57 $bar = [];
58 $this->skin->addToSidebarPlain( $bar, $text );
59 $this->assertEquals( $expected, $bar, $message );
60 }
61
65 public function testSidebarWithOnlyTwoTitles() {
66 $this->assertSideBar(
67 [
68 'Title1' => [],
69 'Title2' => [],
70 ],
71 '* Title1
72* Title2
73'
74 );
75 }
76
80 public function testExpandMessages() {
81 $this->assertSideBar(
82 [ 'Title' => [
83 [
84 'text' => 'Help',
85 'href' => $this->messages['helppage']['href'],
86 'id' => 'n-help',
87 'active' => null
88 ]
89 ] ],
90 '* Title
91** helppage|help
92'
93 );
94 }
95
100 $this->setMwGlobals( [
101 'wgNoFollowLinks' => true,
102 'wgNoFollowDomainExceptions' => [],
103 'wgNoFollowNsExceptions' => [],
104 ] );
105 $this->assertSideBar(
106 [ 'Title' => [
107 # ** https://www.mediawiki.org/| Home
108 [
109 'text' => 'Home',
110 'href' => 'https://www.mediawiki.org/',
111 'id' => 'n-Home',
112 'active' => null,
113 'rel' => 'nofollow',
114 ],
115 # ** http://valid.no.desc.org/
116 # ... skipped since it is missing a pipe with a description
117 ] ],
118 '* Title
119** https://www.mediawiki.org/| Home
120** http://valid.no.desc.org/
121'
122 );
123 }
124
130 public function testTrickyPipe() {
131 $this->assertSideBar(
132 [ 'Title' => [
133 # The first 2 are skipped
134 # Doesn't really test the url properly
135 # because it will vary with $wgArticlePath et al.
136 # ** Baz|Fred
137 [
138 'text' => 'Fred',
139 'href' => Title::newFromText( 'Baz' )->getLocalURL(),
140 'id' => 'n-Fred',
141 'active' => null,
142 ],
143 [
144 'text' => 'title-to-display',
145 'href' => Title::newFromText( 'page-to-go-to' )->getLocalURL(),
146 'id' => 'n-title-to-display',
147 'active' => null,
148 ],
149 ] ],
150 '* Title
151** {{PAGENAME|Foo}}
152** Bar
153** Baz|Fred
154** {{PLURAL:1|page-to-go-to{{int:pipe-separator/en}}title-to-display|branch not taken}}
155'
156 );
157 }
158
159 #### Attributes for external links ##########################
160 private function getAttribs() {
161 # Sidebar text we will use everytime
162 $text = '* Title
163** https://www.mediawiki.org/| Home';
164
165 $bar = [];
166 $this->skin->addToSidebarPlain( $bar, $text );
167
168 return $bar['Title'][0];
169 }
170
175 $this->setMwGlobals( [
176 'wgNoFollowLinks' => true,
177 'wgNoFollowDomainExceptions' => [],
178 'wgNoFollowNsExceptions' => [],
179 'wgExternalLinkTarget' => false,
180 ] );
181 $attribs = $this->getAttribs();
182
183 $this->assertArrayHasKey( 'rel', $attribs );
184 $this->assertEquals( 'nofollow', $attribs['rel'] );
185
186 $this->assertArrayNotHasKey( 'target', $attribs );
187 }
188
193 public function testRespectWgnofollowlinks() {
194 $this->setMwGlobals( 'wgNoFollowLinks', false );
195
196 $attribs = $this->getAttribs();
197 $this->assertArrayNotHasKey( 'rel', $attribs,
198 'External URL in sidebar do not have rel=nofollow when $wgNoFollowLinks = false'
199 );
200 }
201
207 public function testRespectExternallinktarget( $externalLinkTarget ) {
208 $this->setMwGlobals( 'wgExternalLinkTarget', $externalLinkTarget );
209
210 $attribs = $this->getAttribs();
211 $this->assertArrayHasKey( 'target', $attribs );
212 $this->assertEquals( $attribs['target'], $externalLinkTarget );
213 }
214
215 public static function dataRespectExternallinktarget() {
216 return [
217 [ '_blank' ],
218 [ '_self' ],
219 ];
220 }
221}
shown</td >< td > a href
static isValidURI( $uri)
Checks that the given URI is a valid one.
Definition Http.php:146
Base class that store and restore the Language objects.
setMwGlobals( $pairs, $value=null)
Sets a global, maintaining a stashed version of the previous global to be restored in tearDown.
static singleton()
Get the signleton instance of this class.
testSidebarWithOnlyTwoTitles()
SkinTemplate::addToSidebarPlain.
SkinTemplate $skin
A skin template, reinitialized before each test.
testExpandMessages()
SkinTemplate::addToSidebarPlain.
testRespectWgnofollowlinks()
Test $wgNoFollowLinks in sidebar Skin::addToSidebarPlain.
testTrickyPipe()
T35321 - Make sure there's a | after transforming.
testTestAttributesAssertionHelper()
Simple test to verify our helper assertAttribs() is functional.
initMessagesHref()
Build $this->messages array.
$messages
Local cache for sidebar messages.
assertSideBar( $expected, $text, $message='')
Internal helper to test the sidebar.
static dataRespectExternallinktarget()
testRespectExternallinktarget( $externalLinkTarget)
Test $wgExternaLinkTarget in sidebar dataRespectExternallinktarget Skin::addToSidebarPlain.
testExternalUrlsRequireADescription()
SkinTemplate::addToSidebarPlain.
Base class for template-based skins.
Represents a title within MediaWiki.
Definition Title.php:39
this class mediates it Skin Encapsulates a look and feel for the wiki All of the functions that render HTML and make choices about how to render it are here and are called from various other places when and is meant to be subclassed with other skins that may override some of its functions The User object contains a reference to a skin(according to that user 's preference)
design txt This is a brief overview of the new design More thorough and up to date information is available on the documentation wiki at https
Definition design.txt:12
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses just before the function returns a value If you return an< a > element with HTML attributes $attribs and contents $html will be returned If you return $ret will be returned and may include noclasses after processing & $attribs
Definition hooks.txt:2014
Further assume MyExt::onFoo needs service Bar