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