MediaWiki  REL1_24
SiteConfigurationTest.php
Go to the documentation of this file.
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 }