MediaWiki
REL1_24
|
00001 <?php 00002 00003 class SiteConfigurationTest extends MediaWikiTestCase { 00004 00008 protected $mConf; 00009 00010 protected function setUp() { 00011 parent::setUp(); 00012 00013 $this->mConf = new SiteConfiguration; 00014 00015 $this->mConf->suffixes = array( 'wikipedia' => 'wiki' ); 00016 $this->mConf->wikis = array( 'enwiki', 'dewiki', 'frwiki' ); 00017 $this->mConf->settings = array( 00018 'simple' => array( 00019 'wiki' => 'wiki', 00020 'tag' => 'tag', 00021 'enwiki' => 'enwiki', 00022 'dewiki' => 'dewiki', 00023 'frwiki' => 'frwiki', 00024 ), 00025 00026 'fallback' => array( 00027 'default' => 'default', 00028 'wiki' => 'wiki', 00029 'tag' => 'tag', 00030 ), 00031 00032 'params' => array( 00033 'default' => '$lang $site $wiki', 00034 ), 00035 00036 '+global' => array( 00037 'wiki' => array( 00038 'wiki' => 'wiki', 00039 ), 00040 'tag' => array( 00041 'tag' => 'tag', 00042 ), 00043 'enwiki' => array( 00044 'enwiki' => 'enwiki', 00045 ), 00046 'dewiki' => array( 00047 'dewiki' => 'dewiki', 00048 ), 00049 'frwiki' => array( 00050 'frwiki' => 'frwiki', 00051 ), 00052 ), 00053 00054 'merge' => array( 00055 '+wiki' => array( 00056 'wiki' => 'wiki', 00057 ), 00058 '+tag' => array( 00059 'tag' => 'tag', 00060 ), 00061 'default' => array( 00062 'default' => 'default', 00063 ), 00064 '+enwiki' => array( 00065 'enwiki' => 'enwiki', 00066 ), 00067 '+dewiki' => array( 00068 'dewiki' => 'dewiki', 00069 ), 00070 '+frwiki' => array( 00071 'frwiki' => 'frwiki', 00072 ), 00073 ), 00074 ); 00075 00076 $GLOBALS['global'] = array( 'global' => 'global' ); 00077 } 00078 00082 public static function getSiteParamsCallback( $conf, $wiki ) { 00083 $site = null; 00084 $lang = null; 00085 foreach ( $conf->suffixes as $suffix ) { 00086 if ( substr( $wiki, -strlen( $suffix ) ) == $suffix ) { 00087 $site = $suffix; 00088 $lang = substr( $wiki, 0, -strlen( $suffix ) ); 00089 break; 00090 } 00091 } 00092 00093 return array( 00094 'suffix' => $site, 00095 'lang' => $lang, 00096 'params' => array( 00097 'lang' => $lang, 00098 'site' => $site, 00099 'wiki' => $wiki, 00100 ), 00101 'tags' => array( 'tag' ), 00102 ); 00103 } 00104 00108 public function testSiteFromDb() { 00109 $this->assertEquals( 00110 array( 'wikipedia', 'en' ), 00111 $this->mConf->siteFromDB( 'enwiki' ), 00112 'siteFromDB()' 00113 ); 00114 $this->assertEquals( 00115 array( 'wikipedia', '' ), 00116 $this->mConf->siteFromDB( 'wiki' ), 00117 'siteFromDB() on a suffix' 00118 ); 00119 $this->assertEquals( 00120 array( null, null ), 00121 $this->mConf->siteFromDB( 'wikien' ), 00122 'siteFromDB() on a non-existing wiki' 00123 ); 00124 00125 $this->mConf->suffixes = array( 'wiki', '' ); 00126 $this->assertEquals( 00127 array( '', 'wikien' ), 00128 $this->mConf->siteFromDB( 'wikien' ), 00129 'siteFromDB() on a non-existing wiki (2)' 00130 ); 00131 } 00132 00136 public function testGetLocalDatabases() { 00137 $this->assertEquals( 00138 array( 'enwiki', 'dewiki', 'frwiki' ), 00139 $this->mConf->getLocalDatabases(), 00140 'getLocalDatabases()' 00141 ); 00142 } 00143 00147 public function testGetConfVariables() { 00148 $this->assertEquals( 00149 'enwiki', 00150 $this->mConf->get( 'simple', 'enwiki', 'wiki' ), 00151 'get(): simple setting on an existing wiki' 00152 ); 00153 $this->assertEquals( 00154 'dewiki', 00155 $this->mConf->get( 'simple', 'dewiki', 'wiki' ), 00156 'get(): simple setting on an existing wiki (2)' 00157 ); 00158 $this->assertEquals( 00159 'frwiki', 00160 $this->mConf->get( 'simple', 'frwiki', 'wiki' ), 00161 'get(): simple setting on an existing wiki (3)' 00162 ); 00163 $this->assertEquals( 00164 'wiki', 00165 $this->mConf->get( 'simple', 'wiki', 'wiki' ), 00166 'get(): simple setting on an suffix' 00167 ); 00168 $this->assertEquals( 00169 'wiki', 00170 $this->mConf->get( 'simple', 'eswiki', 'wiki' ), 00171 'get(): simple setting on an non-existing wiki' 00172 ); 00173 00174 $this->assertEquals( 00175 'wiki', 00176 $this->mConf->get( 'fallback', 'enwiki', 'wiki' ), 00177 'get(): fallback setting on an existing wiki' 00178 ); 00179 $this->assertEquals( 00180 'tag', 00181 $this->mConf->get( 'fallback', 'dewiki', 'wiki', array(), array( 'tag' ) ), 00182 'get(): fallback setting on an existing wiki (with wiki tag)' 00183 ); 00184 $this->assertEquals( 00185 'wiki', 00186 $this->mConf->get( 'fallback', 'wiki', 'wiki' ), 00187 'get(): fallback setting on an suffix' 00188 ); 00189 $this->assertEquals( 00190 'wiki', 00191 $this->mConf->get( 'fallback', 'wiki', 'wiki', array(), array( 'tag' ) ), 00192 'get(): fallback setting on an suffix (with wiki tag)' 00193 ); 00194 $this->assertEquals( 00195 'wiki', 00196 $this->mConf->get( 'fallback', 'eswiki', 'wiki' ), 00197 'get(): fallback setting on an non-existing wiki' 00198 ); 00199 $this->assertEquals( 00200 'tag', 00201 $this->mConf->get( 'fallback', 'eswiki', 'wiki', array(), array( 'tag' ) ), 00202 'get(): fallback setting on an non-existing wiki (with wiki tag)' 00203 ); 00204 00205 $common = array( 'wiki' => 'wiki', 'default' => 'default' ); 00206 $commonTag = array( 'tag' => 'tag', 'wiki' => 'wiki', 'default' => 'default' ); 00207 $this->assertEquals( 00208 array( 'enwiki' => 'enwiki' ) + $common, 00209 $this->mConf->get( 'merge', 'enwiki', 'wiki' ), 00210 'get(): merging setting on an existing wiki' 00211 ); 00212 $this->assertEquals( 00213 array( 'enwiki' => 'enwiki' ) + $commonTag, 00214 $this->mConf->get( 'merge', 'enwiki', 'wiki', array(), array( 'tag' ) ), 00215 'get(): merging setting on an existing wiki (with tag)' 00216 ); 00217 $this->assertEquals( 00218 array( 'dewiki' => 'dewiki' ) + $common, 00219 $this->mConf->get( 'merge', 'dewiki', 'wiki' ), 00220 'get(): merging setting on an existing wiki (2)' 00221 ); 00222 $this->assertEquals( 00223 array( 'dewiki' => 'dewiki' ) + $commonTag, 00224 $this->mConf->get( 'merge', 'dewiki', 'wiki', array(), array( 'tag' ) ), 00225 'get(): merging setting on an existing wiki (2) (with tag)' 00226 ); 00227 $this->assertEquals( 00228 array( 'frwiki' => 'frwiki' ) + $common, 00229 $this->mConf->get( 'merge', 'frwiki', 'wiki' ), 00230 'get(): merging setting on an existing wiki (3)' 00231 ); 00232 $this->assertEquals( 00233 array( 'frwiki' => 'frwiki' ) + $commonTag, 00234 $this->mConf->get( 'merge', 'frwiki', 'wiki', array(), array( 'tag' ) ), 00235 'get(): merging setting on an existing wiki (3) (with tag)' 00236 ); 00237 $this->assertEquals( 00238 array( 'wiki' => 'wiki' ) + $common, 00239 $this->mConf->get( 'merge', 'wiki', 'wiki' ), 00240 'get(): merging setting on an suffix' 00241 ); 00242 $this->assertEquals( 00243 array( 'wiki' => 'wiki' ) + $commonTag, 00244 $this->mConf->get( 'merge', 'wiki', 'wiki', array(), array( 'tag' ) ), 00245 'get(): merging setting on an suffix (with tag)' 00246 ); 00247 $this->assertEquals( 00248 $common, 00249 $this->mConf->get( 'merge', 'eswiki', 'wiki' ), 00250 'get(): merging setting on an non-existing wiki' 00251 ); 00252 $this->assertEquals( 00253 $commonTag, 00254 $this->mConf->get( 'merge', 'eswiki', 'wiki', array(), array( 'tag' ) ), 00255 'get(): merging setting on an non-existing wiki (with tag)' 00256 ); 00257 } 00258 00262 public function testSiteFromDbWithCallback() { 00263 $this->mConf->siteParamsCallback = 'SiteConfigurationTest::getSiteParamsCallback'; 00264 00265 $this->assertEquals( 00266 array( 'wiki', 'en' ), 00267 $this->mConf->siteFromDB( 'enwiki' ), 00268 'siteFromDB() with callback' 00269 ); 00270 $this->assertEquals( 00271 array( 'wiki', '' ), 00272 $this->mConf->siteFromDB( 'wiki' ), 00273 'siteFromDB() with callback on a suffix' 00274 ); 00275 $this->assertEquals( 00276 array( null, null ), 00277 $this->mConf->siteFromDB( 'wikien' ), 00278 'siteFromDB() with callback on a non-existing wiki' 00279 ); 00280 } 00281 00285 public function testParameterReplacement() { 00286 $this->mConf->siteParamsCallback = 'SiteConfigurationTest::getSiteParamsCallback'; 00287 00288 $this->assertEquals( 00289 'en wiki enwiki', 00290 $this->mConf->get( 'params', 'enwiki', 'wiki' ), 00291 'get(): parameter replacement on an existing wiki' 00292 ); 00293 $this->assertEquals( 00294 'de wiki dewiki', 00295 $this->mConf->get( 'params', 'dewiki', 'wiki' ), 00296 'get(): parameter replacement on an existing wiki (2)' 00297 ); 00298 $this->assertEquals( 00299 'fr wiki frwiki', 00300 $this->mConf->get( 'params', 'frwiki', 'wiki' ), 00301 'get(): parameter replacement on an existing wiki (3)' 00302 ); 00303 $this->assertEquals( 00304 ' wiki wiki', 00305 $this->mConf->get( 'params', 'wiki', 'wiki' ), 00306 'get(): parameter replacement on an suffix' 00307 ); 00308 $this->assertEquals( 00309 'es wiki eswiki', 00310 $this->mConf->get( 'params', 'eswiki', 'wiki' ), 00311 'get(): parameter replacement on an non-existing wiki' 00312 ); 00313 } 00314 00318 public function testGetAllGlobals() { 00319 $this->mConf->siteParamsCallback = 'SiteConfigurationTest::getSiteParamsCallback'; 00320 00321 $getall = array( 00322 'simple' => 'enwiki', 00323 'fallback' => 'tag', 00324 'params' => 'en wiki enwiki', 00325 'global' => array( 'enwiki' => 'enwiki' ) + $GLOBALS['global'], 00326 'merge' => array( 00327 'enwiki' => 'enwiki', 00328 'tag' => 'tag', 00329 'wiki' => 'wiki', 00330 'default' => 'default' 00331 ), 00332 ); 00333 $this->assertEquals( $getall, $this->mConf->getAll( 'enwiki' ), 'getAll()' ); 00334 00335 $this->mConf->extractAllGlobals( 'enwiki', 'wiki' ); 00336 00337 $this->assertEquals( 00338 $getall['simple'], 00339 $GLOBALS['simple'], 00340 'extractAllGlobals(): simple setting' 00341 ); 00342 $this->assertEquals( 00343 $getall['fallback'], 00344 $GLOBALS['fallback'], 00345 'extractAllGlobals(): fallback setting' 00346 ); 00347 $this->assertEquals( 00348 $getall['params'], 00349 $GLOBALS['params'], 00350 'extractAllGlobals(): parameter replacement' 00351 ); 00352 $this->assertEquals( 00353 $getall['global'], 00354 $GLOBALS['global'], 00355 'extractAllGlobals(): merging with global' 00356 ); 00357 $this->assertEquals( 00358 $getall['merge'], 00359 $GLOBALS['merge'], 00360 'extractAllGlobals(): merging setting' 00361 ); 00362 } 00363 }