4 * @group ContentHandler
6 * @note: We don't make assumptions about the main namespace.
7 * But we do expect the Help namespace to contain Wikitext.
10 class TitleMethodsTest
extends MediaWikiTestCase
{
12 public function setup() {
13 global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContLang;
15 $this->mergeMwGlobalArrayValue(
19 12303 => 'TEST-JS_TALK',
23 $this->mergeMwGlobalArrayValue(
24 'wgNamespaceContentModels',
26 12302 => CONTENT_MODEL_JAVASCRIPT
,
30 MWNamespace
::getCanonicalNamespaces( true ); # reset namespace cache
31 $wgContLang->resetNamespaces(); # reset namespace cache
34 public function teardown() {
37 MWNamespace
::getCanonicalNamespaces( true ); # reset namespace cache
38 $wgContLang->resetNamespaces(); # reset namespace cache
41 public static function provideEquals() {
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 ),
54 * @dataProvider provideEquals
56 public function testEquals( $titleA, $titleB, $expectedBool ) {
57 $titleA = Title
::newFromText( $titleA );
58 $titleB = Title
::newFromText( $titleB );
60 $this->assertEquals( $expectedBool, $titleA->equals( $titleB ) );
61 $this->assertEquals( $expectedBool, $titleB->equals( $titleA ) );
64 public static function provideInNamespace() {
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 ),
78 * @dataProvider provideInNamespace
80 public function testInNamespace( $title, $ns, $expectedBool ) {
81 $title = Title
::newFromText( $title );
82 $this->assertEquals( $expectedBool, $title->inNamespace( $ns ) );
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
) ) );
93 public static function provideHasSubjectNamespace() {
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 ),
107 * @dataProvider provideHasSubjectNamespace
109 public function testHasSubjectNamespace( $title, $ns, $expectedBool ) {
110 $title = Title
::newFromText( $title );
111 $this->assertEquals( $expectedBool, $title->hasSubjectNamespace( $ns ) );
114 public function dataGetContentModel() {
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
),
140 * @dataProvider dataGetContentModel
142 public function testGetContentModel( $title, $expectedModelId ) {
143 $title = Title
::newFromText( $title );
144 $this->assertEquals( $expectedModelId, $title->getContentModel() );
148 * @dataProvider dataGetContentModel
150 public function testHasContentModel( $title, $expectedModelId ) {
151 $title = Title
::newFromText( $title );
152 $this->assertTrue( $title->hasContentModel( $expectedModelId ) );
155 public static function provideIsCssOrJsPage() {
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 ),
178 * @dataProvider provideIsCssOrJsPage
180 public function testIsCssOrJsPage( $title, $expectedBool ) {
181 $title = Title
::newFromText( $title );
182 $this->assertEquals( $expectedBool, $title->isCssOrJsPage() );
186 public static function provideIsCssJsSubpage() {
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 ),
207 * @dataProvider provideIsCssJsSubpage
209 public function testIsCssJsSubpage( $title, $expectedBool ) {
210 $title = Title
::newFromText( $title );
211 $this->assertEquals( $expectedBool, $title->isCssJsSubpage() );
214 public static function provideIsCssSubpage() {
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 ),
227 * @dataProvider provideIsCssSubpage
229 public function testIsCssSubpage( $title, $expectedBool ) {
230 $title = Title
::newFromText( $title );
231 $this->assertEquals( $expectedBool, $title->isCssSubpage() );
234 public static function provideIsJsSubpage() {
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 ),
247 * @dataProvider provideIsJsSubpage
249 public function testIsJsSubpage( $title, $expectedBool ) {
250 $title = Title
::newFromText( $title );
251 $this->assertEquals( $expectedBool, $title->isJsSubpage() );
254 public static function provideIsWikitextPage() {
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 ),
278 * @dataProvider provideIsWikitextPage
280 public function testIsWikitextPage( $title, $expectedBool ) {
281 $title = Title
::newFromText( $title );
282 $this->assertEquals( $expectedBool, $title->isWikitextPage() );