Follow-up r61938: also port SearchUpdate test
[lhc/web/wiklou.git] / tests / LanguageConverterTest.php
1 <?php
2
3 require_once( 'ProxyTools.php' );
4
5 class LanguageConverterTest extends PHPUnit_Framework_TestCase {
6 protected $lang = null;
7 protected $lc = null;
8
9 function setUp() {
10 global $wgMemc, $wgRequest, $wgUser, $wgContLang;
11
12 $wgUser = new User;
13 $wgRequest = new FauxRequest(array());
14 $wgMemc = new FakeMemCachedClient;
15 $wgContLang = Language::factory( 'tg' );
16 $this->lang = new LanguageTest();
17 $this->lc = new TestConverter( $this->lang, 'tg',
18 array( 'tg', 'tg-latn' ) );
19 }
20
21 function tearDown() {
22 global $wgMemc;
23 unset($wgMemc);
24 unset($this->lc);
25 unset($this->lang);
26 }
27
28 function testGetPreferredVariantDefaults() {
29 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
30 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, true));
31 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, false));
32 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true));
33 }
34
35 function testGetPreferredVariantHeaders() {
36 global $wgRequest;
37 $wgRequest->setHeader('Accept-Language', 'tg-latn');
38
39 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
40 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(false, true));
41 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, false));
42 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true));
43 }
44
45 function testGetPreferredVariantHeaderWeight() {
46 global $wgRequest;
47 $wgRequest->setHeader('Accept-Language', 'tg;q=1');
48
49 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
50 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, true));
51 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, false));
52 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true));
53 }
54
55 function testGetPreferredVariantHeaderWeight2() {
56 global $wgRequest;
57 $wgRequest->setHeader('Accept-Language', 'tg-latn;q=1');
58
59 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
60 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(false, true));
61 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, false));
62 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true));
63 }
64
65 function testGetPreferredVariantHeaderMulti() {
66 global $wgRequest;
67 $wgRequest->setHeader('Accept-Language', 'en, tg-latn;q=1');
68
69 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
70 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(false, true));
71 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, false));
72 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true));
73 }
74
75 function testGetPreferredVariantUserOption() {
76 global $wgUser;
77
78 $wgUser = new User;
79 $wgUser->setId(1);
80 $wgUser->setOption('variant', 'tg-latn');
81
82 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
83 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, true));
84 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, false));
85 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, true));
86 }
87
88 function testGetPreferredVariantHeaderUserVsUrl() {
89 global $wgRequest, $wgUser, $wgContLang;
90
91 $wgContLang = Language::factory( 'tg-latn' );
92 $wgRequest->setVal('variant', 'tg');
93 $wgUser = User::newFromId("admin");
94 $wgUser->setId(1);
95 $wgUser->setOption('variant', 'tg-latn'); // The user's data is ignored
96 // because the variant is set in the URL.
97 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, false));
98 $this->assertEquals('tg', $this->lc->getPreferredVariant(true, true));
99 }
100
101
102 function testGetPreferredVariantDefaultLanguageVariant() {
103 global $wgDefaultLanguageVariant;
104
105 $wgDefaultLanguageVariant = 'tg-latn';
106 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(false, false));
107 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(false, true));
108 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, false));
109 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, true));
110 }
111
112 function testGetPreferredVariantDefaultLanguageVsUrlVariant() {
113 global $wgDefaultLanguageVariant, $wgRequest, $wgContLang;
114
115 $wgContLang = Language::factory( 'tg-latn' );
116 $wgDefaultLanguageVariant = 'tg';
117 $wgRequest->setVal('variant', null);
118 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, false));
119 $this->assertEquals('tg', $this->lc->getPreferredVariant(false, true));
120 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, false));
121 $this->assertEquals('tg-latn', $this->lc->getPreferredVariant(true, true));
122 }
123 }
124
125 /**
126 * Test converter (from Tajiki to latin orthography)
127 */
128 class TestConverter extends LanguageConverter {
129 private $table = array(
130 'б' => 'b',
131 'в' => 'v',
132 'г' => 'g',
133 );
134
135 function loadDefaultTables() {
136 $this->mTables = array(
137 'tg-latn' => new ReplacementArray( $this->table ),
138 'tg' => new ReplacementArray()
139 );
140 }
141
142 }
143
144 class LanguageTest extends Language {
145 function __construct() {
146 parent::__construct();
147 $variants = array( 'tg', 'tg-latn' );
148 $this->mConverter = new TestConverter( $this, 'tg', $variants );
149 }
150 }