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