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