MediaWiki  REL1_21
LanguageConverterTest.php
Go to the documentation of this file.
00001 <?php
00002 
00003 class LanguageConverterTest extends MediaWikiLangTestCase {
00004         protected $lang = null;
00005         protected $lc = null;
00006 
00007         protected function setUp() {
00008                 parent::setUp();
00009 
00010                 $this->setMwGlobals( array(
00011                         'wgContLang' => Language::factory( 'tg' ),
00012                         'wgLanguageCode' => 'tg',
00013                         'wgDefaultLanguageVariant' => false,
00014                         'wgMemc' => new EmptyBagOStuff,
00015                         'wgRequest' => new FauxRequest( array() ),
00016                         'wgUser' => new User,
00017                 ) );
00018 
00019                 $this->lang = new LanguageToTest();
00020                 $this->lc = new TestConverter(
00021                         $this->lang, 'tg',
00022                         array( 'tg', 'tg-latn' )
00023                 );
00024         }
00025 
00026         protected function tearDown() {
00027                 unset( $this->lc );
00028                 unset( $this->lang );
00029 
00030                 parent::tearDown();
00031         }
00032 
00033         function testGetPreferredVariantDefaults() {
00034                 $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
00035         }
00036 
00037         function testGetPreferredVariantHeaders() {
00038                 global $wgRequest;
00039                 $wgRequest->setHeader( 'Accept-Language', 'tg-latn' );
00040 
00041                 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
00042         }
00043 
00044         function testGetPreferredVariantHeaderWeight() {
00045                 global $wgRequest;
00046                 $wgRequest->setHeader( 'Accept-Language', 'tg;q=1' );
00047 
00048                 $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
00049         }
00050 
00051         function testGetPreferredVariantHeaderWeight2() {
00052                 global $wgRequest;
00053                 $wgRequest->setHeader( 'Accept-Language', 'tg-latn;q=1' );
00054 
00055                 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
00056         }
00057 
00058         function testGetPreferredVariantHeaderMulti() {
00059                 global $wgRequest;
00060                 $wgRequest->setHeader( 'Accept-Language', 'en, tg-latn;q=1' );
00061 
00062                 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
00063         }
00064 
00065         function testGetPreferredVariantUserOption() {
00066                 global $wgUser;
00067 
00068                 $wgUser = new User;
00069                 $wgUser->load(); // from 'defaults'
00070                 $wgUser->mId = 1;
00071                 $wgUser->mDataLoaded = true;
00072                 $wgUser->mOptionsLoaded = true;
00073                 $wgUser->setOption( 'variant', 'tg-latn' );
00074 
00075                 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
00076         }
00077 
00078         function testGetPreferredVariantHeaderUserVsUrl() {
00079                 global $wgContLang, $wgRequest, $wgUser;
00080 
00081                 $wgContLang = Language::factory( 'tg-latn' );
00082                 $wgRequest->setVal( 'variant', 'tg' );
00083                 $wgUser = User::newFromId( "admin" );
00084                 $wgUser->setId( 1 );
00085                 $wgUser->mFrom = 'defaults';
00086                 $wgUser->mOptionsLoaded = true;
00087                 // The user's data is ignored because the variant is set in the URL.
00088                 $wgUser->setOption( 'variant', 'tg-latn' ); 
00089                 $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
00090         }
00091 
00092 
00093         function testGetPreferredVariantDefaultLanguageVariant() {
00094                 global $wgDefaultLanguageVariant;
00095 
00096                 $wgDefaultLanguageVariant = 'tg-latn';
00097                 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
00098         }
00099 
00100         function testGetPreferredVariantDefaultLanguageVsUrlVariant() {
00101                 global $wgDefaultLanguageVariant, $wgRequest, $wgContLang;
00102 
00103                 $wgContLang = Language::factory( 'tg-latn' );
00104                 $wgDefaultLanguageVariant = 'tg';
00105                 $wgRequest->setVal( 'variant', null );
00106                 $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
00107         }
00108 }
00109 
00113 class TestConverter extends LanguageConverter {
00114         private $table = array(
00115                 'б' => 'b',
00116                 'в' => 'v',
00117                 'г' => 'g',
00118         );
00119 
00120         function loadDefaultTables() {
00121                 $this->mTables = array(
00122                         'tg-latn' => new ReplacementArray( $this->table ),
00123                         'tg' => new ReplacementArray()
00124                 );
00125         }
00126 
00127 }
00128 
00129 class LanguageToTest extends Language {
00130         function __construct() {
00131                 parent::__construct();
00132                 $variants = array( 'tg', 'tg-latn' );
00133                 $this->mConverter = new TestConverter( $this, 'tg', $variants );
00134         }
00135 }