Merge "Use the request object provided in User::setCookies"
[lhc/web/wiklou.git] / tests / phpunit / languages / LanguageConverterTest.php
1 <?php
2
3 class LanguageConverterTest extends MediaWikiLangTestCase {
4 /** @var LanguageToTest */
5 protected $lang = null;
6 /** @var TestConverter */
7 protected $lc = null;
8
9 protected function setUp() {
10 parent::setUp();
11
12 $this->setMwGlobals( array(
13 'wgContLang' => Language::factory( 'tg' ),
14 'wgLanguageCode' => 'tg',
15 'wgDefaultLanguageVariant' => false,
16 'wgMemc' => new EmptyBagOStuff,
17 'wgRequest' => new FauxRequest( array() ),
18 'wgUser' => new User,
19 ) );
20
21 $this->lang = new LanguageToTest();
22 $this->lc = new TestConverter(
23 $this->lang, 'tg',
24 array( 'tg', 'tg-latn' )
25 );
26 }
27
28 protected function tearDown() {
29 unset( $this->lc );
30 unset( $this->lang );
31
32 parent::tearDown();
33 }
34
35 /**
36 * @covers LanguageConverter::getPreferredVariant
37 */
38 public function testGetPreferredVariantDefaults() {
39 $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
40 }
41
42 /**
43 * @covers LanguageConverter::getPreferredVariant
44 * @covers LanguageConverter::getHeaderVariant
45 */
46 public function testGetPreferredVariantHeaders() {
47 global $wgRequest;
48 $wgRequest->setHeader( 'Accept-Language', 'tg-latn' );
49
50 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
51 }
52
53 /**
54 * @covers LanguageConverter::getPreferredVariant
55 * @covers LanguageConverter::getHeaderVariant
56 */
57 public function testGetPreferredVariantHeaderWeight() {
58 global $wgRequest;
59 $wgRequest->setHeader( 'Accept-Language', 'tg;q=1' );
60
61 $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
62 }
63
64 /**
65 * @covers LanguageConverter::getPreferredVariant
66 * @covers LanguageConverter::getHeaderVariant
67 */
68 public function testGetPreferredVariantHeaderWeight2() {
69 global $wgRequest;
70 $wgRequest->setHeader( 'Accept-Language', 'tg-latn;q=1' );
71
72 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
73 }
74
75 /**
76 * @covers LanguageConverter::getPreferredVariant
77 * @covers LanguageConverter::getHeaderVariant
78 */
79 public function testGetPreferredVariantHeaderMulti() {
80 global $wgRequest;
81 $wgRequest->setHeader( 'Accept-Language', 'en, tg-latn;q=1' );
82
83 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
84 }
85
86 /**
87 * @covers LanguageConverter::getPreferredVariant
88 */
89 public function testGetPreferredVariantUserOption() {
90 global $wgUser;
91
92 $wgUser = new User;
93 $wgUser->load(); // from 'defaults'
94 $wgUser->mId = 1;
95 $wgUser->mDataLoaded = true;
96 $wgUser->mOptionsLoaded = true;
97 $wgUser->setOption( 'variant', 'tg-latn' );
98
99 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
100 }
101
102 /**
103 * @covers LanguageConverter::getPreferredVariant
104 * @covers LanguageConverter::getUserVariant
105 */
106 public function testGetPreferredVariantUserOptionForForeignLanguage() {
107 global $wgContLang, $wgUser;
108
109 $wgContLang = Language::factory( 'en' );
110 $wgUser = new User;
111 $wgUser->load(); // from 'defaults'
112 $wgUser->mId = 1;
113 $wgUser->mDataLoaded = true;
114 $wgUser->mOptionsLoaded = true;
115 $wgUser->setOption( 'variant-tg', 'tg-latn' );
116
117 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
118 }
119
120 /**
121 * @covers LanguageConverter::getPreferredVariant
122 * @covers LanguageConverter::getUserVariant
123 * @covers LanguageConverter::getURLVariant
124 */
125 public function testGetPreferredVariantHeaderUserVsUrl() {
126 global $wgContLang, $wgRequest, $wgUser;
127
128 $wgContLang = Language::factory( 'tg-latn' );
129 $wgRequest->setVal( 'variant', 'tg' );
130 $wgUser = User::newFromId( "admin" );
131 $wgUser->setId( 1 );
132 $wgUser->mFrom = 'defaults';
133 $wgUser->mOptionsLoaded = true;
134 // The user's data is ignored because the variant is set in the URL.
135 $wgUser->setOption( 'variant', 'tg-latn' );
136 $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
137 }
138
139 /**
140 * @covers LanguageConverter::getPreferredVariant
141 */
142 public function testGetPreferredVariantDefaultLanguageVariant() {
143 global $wgDefaultLanguageVariant;
144
145 $wgDefaultLanguageVariant = 'tg-latn';
146 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
147 }
148
149 /**
150 * @covers LanguageConverter::getPreferredVariant
151 * @covers LanguageConverter::getURLVariant
152 */
153 public function testGetPreferredVariantDefaultLanguageVsUrlVariant() {
154 global $wgDefaultLanguageVariant, $wgRequest, $wgContLang;
155
156 $wgContLang = Language::factory( 'tg-latn' );
157 $wgDefaultLanguageVariant = 'tg';
158 $wgRequest->setVal( 'variant', null );
159 $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
160 }
161 }
162
163 /**
164 * Test converter (from Tajiki to latin orthography)
165 */
166 class TestConverter extends LanguageConverter {
167 private $table = array(
168 'б' => 'b',
169 'в' => 'v',
170 'г' => 'g',
171 );
172
173 function loadDefaultTables() {
174 $this->mTables = array(
175 'tg-latn' => new ReplacementArray( $this->table ),
176 'tg' => new ReplacementArray()
177 );
178 }
179 }
180
181 class LanguageToTest extends Language {
182 function __construct() {
183 parent::__construct();
184 $variants = array( 'tg', 'tg-latn' );
185 $this->mConverter = new TestConverter( $this, 'tg', $variants );
186 }
187 }