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