Merge "For rows added by the SpecialStatsAddExtra hook, add an HTML id of "mw-" plus...
[lhc/web/wiklou.git] / tests / phpunit / includes / SiteConfigurationTest.php
1 <?php
2
3 function getSiteParams( $conf, $wiki ) {
4 $site = null;
5 $lang = null;
6 foreach ( $conf->suffixes as $suffix ) {
7 if ( substr( $wiki, -strlen( $suffix ) ) == $suffix ) {
8 $site = $suffix;
9 $lang = substr( $wiki, 0, -strlen( $suffix ) );
10 break;
11 }
12 }
13
14 return array(
15 'suffix' => $site,
16 'lang' => $lang,
17 'params' => array(
18 'lang' => $lang,
19 'site' => $site,
20 'wiki' => $wiki,
21 ),
22 'tags' => array( 'tag' ),
23 );
24 }
25
26 class SiteConfigurationTest extends MediaWikiTestCase {
27 var $mConf;
28
29 protected function setUp() {
30 parent::setUp();
31
32 $this->mConf = new SiteConfiguration;
33
34 $this->mConf->suffixes = array( 'wiki' );
35 $this->mConf->wikis = array( 'enwiki', 'dewiki', 'frwiki' );
36 $this->mConf->settings = array(
37 'simple' => array(
38 'wiki' => 'wiki',
39 'tag' => 'tag',
40 'enwiki' => 'enwiki',
41 'dewiki' => 'dewiki',
42 'frwiki' => 'frwiki',
43 ),
44
45 'fallback' => array(
46 'default' => 'default',
47 'wiki' => 'wiki',
48 'tag' => 'tag',
49 ),
50
51 'params' => array(
52 'default' => '$lang $site $wiki',
53 ),
54
55 '+global' => array(
56 'wiki' => array(
57 'wiki' => 'wiki',
58 ),
59 'tag' => array(
60 'tag' => 'tag',
61 ),
62 'enwiki' => array(
63 'enwiki' => 'enwiki',
64 ),
65 'dewiki' => array(
66 'dewiki' => 'dewiki',
67 ),
68 'frwiki' => array(
69 'frwiki' => 'frwiki',
70 ),
71 ),
72
73 'merge' => array(
74 '+wiki' => array(
75 'wiki' => 'wiki',
76 ),
77 '+tag' => array(
78 'tag' => 'tag',
79 ),
80 'default' => array(
81 'default' => 'default',
82 ),
83 '+enwiki' => array(
84 'enwiki' => 'enwiki',
85 ),
86 '+dewiki' => array(
87 'dewiki' => 'dewiki',
88 ),
89 '+frwiki' => array(
90 'frwiki' => 'frwiki',
91 ),
92 ),
93 );
94
95 $GLOBALS['global'] = array( 'global' => 'global' );
96 }
97
98 function testSiteFromDb() {
99 $this->assertEquals(
100 array( 'wikipedia', 'en' ),
101 $this->mConf->siteFromDB( 'enwiki' ),
102 'siteFromDB()'
103 );
104 $this->assertEquals(
105 array( 'wikipedia', '' ),
106 $this->mConf->siteFromDB( 'wiki' ),
107 'siteFromDB() on a suffix'
108 );
109 $this->assertEquals(
110 array( null, null ),
111 $this->mConf->siteFromDB( 'wikien' ),
112 'siteFromDB() on a non-existing wiki'
113 );
114
115 $this->mConf->suffixes = array( 'wiki', '' );
116 $this->assertEquals(
117 array( '', 'wikien' ),
118 $this->mConf->siteFromDB( 'wikien' ),
119 'siteFromDB() on a non-existing wiki (2)'
120 );
121 }
122
123 function testGetLocalDatabases() {
124 $this->assertEquals(
125 array( 'enwiki', 'dewiki', 'frwiki' ),
126 $this->mConf->getLocalDatabases(),
127 'getLocalDatabases()'
128 );
129 }
130
131 function testGetConfVariables() {
132 $this->assertEquals(
133 'enwiki',
134 $this->mConf->get( 'simple', 'enwiki', 'wiki' ),
135 'get(): simple setting on an existing wiki'
136 );
137 $this->assertEquals(
138 'dewiki',
139 $this->mConf->get( 'simple', 'dewiki', 'wiki' ),
140 'get(): simple setting on an existing wiki (2)'
141 );
142 $this->assertEquals(
143 'frwiki',
144 $this->mConf->get( 'simple', 'frwiki', 'wiki' ),
145 'get(): simple setting on an existing wiki (3)'
146 );
147 $this->assertEquals(
148 'wiki',
149 $this->mConf->get( 'simple', 'wiki', 'wiki' ),
150 'get(): simple setting on an suffix'
151 );
152 $this->assertEquals(
153 'wiki',
154 $this->mConf->get( 'simple', 'eswiki', 'wiki' ),
155 'get(): simple setting on an non-existing wiki'
156 );
157
158 $this->assertEquals(
159 'wiki',
160 $this->mConf->get( 'fallback', 'enwiki', 'wiki' ),
161 'get(): fallback setting on an existing wiki'
162 );
163 $this->assertEquals(
164 'tag',
165 $this->mConf->get( 'fallback', 'dewiki', 'wiki', array(), array( 'tag' ) ),
166 'get(): fallback setting on an existing wiki (with wiki tag)'
167 );
168 $this->assertEquals(
169 'wiki',
170 $this->mConf->get( 'fallback', 'wiki', 'wiki' ),
171 'get(): fallback setting on an suffix'
172 );
173 $this->assertEquals(
174 'wiki',
175 $this->mConf->get( 'fallback', 'wiki', 'wiki', array(), array( 'tag' ) ),
176 'get(): fallback setting on an suffix (with wiki tag)'
177 );
178 $this->assertEquals(
179 'wiki',
180 $this->mConf->get( 'fallback', 'eswiki', 'wiki' ),
181 'get(): fallback setting on an non-existing wiki'
182 );
183 $this->assertEquals(
184 'tag',
185 $this->mConf->get( 'fallback', 'eswiki', 'wiki', array(), array( 'tag' ) ),
186 'get(): fallback setting on an non-existing wiki (with wiki tag)'
187 );
188
189 $common = array( 'wiki' => 'wiki', 'default' => 'default' );
190 $commonTag = array( 'tag' => 'tag', 'wiki' => 'wiki', 'default' => 'default' );
191 $this->assertEquals(
192 array( 'enwiki' => 'enwiki' ) + $common,
193 $this->mConf->get( 'merge', 'enwiki', 'wiki' ),
194 'get(): merging setting on an existing wiki'
195 );
196 $this->assertEquals(
197 array( 'enwiki' => 'enwiki' ) + $commonTag,
198 $this->mConf->get( 'merge', 'enwiki', 'wiki', array(), array( 'tag' ) ),
199 'get(): merging setting on an existing wiki (with tag)'
200 );
201 $this->assertEquals(
202 array( 'dewiki' => 'dewiki' ) + $common,
203 $this->mConf->get( 'merge', 'dewiki', 'wiki' ),
204 'get(): merging setting on an existing wiki (2)'
205 );
206 $this->assertEquals(
207 array( 'dewiki' => 'dewiki' ) + $commonTag,
208 $this->mConf->get( 'merge', 'dewiki', 'wiki', array(), array( 'tag' ) ),
209 'get(): merging setting on an existing wiki (2) (with tag)'
210 );
211 $this->assertEquals(
212 array( 'frwiki' => 'frwiki' ) + $common,
213 $this->mConf->get( 'merge', 'frwiki', 'wiki' ),
214 'get(): merging setting on an existing wiki (3)'
215 );
216 $this->assertEquals(
217 array( 'frwiki' => 'frwiki' ) + $commonTag,
218 $this->mConf->get( 'merge', 'frwiki', 'wiki', array(), array( 'tag' ) ),
219 'get(): merging setting on an existing wiki (3) (with tag)'
220 );
221 $this->assertEquals(
222 array( 'wiki' => 'wiki' ) + $common,
223 $this->mConf->get( 'merge', 'wiki', 'wiki' ),
224 'get(): merging setting on an suffix'
225 );
226 $this->assertEquals(
227 array( 'wiki' => 'wiki' ) + $commonTag,
228 $this->mConf->get( 'merge', 'wiki', 'wiki', array(), array( 'tag' ) ),
229 'get(): merging setting on an suffix (with tag)'
230 );
231 $this->assertEquals(
232 $common,
233 $this->mConf->get( 'merge', 'eswiki', 'wiki' ),
234 'get(): merging setting on an non-existing wiki'
235 );
236 $this->assertEquals(
237 $commonTag,
238 $this->mConf->get( 'merge', 'eswiki', 'wiki', array(), array( 'tag' ) ),
239 'get(): merging setting on an non-existing wiki (with tag)'
240 );
241 }
242
243 function testSiteFromDbWithCallback() {
244 $this->mConf->siteParamsCallback = 'getSiteParams';
245
246 $this->assertEquals(
247 array( 'wiki', 'en' ),
248 $this->mConf->siteFromDB( 'enwiki' ),
249 'siteFromDB() with callback'
250 );
251 $this->assertEquals(
252 array( 'wiki', '' ),
253 $this->mConf->siteFromDB( 'wiki' ),
254 'siteFromDB() with callback on a suffix'
255 );
256 $this->assertEquals(
257 array( null, null ),
258 $this->mConf->siteFromDB( 'wikien' ),
259 'siteFromDB() with callback on a non-existing wiki'
260 );
261 }
262
263 function testParameterReplacement() {
264 $this->mConf->siteParamsCallback = 'getSiteParams';
265
266 $this->assertEquals(
267 'en wiki enwiki',
268 $this->mConf->get( 'params', 'enwiki', 'wiki' ),
269 'get(): parameter replacement on an existing wiki'
270 );
271 $this->assertEquals(
272 'de wiki dewiki',
273 $this->mConf->get( 'params', 'dewiki', 'wiki' ),
274 'get(): parameter replacement on an existing wiki (2)'
275 );
276 $this->assertEquals(
277 'fr wiki frwiki',
278 $this->mConf->get( 'params', 'frwiki', 'wiki' ),
279 'get(): parameter replacement on an existing wiki (3)'
280 );
281 $this->assertEquals(
282 ' wiki wiki',
283 $this->mConf->get( 'params', 'wiki', 'wiki' ),
284 'get(): parameter replacement on an suffix'
285 );
286 $this->assertEquals(
287 'es wiki eswiki',
288 $this->mConf->get( 'params', 'eswiki', 'wiki' ),
289 'get(): parameter replacement on an non-existing wiki'
290 );
291 }
292
293 function testGetAllGlobals() {
294 $this->mConf->siteParamsCallback = 'getSiteParams';
295
296 $getall = array(
297 'simple' => 'enwiki',
298 'fallback' => 'tag',
299 'params' => 'en wiki enwiki',
300 'global' => array( 'enwiki' => 'enwiki' ) + $GLOBALS['global'],
301 'merge' => array( 'enwiki' => 'enwiki', 'tag' => 'tag', 'wiki' => 'wiki', 'default' => 'default' ),
302 );
303 $this->assertEquals( $getall, $this->mConf->getAll( 'enwiki' ), 'getAll()' );
304
305 $this->mConf->extractAllGlobals( 'enwiki', 'wiki' );
306
307 $this->assertEquals( $getall['simple'], $GLOBALS['simple'], 'extractAllGlobals(): simple setting' );
308 $this->assertEquals( $getall['fallback'], $GLOBALS['fallback'], 'extractAllGlobals(): fallback setting' );
309 $this->assertEquals( $getall['params'], $GLOBALS['params'], 'extractAllGlobals(): parameter replacement' );
310 $this->assertEquals( $getall['global'], $GLOBALS['global'], 'extractAllGlobals(): merging with global' );
311 $this->assertEquals( $getall['merge'], $GLOBALS['merge'], 'extractAllGlobals(): merging setting' );
312 }
313 }