Merge "(bug 40154) On action=info show where this page redirects to and whether it...
[lhc/web/wiklou.git] / tests / phpunit / includes / TitleMethodsTest.php
1 <?php
2
3 /**
4 * @group ContentHandler
5 *
6 * @note: We don't make assumptions about the main namespace.
7 * But we do expect the Help namespace to contain Wikitext.
8 *
9 */
10 class TitleMethodsTest extends MediaWikiTestCase {
11
12 public function setup() {
13 global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContLang;
14
15 $this->mergeMwGlobalArrayValue(
16 'wgExtraNamespaces',
17 array(
18 12302 => 'TEST-JS',
19 12303 => 'TEST-JS_TALK',
20 )
21 );
22
23 $this->mergeMwGlobalArrayValue(
24 'wgNamespaceContentModels',
25 array(
26 12302 => CONTENT_MODEL_JAVASCRIPT,
27 )
28 );
29
30 MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
31 $wgContLang->resetNamespaces(); # reset namespace cache
32 }
33
34 public function teardown() {
35 global $wgContLang;
36
37 MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
38 $wgContLang->resetNamespaces(); # reset namespace cache
39 }
40
41 public static function provideEquals() {
42 return array(
43 array( 'Main Page', 'Main Page', true ),
44 array( 'Main Page', 'Not The Main Page', false ),
45 array( 'Main Page', 'Project:Main Page', false ),
46 array( 'File:Example.png', 'Image:Example.png', true ),
47 array( 'Special:Version', 'Special:Version', true ),
48 array( 'Special:Version', 'Special:Recentchanges', false ),
49 array( 'Special:Version', 'Main Page', false ),
50 );
51 }
52
53 /**
54 * @dataProvider provideEquals
55 */
56 public function testEquals( $titleA, $titleB, $expectedBool ) {
57 $titleA = Title::newFromText( $titleA );
58 $titleB = Title::newFromText( $titleB );
59
60 $this->assertEquals( $expectedBool, $titleA->equals( $titleB ) );
61 $this->assertEquals( $expectedBool, $titleB->equals( $titleA ) );
62 }
63
64 public static function provideInNamespace() {
65 return array(
66 array( 'Main Page', NS_MAIN, true ),
67 array( 'Main Page', NS_TALK, false ),
68 array( 'Main Page', NS_USER, false ),
69 array( 'User:Foo', NS_USER, true ),
70 array( 'User:Foo', NS_USER_TALK, false ),
71 array( 'User:Foo', NS_TEMPLATE, false ),
72 array( 'User_talk:Foo', NS_USER_TALK, true ),
73 array( 'User_talk:Foo', NS_USER, false ),
74 );
75 }
76
77 /**
78 * @dataProvider provideInNamespace
79 */
80 public function testInNamespace( $title, $ns, $expectedBool ) {
81 $title = Title::newFromText( $title );
82 $this->assertEquals( $expectedBool, $title->inNamespace( $ns ) );
83 }
84
85 public function testInNamespaces() {
86 $mainpage = Title::newFromText( 'Main Page' );
87 $this->assertTrue( $mainpage->inNamespaces( NS_MAIN, NS_USER ) );
88 $this->assertTrue( $mainpage->inNamespaces( array( NS_MAIN, NS_USER ) ) );
89 $this->assertTrue( $mainpage->inNamespaces( array( NS_USER, NS_MAIN ) ) );
90 $this->assertFalse( $mainpage->inNamespaces( array( NS_PROJECT, NS_TEMPLATE ) ) );
91 }
92
93 public static function provideHasSubjectNamespace() {
94 return array(
95 array( 'Main Page', NS_MAIN, true ),
96 array( 'Main Page', NS_TALK, true ),
97 array( 'Main Page', NS_USER, false ),
98 array( 'User:Foo', NS_USER, true ),
99 array( 'User:Foo', NS_USER_TALK, true ),
100 array( 'User:Foo', NS_TEMPLATE, false ),
101 array( 'User_talk:Foo', NS_USER_TALK, true ),
102 array( 'User_talk:Foo', NS_USER, true ),
103 );
104 }
105
106 /**
107 * @dataProvider provideHasSubjectNamespace
108 */
109 public function testHasSubjectNamespace( $title, $ns, $expectedBool ) {
110 $title = Title::newFromText( $title );
111 $this->assertEquals( $expectedBool, $title->hasSubjectNamespace( $ns ) );
112 }
113
114 public function dataGetContentModel() {
115 return array(
116 array( 'Help:Foo', CONTENT_MODEL_WIKITEXT ),
117 array( 'Help:Foo.js', CONTENT_MODEL_WIKITEXT ),
118 array( 'Help:Foo/bar.js', CONTENT_MODEL_WIKITEXT ),
119 array( 'User:Foo', CONTENT_MODEL_WIKITEXT ),
120 array( 'User:Foo.js', CONTENT_MODEL_WIKITEXT ),
121 array( 'User:Foo/bar.js', CONTENT_MODEL_JAVASCRIPT ),
122 array( 'User:Foo/bar.css', CONTENT_MODEL_CSS ),
123 array( 'User talk:Foo/bar.css', CONTENT_MODEL_WIKITEXT ),
124 array( 'User:Foo/bar.js.xxx', CONTENT_MODEL_WIKITEXT ),
125 array( 'User:Foo/bar.xxx', CONTENT_MODEL_WIKITEXT ),
126 array( 'MediaWiki:Foo.js', CONTENT_MODEL_JAVASCRIPT ),
127 array( 'MediaWiki:Foo.css', CONTENT_MODEL_CSS ),
128 array( 'MediaWiki:Foo/bar.css', CONTENT_MODEL_CSS ),
129 array( 'MediaWiki:Foo.JS', CONTENT_MODEL_WIKITEXT ),
130 array( 'MediaWiki:Foo.CSS', CONTENT_MODEL_WIKITEXT ),
131 array( 'MediaWiki:Foo.css.xxx', CONTENT_MODEL_WIKITEXT ),
132 array( 'TEST-JS:Foo', CONTENT_MODEL_JAVASCRIPT ),
133 array( 'TEST-JS:Foo.js', CONTENT_MODEL_JAVASCRIPT ),
134 array( 'TEST-JS:Foo/bar.js', CONTENT_MODEL_JAVASCRIPT ),
135 array( 'TEST-JS_TALK:Foo.js', CONTENT_MODEL_WIKITEXT ),
136 );
137 }
138
139 /**
140 * @dataProvider dataGetContentModel
141 */
142 public function testGetContentModel( $title, $expectedModelId ) {
143 $title = Title::newFromText( $title );
144 $this->assertEquals( $expectedModelId, $title->getContentModel() );
145 }
146
147 /**
148 * @dataProvider dataGetContentModel
149 */
150 public function testHasContentModel( $title, $expectedModelId ) {
151 $title = Title::newFromText( $title );
152 $this->assertTrue( $title->hasContentModel( $expectedModelId ) );
153 }
154
155 public static function provideIsCssOrJsPage() {
156 return array(
157 array( 'Help:Foo', false ),
158 array( 'Help:Foo.js', false ),
159 array( 'Help:Foo/bar.js', false ),
160 array( 'User:Foo', false ),
161 array( 'User:Foo.js', false ),
162 array( 'User:Foo/bar.js', false ),
163 array( 'User:Foo/bar.css', false ),
164 array( 'User talk:Foo/bar.css', false ),
165 array( 'User:Foo/bar.js.xxx', false ),
166 array( 'User:Foo/bar.xxx', false ),
167 array( 'MediaWiki:Foo.js', true ),
168 array( 'MediaWiki:Foo.css', true ),
169 array( 'MediaWiki:Foo.JS', false ),
170 array( 'MediaWiki:Foo.CSS', false ),
171 array( 'MediaWiki:Foo.css.xxx', false ),
172 array( 'TEST-JS:Foo', false ),
173 array( 'TEST-JS:Foo.js', false ),
174 );
175 }
176
177 /**
178 * @dataProvider provideIsCssOrJsPage
179 */
180 public function testIsCssOrJsPage( $title, $expectedBool ) {
181 $title = Title::newFromText( $title );
182 $this->assertEquals( $expectedBool, $title->isCssOrJsPage() );
183 }
184
185
186 public static function provideIsCssJsSubpage() {
187 return array(
188 array( 'Help:Foo', false ),
189 array( 'Help:Foo.js', false ),
190 array( 'Help:Foo/bar.js', false ),
191 array( 'User:Foo', false ),
192 array( 'User:Foo.js', false ),
193 array( 'User:Foo/bar.js', true ),
194 array( 'User:Foo/bar.css', true ),
195 array( 'User talk:Foo/bar.css', false ),
196 array( 'User:Foo/bar.js.xxx', false ),
197 array( 'User:Foo/bar.xxx', false ),
198 array( 'MediaWiki:Foo.js', false ),
199 array( 'User:Foo/bar.JS', false ),
200 array( 'User:Foo/bar.CSS', false ),
201 array( 'TEST-JS:Foo', false ),
202 array( 'TEST-JS:Foo.js', false ),
203 );
204 }
205
206 /**
207 * @dataProvider provideIsCssJsSubpage
208 */
209 public function testIsCssJsSubpage( $title, $expectedBool ) {
210 $title = Title::newFromText( $title );
211 $this->assertEquals( $expectedBool, $title->isCssJsSubpage() );
212 }
213
214 public static function provideIsCssSubpage() {
215 return array(
216 array( 'Help:Foo', false ),
217 array( 'Help:Foo.css', false ),
218 array( 'User:Foo', false ),
219 array( 'User:Foo.js', false ),
220 array( 'User:Foo.css', false ),
221 array( 'User:Foo/bar.js', false ),
222 array( 'User:Foo/bar.css', true ),
223 );
224 }
225
226 /**
227 * @dataProvider provideIsCssSubpage
228 */
229 public function testIsCssSubpage( $title, $expectedBool ) {
230 $title = Title::newFromText( $title );
231 $this->assertEquals( $expectedBool, $title->isCssSubpage() );
232 }
233
234 public static function provideIsJsSubpage() {
235 return array(
236 array( 'Help:Foo', false ),
237 array( 'Help:Foo.css', false ),
238 array( 'User:Foo', false ),
239 array( 'User:Foo.js', false ),
240 array( 'User:Foo.css', false ),
241 array( 'User:Foo/bar.js', true ),
242 array( 'User:Foo/bar.css', false ),
243 );
244 }
245
246 /**
247 * @dataProvider provideIsJsSubpage
248 */
249 public function testIsJsSubpage( $title, $expectedBool ) {
250 $title = Title::newFromText( $title );
251 $this->assertEquals( $expectedBool, $title->isJsSubpage() );
252 }
253
254 public static function provideIsWikitextPage() {
255 return array(
256 array( 'Help:Foo', true ),
257 array( 'Help:Foo.js', true ),
258 array( 'Help:Foo/bar.js', true ),
259 array( 'User:Foo', true ),
260 array( 'User:Foo.js', true ),
261 array( 'User:Foo/bar.js', false ),
262 array( 'User:Foo/bar.css', false ),
263 array( 'User talk:Foo/bar.css', true ),
264 array( 'User:Foo/bar.js.xxx', true ),
265 array( 'User:Foo/bar.xxx', true ),
266 array( 'MediaWiki:Foo.js', false ),
267 array( 'MediaWiki:Foo.css', false ),
268 array( 'MediaWiki:Foo/bar.css', false ),
269 array( 'User:Foo/bar.JS', true ),
270 array( 'User:Foo/bar.CSS', true ),
271 array( 'TEST-JS:Foo', false ),
272 array( 'TEST-JS:Foo.js', false ),
273 array( 'TEST-JS_TALK:Foo.js', true ),
274 );
275 }
276
277 /**
278 * @dataProvider provideIsWikitextPage
279 */
280 public function testIsWikitextPage( $title, $expectedBool ) {
281 $title = Title::newFromText( $title );
282 $this->assertEquals( $expectedBool, $title->isWikitextPage() );
283 }
284
285 }