MediaWiki  master
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                         '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 }