Merge "API: Handle "special" options in action=options"
[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
28 /**
29 * @var SiteConfiguration
30 */
31 protected $mConf;
32
33 protected function setUp() {
34 parent::setUp();
35
36 $this->mConf = new SiteConfiguration;
37
38 $this->mConf->suffixes = array( 'wikipedia' => 'wiki' );
39 $this->mConf->wikis = array( 'enwiki', 'dewiki', 'frwiki' );
40 $this->mConf->settings = array(
41 'simple' => array(
42 'wiki' => 'wiki',
43 'tag' => 'tag',
44 'enwiki' => 'enwiki',
45 'dewiki' => 'dewiki',
46 'frwiki' => 'frwiki',
47 ),
48
49 'fallback' => array(
50 'default' => 'default',
51 'wiki' => 'wiki',
52 'tag' => 'tag',
53 ),
54
55 'params' => array(
56 'default' => '$lang $site $wiki',
57 ),
58
59 '+global' => array(
60 'wiki' => array(
61 'wiki' => 'wiki',
62 ),
63 'tag' => array(
64 'tag' => 'tag',
65 ),
66 'enwiki' => array(
67 'enwiki' => 'enwiki',
68 ),
69 'dewiki' => array(
70 'dewiki' => 'dewiki',
71 ),
72 'frwiki' => array(
73 'frwiki' => 'frwiki',
74 ),
75 ),
76
77 'merge' => array(
78 '+wiki' => array(
79 'wiki' => 'wiki',
80 ),
81 '+tag' => array(
82 'tag' => 'tag',
83 ),
84 'default' => array(
85 'default' => 'default',
86 ),
87 '+enwiki' => array(
88 'enwiki' => 'enwiki',
89 ),
90 '+dewiki' => array(
91 'dewiki' => 'dewiki',
92 ),
93 '+frwiki' => array(
94 'frwiki' => 'frwiki',
95 ),
96 ),
97 );
98
99 $GLOBALS['global'] = array( 'global' => 'global' );
100 }
101
102 /**
103 * @covers SiteConfiguration::siteFromDB
104 */
105 public function testSiteFromDb() {
106 $this->assertEquals(
107 array( 'wikipedia', 'en' ),
108 $this->mConf->siteFromDB( 'enwiki' ),
109 'siteFromDB()'
110 );
111 $this->assertEquals(
112 array( 'wikipedia', '' ),
113 $this->mConf->siteFromDB( 'wiki' ),
114 'siteFromDB() on a suffix'
115 );
116 $this->assertEquals(
117 array( null, null ),
118 $this->mConf->siteFromDB( 'wikien' ),
119 'siteFromDB() on a non-existing wiki'
120 );
121
122 $this->mConf->suffixes = array( 'wiki', '' );
123 $this->assertEquals(
124 array( '', 'wikien' ),
125 $this->mConf->siteFromDB( 'wikien' ),
126 'siteFromDB() on a non-existing wiki (2)'
127 );
128 }
129
130 /**
131 * @covers SiteConfiguration::getLocalDatabases
132 */
133 public function testGetLocalDatabases() {
134 $this->assertEquals(
135 array( 'enwiki', 'dewiki', 'frwiki' ),
136 $this->mConf->getLocalDatabases(),
137 'getLocalDatabases()'
138 );
139 }
140
141 /**
142 * @covers SiteConfiguration::get
143 */
144 public function testGetConfVariables() {
145 $this->assertEquals(
146 'enwiki',
147 $this->mConf->get( 'simple', 'enwiki', 'wiki' ),
148 'get(): simple setting on an existing wiki'
149 );
150 $this->assertEquals(
151 'dewiki',
152 $this->mConf->get( 'simple', 'dewiki', 'wiki' ),
153 'get(): simple setting on an existing wiki (2)'
154 );
155 $this->assertEquals(
156 'frwiki',
157 $this->mConf->get( 'simple', 'frwiki', 'wiki' ),
158 'get(): simple setting on an existing wiki (3)'
159 );
160 $this->assertEquals(
161 'wiki',
162 $this->mConf->get( 'simple', 'wiki', 'wiki' ),
163 'get(): simple setting on an suffix'
164 );
165 $this->assertEquals(
166 'wiki',
167 $this->mConf->get( 'simple', 'eswiki', 'wiki' ),
168 'get(): simple setting on an non-existing wiki'
169 );
170
171 $this->assertEquals(
172 'wiki',
173 $this->mConf->get( 'fallback', 'enwiki', 'wiki' ),
174 'get(): fallback setting on an existing wiki'
175 );
176 $this->assertEquals(
177 'tag',
178 $this->mConf->get( 'fallback', 'dewiki', 'wiki', array(), array( 'tag' ) ),
179 'get(): fallback setting on an existing wiki (with wiki tag)'
180 );
181 $this->assertEquals(
182 'wiki',
183 $this->mConf->get( 'fallback', 'wiki', 'wiki' ),
184 'get(): fallback setting on an suffix'
185 );
186 $this->assertEquals(
187 'wiki',
188 $this->mConf->get( 'fallback', 'wiki', 'wiki', array(), array( 'tag' ) ),
189 'get(): fallback setting on an suffix (with wiki tag)'
190 );
191 $this->assertEquals(
192 'wiki',
193 $this->mConf->get( 'fallback', 'eswiki', 'wiki' ),
194 'get(): fallback setting on an non-existing wiki'
195 );
196 $this->assertEquals(
197 'tag',
198 $this->mConf->get( 'fallback', 'eswiki', 'wiki', array(), array( 'tag' ) ),
199 'get(): fallback setting on an non-existing wiki (with wiki tag)'
200 );
201
202 $common = array( 'wiki' => 'wiki', 'default' => 'default' );
203 $commonTag = array( 'tag' => 'tag', 'wiki' => 'wiki', 'default' => 'default' );
204 $this->assertEquals(
205 array( 'enwiki' => 'enwiki' ) + $common,
206 $this->mConf->get( 'merge', 'enwiki', 'wiki' ),
207 'get(): merging setting on an existing wiki'
208 );
209 $this->assertEquals(
210 array( 'enwiki' => 'enwiki' ) + $commonTag,
211 $this->mConf->get( 'merge', 'enwiki', 'wiki', array(), array( 'tag' ) ),
212 'get(): merging setting on an existing wiki (with tag)'
213 );
214 $this->assertEquals(
215 array( 'dewiki' => 'dewiki' ) + $common,
216 $this->mConf->get( 'merge', 'dewiki', 'wiki' ),
217 'get(): merging setting on an existing wiki (2)'
218 );
219 $this->assertEquals(
220 array( 'dewiki' => 'dewiki' ) + $commonTag,
221 $this->mConf->get( 'merge', 'dewiki', 'wiki', array(), array( 'tag' ) ),
222 'get(): merging setting on an existing wiki (2) (with tag)'
223 );
224 $this->assertEquals(
225 array( 'frwiki' => 'frwiki' ) + $common,
226 $this->mConf->get( 'merge', 'frwiki', 'wiki' ),
227 'get(): merging setting on an existing wiki (3)'
228 );
229 $this->assertEquals(
230 array( 'frwiki' => 'frwiki' ) + $commonTag,
231 $this->mConf->get( 'merge', 'frwiki', 'wiki', array(), array( 'tag' ) ),
232 'get(): merging setting on an existing wiki (3) (with tag)'
233 );
234 $this->assertEquals(
235 array( 'wiki' => 'wiki' ) + $common,
236 $this->mConf->get( 'merge', 'wiki', 'wiki' ),
237 'get(): merging setting on an suffix'
238 );
239 $this->assertEquals(
240 array( 'wiki' => 'wiki' ) + $commonTag,
241 $this->mConf->get( 'merge', 'wiki', 'wiki', array(), array( 'tag' ) ),
242 'get(): merging setting on an suffix (with tag)'
243 );
244 $this->assertEquals(
245 $common,
246 $this->mConf->get( 'merge', 'eswiki', 'wiki' ),
247 'get(): merging setting on an non-existing wiki'
248 );
249 $this->assertEquals(
250 $commonTag,
251 $this->mConf->get( 'merge', 'eswiki', 'wiki', array(), array( 'tag' ) ),
252 'get(): merging setting on an non-existing wiki (with tag)'
253 );
254 }
255
256 /**
257 * @covers SiteConfiguration::siteFromDB
258 */
259 public function testSiteFromDbWithCallback() {
260 $this->mConf->siteParamsCallback = 'getSiteParams';
261
262 $this->assertEquals(
263 array( 'wiki', 'en' ),
264 $this->mConf->siteFromDB( 'enwiki' ),
265 'siteFromDB() with callback'
266 );
267 $this->assertEquals(
268 array( 'wiki', '' ),
269 $this->mConf->siteFromDB( 'wiki' ),
270 'siteFromDB() with callback on a suffix'
271 );
272 $this->assertEquals(
273 array( null, null ),
274 $this->mConf->siteFromDB( 'wikien' ),
275 'siteFromDB() with callback on a non-existing wiki'
276 );
277 }
278
279 /**
280 * @covers SiteConfiguration::get
281 */
282 public function testParameterReplacement() {
283 $this->mConf->siteParamsCallback = 'getSiteParams';
284
285 $this->assertEquals(
286 'en wiki enwiki',
287 $this->mConf->get( 'params', 'enwiki', 'wiki' ),
288 'get(): parameter replacement on an existing wiki'
289 );
290 $this->assertEquals(
291 'de wiki dewiki',
292 $this->mConf->get( 'params', 'dewiki', 'wiki' ),
293 'get(): parameter replacement on an existing wiki (2)'
294 );
295 $this->assertEquals(
296 'fr wiki frwiki',
297 $this->mConf->get( 'params', 'frwiki', 'wiki' ),
298 'get(): parameter replacement on an existing wiki (3)'
299 );
300 $this->assertEquals(
301 ' wiki wiki',
302 $this->mConf->get( 'params', 'wiki', 'wiki' ),
303 'get(): parameter replacement on an suffix'
304 );
305 $this->assertEquals(
306 'es wiki eswiki',
307 $this->mConf->get( 'params', 'eswiki', 'wiki' ),
308 'get(): parameter replacement on an non-existing wiki'
309 );
310 }
311
312 /**
313 * @covers SiteConfiguration::getAll
314 */
315 public function testGetAllGlobals() {
316 $this->mConf->siteParamsCallback = 'getSiteParams';
317
318 $getall = array(
319 'simple' => 'enwiki',
320 'fallback' => 'tag',
321 'params' => 'en wiki enwiki',
322 'global' => array( 'enwiki' => 'enwiki' ) + $GLOBALS['global'],
323 'merge' => array( 'enwiki' => 'enwiki', 'tag' => 'tag', 'wiki' => 'wiki', 'default' => 'default' ),
324 );
325 $this->assertEquals( $getall, $this->mConf->getAll( 'enwiki' ), 'getAll()' );
326
327 $this->mConf->extractAllGlobals( 'enwiki', 'wiki' );
328
329 $this->assertEquals( $getall['simple'], $GLOBALS['simple'], 'extractAllGlobals(): simple setting' );
330 $this->assertEquals( $getall['fallback'], $GLOBALS['fallback'], 'extractAllGlobals(): fallback setting' );
331 $this->assertEquals( $getall['params'], $GLOBALS['params'], 'extractAllGlobals(): parameter replacement' );
332 $this->assertEquals( $getall['global'], $GLOBALS['global'], 'extractAllGlobals(): merging with global' );
333 $this->assertEquals( $getall['merge'], $GLOBALS['merge'], 'extractAllGlobals(): merging setting' );
334 }
335 }