00001 <?php
00002
00003 class LanguageConverterTest extends PHPUnit_Framework_TestCase {
00004 protected $lang = null;
00005 protected $lc = null;
00006
00007 function setUp() {
00008 global $wgMemc, $wgRequest, $wgUser, $wgContLang;
00009
00010 $wgUser = new User;
00011 $wgRequest = new FauxRequest(array());
00012 $wgMemc = new FakeMemCachedClient;
00013 $wgContLang = Language::factory( 'tg' );
00014 $this->lang = new LanguageTest();
00015 $this->lc = new TestConverter( $this->lang, 'tg',
00016 array( 'tg', 'tg-latn' ) );
00017 }
00018
00019 function tearDown() {
00020 global $wgMemc;
00021 unset($wgMemc);
00022 unset($this->lc);
00023 unset($this->lang);
00024 }
00025
00026 function testGetPreferredVariantDefaults() {
00027 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
00028 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, true));
00029 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, false));
00030 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true));
00031 }
00032
00033 function testGetPreferredVariantHeaders() {
00034 global $wgRequest;
00035 $wgRequest->setHeader('Accept-Language', 'tg-latn');
00036
00037 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
00038 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(false, true));
00039 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, false));
00040 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true));
00041 }
00042
00043 function testGetPreferredVariantHeaderWeight() {
00044 global $wgRequest;
00045 $wgRequest->setHeader('Accept-Language', 'tg;q=1');
00046
00047 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
00048 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, true));
00049 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, false));
00050 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true));
00051 }
00052
00053 function testGetPreferredVariantHeaderWeight2() {
00054 global $wgRequest;
00055 $wgRequest->setHeader('Accept-Language', 'tg-latn;q=1');
00056
00057 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
00058 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(false, true));
00059 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, false));
00060 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true));
00061 }
00062
00063 function testGetPreferredVariantHeaderMulti() {
00064 global $wgRequest;
00065 $wgRequest->setHeader('Accept-Language', 'en, tg-latn;q=1');
00066
00067 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
00068 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(false, true));
00069 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, false));
00070 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true));
00071 }
00072
00073 function testGetPreferredVariantUserOption() {
00074 global $wgUser;
00075
00076 $wgUser = new User;
00077 $wgUser->setId(1);
00078 $wgUser->setOption('variant', 'tg-latn');
00079
00080 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
00081 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, true));
00082 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, false));
00083 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, true));
00084 }
00085
00086 function testGetPreferredVariantHeaderUserVsUrl() {
00087 global $wgRequest, $wgUser, $wgContLang;
00088
00089 $wgContLang = Language::factory( 'tg-latn' );
00090 $wgRequest->setVal('variant', 'tg');
00091 $wgUser = User::newFromId("admin");
00092 $wgUser->setId(1);
00093 $wgUser->setOption('variant', 'tg-latn');
00094
00095 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, false));
00096 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true));
00097 }
00098
00099
00100 function testGetPreferredVariantDefaultLanguageVariant() {
00101 global $wgDefaultLanguageVariant;
00102
00103 $wgDefaultLanguageVariant = 'tg-latn';
00104 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(false, false));
00105 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(false, true));
00106 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, false));
00107 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, true));
00108 }
00109
00110 function testGetPreferredVariantDefaultLanguageVsUrlVariant() {
00111 global $wgDefaultLanguageVariant, $wgRequest, $wgContLang;
00112
00113 $wgContLang = Language::factory( 'tg-latn' );
00114 $wgDefaultLanguageVariant = 'tg';
00115 $wgRequest->setVal('variant', null);
00116 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
00117 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, true));
00118 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, false));
00119 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, true));
00120 }
00121 }
00122
00126 class TestConverter extends LanguageConverter {
00127 private $table = array(
00128 'б' => 'b',
00129 'в' => 'v',
00130 'г' => 'g',
00131 );
00132
00133 function loadDefaultTables() {
00134 $this->mTables = array(
00135 'tg-latn' => new ReplacementArray( $this->table ),
00136 'tg' => new ReplacementArray()
00137 );
00138 }
00139
00140 }
00141
00142 class LanguageTest extends Language {
00143 function __construct() {
00144 parent::__construct();
00145 $variants = array( 'tg', 'tg-latn' );
00146 $this->mConverter = new TestConverter( $this, 'tg', $variants );
00147 }
00148 }