MediaWiki
REL1_24
|
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 }