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