Per wikitech-l discussion: Move tests from maintenance/tests/ to tests/. They're...
[lhc/web/wiklou.git] / tests / phpunit / includes / 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 LanguageToTest();
15 $this->lc = new TestConverter( $this->lang, 'tg',
16 array( 'tg', 'tg-latn' ) );
17 }
18
19 function tearDown() {
20 global $wgMemc, $wgContLang;
21 unset( $wgMemc );
22 unset( $this->lc );
23 unset( $this->lang );
24 $wgContLang = Language::factory( 'en' );
25 }
26
27 function testGetPreferredVariantDefaults() {
28 $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
29 }
30
31 function testGetPreferredVariantHeaders() {
32 global $wgRequest;
33 $wgRequest->setHeader( 'Accept-Language', 'tg-latn' );
34
35 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
36 }
37
38 function testGetPreferredVariantHeaderWeight() {
39 global $wgRequest;
40 $wgRequest->setHeader( 'Accept-Language', 'tg;q=1' );
41
42 $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
43 }
44
45 function testGetPreferredVariantHeaderWeight2() {
46 global $wgRequest;
47 $wgRequest->setHeader( 'Accept-Language', 'tg-latn;q=1' );
48
49 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
50 }
51
52 function testGetPreferredVariantHeaderMulti() {
53 global $wgRequest;
54 $wgRequest->setHeader( 'Accept-Language', 'en, tg-latn;q=1' );
55
56 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
57 }
58
59 function testGetPreferredVariantUserOption() {
60 global $wgUser;
61
62 $wgUser = new User;
63 $wgUser->setId( 1 );
64 $wgUser->mDataLoaded = true;
65 $wgUser->mOptionsLoaded = true;
66 $wgUser->setOption( 'variant', 'tg-latn' );
67
68 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
69 }
70
71 function testGetPreferredVariantHeaderUserVsUrl() {
72 global $wgRequest, $wgUser, $wgContLang;
73
74 $wgContLang = Language::factory( 'tg-latn' );
75 $wgRequest->setVal( 'variant', 'tg' );
76 $wgUser = User::newFromId( "admin" );
77 $wgUser->setId( 1 );
78 $wgUser->mDataLoaded = true;
79 $wgUser->mOptionsLoaded = true;
80 $wgUser->setOption( 'variant', 'tg-latn' ); // The user's data is ignored
81 // because the variant is set in the URL.
82 $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
83 }
84
85
86 function testGetPreferredVariantDefaultLanguageVariant() {
87 global $wgDefaultLanguageVariant;
88
89 $wgDefaultLanguageVariant = 'tg-latn';
90 $this->assertEquals( 'tg-latn', $this->lc->getPreferredVariant() );
91 }
92
93 function testGetPreferredVariantDefaultLanguageVsUrlVariant() {
94 global $wgDefaultLanguageVariant, $wgRequest, $wgContLang;
95
96 $wgContLang = Language::factory( 'tg-latn' );
97 $wgDefaultLanguageVariant = 'tg';
98 $wgRequest->setVal( 'variant', null );
99 $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
100 }
101 }
102
103 /**
104 * Test converter (from Tajiki to latin orthography)
105 */
106 class TestConverter extends LanguageConverter {
107 private $table = array(
108 'б' => 'b',
109 'в' => 'v',
110 'г' => 'g',
111 );
112
113 function loadDefaultTables() {
114 $this->mTables = array(
115 'tg-latn' => new ReplacementArray( $this->table ),
116 'tg' => new ReplacementArray()
117 );
118 }
119
120 }
121
122 class LanguageToTest extends Language {
123 function __construct() {
124 parent::__construct();
125 $variants = array( 'tg', 'tg-latn' );
126 $this->mConverter = new TestConverter( $this, 'tg', $variants );
127 }
128 }