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