Merge "Changed quoting function for oracleDB."
[lhc/web/wiklou.git] / tests / phpunit / includes / LanguageConverterTest.php
1 <?php
2
3 class LanguageConverterTest extends MediaWikiLangTestCase {
4 protected $lang = null;
5 protected $lc = null;
6
7 protected function setUp() {
8 parent::setUp();
9
10 $this->setMwGlobals( array(
11 'wgContLang' => Language::factory( 'tg' ),
12 'wgLanguageCode' => 'tg',
13 'wgDefaultLanguageVariant' => false,
14 'wgMemc' => new EmptyBagOStuff,
15 'wgRequest' => new FauxRequest( array() ),
16 'wgUser' => new User,
17 ) );
18
19 $this->lang = new LanguageToTest();
20 $this->lc = new TestConverter(
21 $this->lang, 'tg',
22 array( 'tg', 'tg-latn' )
23 );
24 }
25
26 protected function tearDown() {
27 unset( $this->lc );
28 unset( $this->lang );
29
30 parent::tearDown();
31 }
32
33 function testGetPreferredVariantDefaults() {
34 $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
35 }
36
37 function testGetPreferredVariantHeaders() {
38 global $wgRequest;
39 $wgRequest->setHeader( 'Accept-Language', 'tg-latn' );
40
41 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
42 }
43
44 function testGetPreferredVariantHeaderWeight() {
45 global $wgRequest;
46 $wgRequest->setHeader( 'Accept-Language', 'tg;q=1' );
47
48 $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
49 }
50
51 function testGetPreferredVariantHeaderWeight2() {
52 global $wgRequest;
53 $wgRequest->setHeader( 'Accept-Language', 'tg-latn;q=1' );
54
55 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
56 }
57
58 function testGetPreferredVariantHeaderMulti() {
59 global $wgRequest;
60 $wgRequest->setHeader( 'Accept-Language', 'en, tg-latn;q=1' );
61
62 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
63 }
64
65 function testGetPreferredVariantUserOption() {
66 global $wgUser;
67
68 $wgUser = new User;
69 $wgUser->load(); // from 'defaults'
70 $wgUser->mId = 1;
71 $wgUser->mDataLoaded = true;
72 $wgUser->mOptionsLoaded = true;
73 $wgUser->setOption( 'variant', 'tg-latn' );
74
75 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
76 }
77
78 function testGetPreferredVariantUserOptionForForeignLanguage() {
79 global $wgContLang, $wgUser;
80
81 $wgContLang = Language::factory( 'en' );
82 $wgUser = new User;
83 $wgUser->load(); // from 'defaults'
84 $wgUser->mId = 1;
85 $wgUser->mDataLoaded = true;
86 $wgUser->mOptionsLoaded = true;
87 $wgUser->setOption( 'variant-tg', 'tg-latn' );
88
89 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
90 }
91
92 function testGetPreferredVariantHeaderUserVsUrl() {
93 global $wgContLang, $wgRequest, $wgUser;
94
95 $wgContLang = Language::factory( 'tg-latn' );
96 $wgRequest->setVal( 'variant', 'tg' );
97 $wgUser = User::newFromId( "admin" );
98 $wgUser->setId( 1 );
99 $wgUser->mFrom = 'defaults';
100 $wgUser->mOptionsLoaded = true;
101 // The user's data is ignored because the variant is set in the URL.
102 $wgUser->setOption( 'variant', 'tg-latn' );
103 $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
104 }
105
106
107 function testGetPreferredVariantDefaultLanguageVariant() {
108 global $wgDefaultLanguageVariant;
109
110 $wgDefaultLanguageVariant = 'tg-latn';
111 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
112 }
113
114 function testGetPreferredVariantDefaultLanguageVsUrlVariant() {
115 global $wgDefaultLanguageVariant, $wgRequest, $wgContLang;
116
117 $wgContLang = Language::factory( 'tg-latn' );
118 $wgDefaultLanguageVariant = 'tg';
119 $wgRequest->setVal( 'variant', null );
120 $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
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 class LanguageToTest extends Language {
143 function __construct() {
144 parent::__construct();
145 $variants = array( 'tg', 'tg-latn' );
146 $this->mConverter = new TestConverter( $this, 'tg', $variants );
147 }
148 }