MediaWiki  REL1_24
LanguageConverterTest.php
Go to the documentation of this file.
00001 <?php
00002 
00003 class LanguageConverterTest extends MediaWikiLangTestCase {
00005     protected $lang = null;
00007     protected $lc = null;
00008 
00009     protected function setUp() {
00010         parent::setUp();
00011 
00012         $this->setMwGlobals( array(
00013             'wgContLang' => Language::factory( 'tg' ),
00014             'wgLanguageCode' => 'tg',
00015             'wgDefaultLanguageVariant' => false,
00016             'wgMemc' => new EmptyBagOStuff,
00017             'wgRequest' => new FauxRequest( array() ),
00018             'wgUser' => new User,
00019         ) );
00020 
00021         $this->lang = new LanguageToTest();
00022         $this->lc = new TestConverter(
00023             $this->lang, 'tg',
00024             array( 'tg', 'tg-latn' )
00025         );
00026     }
00027 
00028     protected function tearDown() {
00029         unset( $this->lc );
00030         unset( $this->lang );
00031 
00032         parent::tearDown();
00033     }
00034 
00038     public function testGetPreferredVariantDefaults() {
00039         $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
00040     }
00041 
00046     public function testGetPreferredVariantHeaders() {
00047         global $wgRequest;
00048         $wgRequest->setHeader( 'Accept-Language', 'tg-latn' );
00049 
00050         $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
00051     }
00052 
00057     public function testGetPreferredVariantHeaderWeight() {
00058         global $wgRequest;
00059         $wgRequest->setHeader( 'Accept-Language', 'tg;q=1' );
00060 
00061         $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
00062     }
00063 
00068     public function testGetPreferredVariantHeaderWeight2() {
00069         global $wgRequest;
00070         $wgRequest->setHeader( 'Accept-Language', 'tg-latn;q=1' );
00071 
00072         $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
00073     }
00074 
00079     public function testGetPreferredVariantHeaderMulti() {
00080         global $wgRequest;
00081         $wgRequest->setHeader( 'Accept-Language', 'en, tg-latn;q=1' );
00082 
00083         $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
00084     }
00085 
00089     public function testGetPreferredVariantUserOption() {
00090         global $wgUser;
00091 
00092         $wgUser = new User;
00093         $wgUser->load(); // from 'defaults'
00094         $wgUser->mId = 1;
00095         $wgUser->mDataLoaded = true;
00096         $wgUser->mOptionsLoaded = true;
00097         $wgUser->setOption( 'variant', 'tg-latn' );
00098 
00099         $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
00100     }
00101 
00106     public function testGetPreferredVariantUserOptionForForeignLanguage() {
00107         global $wgContLang, $wgUser;
00108 
00109         $wgContLang = Language::factory( 'en' );
00110         $wgUser = new User;
00111         $wgUser->load(); // from 'defaults'
00112         $wgUser->mId = 1;
00113         $wgUser->mDataLoaded = true;
00114         $wgUser->mOptionsLoaded = true;
00115         $wgUser->setOption( 'variant-tg', 'tg-latn' );
00116 
00117         $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
00118     }
00119 
00125     public function testGetPreferredVariantHeaderUserVsUrl() {
00126         global $wgContLang, $wgRequest, $wgUser;
00127 
00128         $wgContLang = Language::factory( 'tg-latn' );
00129         $wgRequest->setVal( 'variant', 'tg' );
00130         $wgUser = User::newFromId( "admin" );
00131         $wgUser->setId( 1 );
00132         $wgUser->mFrom = 'defaults';
00133         $wgUser->mOptionsLoaded = true;
00134         // The user's data is ignored because the variant is set in the URL.
00135         $wgUser->setOption( 'variant', 'tg-latn' );
00136         $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
00137     }
00138 
00142     public function testGetPreferredVariantDefaultLanguageVariant() {
00143         global $wgDefaultLanguageVariant;
00144 
00145         $wgDefaultLanguageVariant = 'tg-latn';
00146         $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
00147     }
00148 
00153     public function testGetPreferredVariantDefaultLanguageVsUrlVariant() {
00154         global $wgDefaultLanguageVariant, $wgRequest, $wgContLang;
00155 
00156         $wgContLang = Language::factory( 'tg-latn' );
00157         $wgDefaultLanguageVariant = 'tg';
00158         $wgRequest->setVal( 'variant', null );
00159         $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
00160     }
00161 }
00162 
00166 class TestConverter extends LanguageConverter {
00167     private $table = array(
00168         'б' => 'b',
00169         'в' => 'v',
00170         'г' => 'g',
00171     );
00172 
00173     function loadDefaultTables() {
00174         $this->mTables = array(
00175             'tg-latn' => new ReplacementArray( $this->table ),
00176             'tg' => new ReplacementArray()
00177         );
00178     }
00179 }
00180 
00181 class LanguageToTest extends Language {
00182     function __construct() {
00183         parent::__construct();
00184         $variants = array( 'tg', 'tg-latn' );
00185         $this->mConverter = new TestConverter( $this, 'tg', $variants );
00186     }
00187 }