3 class LanguageTest
extends MediaWikiTestCase
{
7 $this->lang
= Language
::factory( 'en' );
13 function testLanguageConvertDoubleWidthToSingleWidth() {
15 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
16 $this->lang
->normalizeForSearch(
17 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
19 'convertDoubleWidth() with the full alphabet and digits'
23 /** @dataProvider provideFormattableTimes */
24 function testFormatTimePeriod( $seconds, $avoid, $noAbbrevs, $expected, $desc ) {
25 $this->assertEquals( $expected, $this->lang
->formatTimePeriod( $seconds, $avoid, $noAbbrevs ), $desc );
28 function provideFormattableTimes() {
30 array( 9.45, false, false, '9.5s', 'formatTimePeriod() rounding (<10s)' ),
31 array( 9.45, false, 'noabbrevs', '9.5 seconds', 'formatTimePeriod() rounding (<10s)' ),
32 array( 9.95, false, false, '10s', 'formatTimePeriod() rounding (<10s)' ),
33 array( 9.95, false, 'noabbrevs', '10 seconds', 'formatTimePeriod() rounding (<10s)' ),
34 array( 59.55, false, false, '1m 0s', 'formatTimePeriod() rounding (<60s)' ),
35 array( 59.55, false, 'noabbrevs', '1 minute 0 seconds', 'formatTimePeriod() rounding (<60s)' ),
36 array( 119.55, false, false, '2m 0s', 'formatTimePeriod() rounding (<1h)' ),
37 array( 119.55, false, 'noabbrevs', '2 minutes 0 seconds', 'formatTimePeriod() rounding (<1h)' ),
38 array( 3599.55, false, false, '1h 0m 0s', 'formatTimePeriod() rounding (<1h)' ),
39 array( 3599.55, false, 'noabbrevs', '1 hour 0 minutes 0 seconds', 'formatTimePeriod() rounding (<1h)' ),
40 array( 7199.55, false, false, '2h 0m 0s', 'formatTimePeriod() rounding (>=1h)' ),
41 array( 7199.55, false, 'noabbrevs', '2 hours 0 minutes 0 seconds', 'formatTimePeriod() rounding (>=1h)' ),
42 array( 7199.55, 'avoidseconds', false, '2h 0m', 'formatTimePeriod() rounding (>=1h), avoidseconds' ),
43 array( 7199.55, 'avoidseconds', 'noabbrevs', '2 hours 0 minutes', 'formatTimePeriod() rounding (>=1h), avoidseconds' ),
44 array( 7199.55, 'avoidminutes', false, '2h 0m', 'formatTimePeriod() rounding (>=1h), avoidminutes' ),
45 array( 7199.55, 'avoidminutes', 'noabbrevs', '2 hours 0 minutes', 'formatTimePeriod() rounding (>=1h), avoidminutes' ),
46 array( 172799.55, 'avoidseconds', false, '48h 0m', 'formatTimePeriod() rounding (=48h), avoidseconds' ),
47 array( 172799.55, 'avoidseconds', 'noabbrevs', '48 hours 0 minutes', 'formatTimePeriod() rounding (=48h), avoidseconds' ),
48 array( 259199.55, 'avoidminutes', false, '3d 0h', 'formatTimePeriod() rounding (>48h), avoidminutes' ),
49 array( 259199.55, 'avoidminutes', 'noabbrevs', '3 days 0 hours', 'formatTimePeriod() rounding (>48h), avoidminutes' ),
50 array( 176399.55, 'avoidseconds', false, '2d 1h 0m', 'formatTimePeriod() rounding (>48h), avoidseconds' ),
51 array( 176399.55, 'avoidseconds', 'noabbrevs', '2 days 1 hour 0 minutes', 'formatTimePeriod() rounding (>48h), avoidseconds' ),
52 array( 176399.55, 'avoidminutes', false, '2d 1h', 'formatTimePeriod() rounding (>48h), avoidminutes' ),
53 array( 176399.55, 'avoidminutes', 'noabbrevs', '2 days 1 hour', 'formatTimePeriod() rounding (>48h), avoidminutes' ),
54 array( 259199.55, 'avoidseconds', false, '3d 0h 0m', 'formatTimePeriod() rounding (>48h), avoidseconds' ),
55 array( 259199.55, 'avoidseconds', 'noabbrevs', '3 days 0 hours 0 minutes', 'formatTimePeriod() rounding (>48h), avoidseconds' ),
56 array( 172801.55, 'avoidseconds', false, '2d 0h 0m', 'formatTimePeriod() rounding, (>48h), avoidseconds' ),
57 array( 172801.55, 'avoidseconds', 'noabbrevs', '2 days 0 hours 0 minutes', 'formatTimePeriod() rounding, (>48h), avoidseconds' ),
58 array( 176460.55, false, false, '2d 1h 1m 1s', 'formatTimePeriod() rounding, recursion, (>48h)' ),
59 array( 176460.55, false, 'noabbrevs', '2 days 1 hour 1 minute 1 second', 'formatTimePeriod() rounding, recursion, (>48h)' ),
64 function testTruncate() {
67 $this->lang
->truncate( "1234567890", 0, 'XXX' ),
68 'truncate prefix, len 0, small ellipsis'
73 $this->lang
->truncate( "1234567890", 8, 'XXX' ),
74 'truncate prefix, small ellipsis'
79 $this->lang
->truncate( "123456789", 5, 'XXXXXXXXXXXXXXX' ),
80 'truncate prefix, large ellipsis'
85 $this->lang
->truncate( "1234567890", -8, 'XXX' ),
86 'truncate suffix, small ellipsis'
91 $this->lang
->truncate( "123456789", -5, 'XXXXXXXXXXXXXXX' ),
92 'truncate suffix, large ellipsis'
97 * @dataProvider provideHTMLTruncateData()
99 function testTruncateHtml( $len, $ellipsis, $input, $expected ) {
103 $this->lang
->truncateHTML( $input, $len, $ellipsis )
108 * Array format is ($len, $ellipsis, $input, $expected)
110 function provideHTMLTruncateData() {
112 array( 0, 'XXX', "1234567890", "XXX" ),
113 array( 8, 'XXX', "1234567890", "12345XXX" ),
114 array( 5, 'XXXXXXXXXXXXXXX', '1234567890', "1234567890" ),
116 '<p><span style="font-weight:bold;"></span></p>',
117 '<p><span style="font-weight:bold;"></span></p>',
120 '<p><span style="font-weight:bold;">123456789</span></p>',
121 '<p><span style="font-weight:bold;">***</span></p>',
124 '<p><span style="font-weight:bold;"> 23456789</span></p>',
125 '<p><span style="font-weight:bold;">***</span></p>',
128 '<p><span style="font-weight:bold;">123456789</span></p>',
129 '<p><span style="font-weight:bold;">***</span></p>',
132 '<p><span style="font-weight:bold;">123456789</span></p>',
133 '<p><span style="font-weight:bold;">1***</span></p>',
136 '<tt><span style="font-weight:bold;">123456789</span></tt>',
137 '<tt><span style="font-weight:bold;">12***</span></tt>',
140 '<p><a href="www.mediawiki.org">123456789</a></p>',
141 '<p><a href="www.mediawiki.org">123***</a></p>',
144 '<p><a href="www.mediawiki.org">12 456789</a></p>',
145 '<p><a href="www.mediawiki.org">12 ***</a></p>',
148 '<small><span style="font-weight:bold;">123<p id="#moo">456</p>789</span></small>',
149 '<small><span style="font-weight:bold;">123<p id="#moo">4***</p></span></small>',
152 '<div><span style="font-weight:bold;">123<span>4</span>56789</span></div>',
153 '<div><span style="font-weight:bold;">123<span>4</span>5***</span></div>',
156 '<p><table style="font-weight:bold;"><tr><td>123456789</td></tr></table></p>',
157 '<p><table style="font-weight:bold;"><tr><td>123456789</td></tr></table></p>',
160 '<p><font style="font-weight:bold;">123456789</font></p>',
161 '<p><font style="font-weight:bold;">123456789</font></p>',
167 * Test Language::isValidBuiltInCode()
168 * @dataProvider provideLanguageCodes
170 function testBuiltInCodeValidation( $code, $message = '' ) {
172 (bool) Language
::isValidBuiltInCode( $code ),
173 "validating code $code $message"
177 function testBuiltInCodeValidationRejectUnderscore() {
179 (bool) Language
::isValidBuiltInCode( 'be_tarask' ),
180 "reject underscore in language code"
184 function provideLanguageCodes() {
186 array( 'fr' , 'Two letters, minor case' ),
187 array( 'EN' , 'Two letters, upper case' ),
188 array( 'tyv' , 'Three letters' ),
189 array( 'tokipona' , 'long language code' ),
190 array( 'be-tarask', 'With dash' ),
191 array( 'Zh-classical', 'Begin with upper case, dash' ),
192 array( 'Be-x-old', 'With extension (two dashes)' ),