xref: /webtrees/tests/app/I18NTest.php (revision 8d0ebef0d075981bd943e8256e2c81a3b1e92b4b)
1<?php
2/**
3 * webtrees: online genealogy
4 * Copyright (C) 2018 webtrees development team
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16declare(strict_types=1);
17
18namespace Fisharebest\Webtrees;
19
20/**
21 * Test harness for the class I18N
22 */
23class I18NTest extends \Fisharebest\Webtrees\TestCase
24{
25    /**
26     * Prepare the environment for these tests
27     *
28     * @return void
29     */
30    public function setUp()
31    {
32        defined('WT_BASE_URL') || define('WT_BASE_URL', 'http://localhost/');
33        defined('WT_DATA_DIR') || define('WT_DATA_DIR', 'data/');
34        defined('WT_ROOT') || define('WT_ROOT', '');
35        I18N::init('en-US');
36    }
37
38    /**
39     * Test I18N::strtoupper()
40     *
41     * @return void
42     */
43    public function testStrtoupper()
44    {
45        $this->assertSame(I18N::strtoupper(''), '');
46        $this->assertSame(I18N::strtoupper('Abc'), 'ABC');
47    }
48
49    /**
50     * Test I18N::strtolower()
51     *
52     * @return void
53     */
54    public function testStrtolower()
55    {
56        $this->assertSame(I18N::strtolower(''), '');
57        $this->assertSame(I18N::strtolower('Abc'), 'abc');
58    }
59
60    /**
61     * Test I18N::strcasecmp()
62     *
63     * @return void
64     */
65    public function testStrcasecmp()
66    {
67        $this->assertSame(I18N::strcasecmp('', ''), 0);
68        $this->assertSame(I18N::strcasecmp('Abc', 'abc'), 0);
69        $this->assertTrue(I18N::strcasecmp('Abc', 'bcd') < 0);
70        $this->assertTrue(I18N::strcasecmp('bcd', 'ABC') > 0);
71        $this->assertTrue(I18N::strcasecmp('Abc', 'abcd') < 0);
72        $this->assertTrue(I18N::strcasecmp('Abcd', 'abc') > 0);
73    }
74
75    /**
76     * Test I18N::reverseText()
77     *
78     * @return void
79     */
80    public function testReverseText()
81    {
82        // Create these strings carefully, as text editors can display them in confusing ways.
83        $rtl_abc = 'א' . 'ב' . 'ג';
84        $rtl_cba = 'ג' . 'ב' . 'א';
85        $rtl_123 = '١' . '٢' . '٣';
86
87        $this->assertSame(I18N::reverseText(''), '');
88        $this->assertSame(I18N::reverseText('abc123'), 'abc123');
89        $this->assertSame(I18N::reverseText('<b>abc</b>123'), 'abc123');
90        $this->assertSame(I18N::reverseText('&lt;abc&gt;'), '<abc>');
91        $this->assertSame(I18N::reverseText('abc[123]'), 'abc[123]');
92        $this->assertSame(I18N::reverseText($rtl_123), $rtl_123);
93        $this->assertSame(I18N::reverseText($rtl_abc), $rtl_cba);
94        $this->assertSame(I18N::reverseText($rtl_abc . '123'), '123' . $rtl_cba);
95        $this->assertSame(I18N::reverseText($rtl_abc . '[123]'), '[123]' . $rtl_cba);
96        $this->assertSame(I18N::reverseText('123' . $rtl_abc . '456'), '456' . $rtl_cba . '123');
97        $this->assertSame(I18N::reverseText($rtl_abc . '&lt;'), '>' . $rtl_cba);
98    }
99
100    /**
101     * Test I18N::languageName()
102     *
103     * @return void
104     */
105    public function testKnownLanguageName()
106    {
107        $this->assertSame('العربية', I18N::languageName('ar'));
108        $this->assertSame('Deutsch', I18N::languageName('de'));
109        $this->assertSame('Ελληνικά', I18N::languageName('el'));
110        $this->assertSame('British English', I18N::languageName('en-GB'));
111        $this->assertSame('français', I18N::languageName('fr'));
112    }
113
114    /**
115     * Test I18N::languageScript()
116     *
117     * @return void
118     */
119    public function testLanguageScript()
120    {
121        $this->assertSame('Arab', I18N::languageScript('ar'));
122        $this->assertSame('Latn', I18N::languageScript('de'));
123        $this->assertSame('Grek', I18N::languageScript('el'));
124    }
125}
126