MediaWiki REL1_31
CollationTest.php
Go to the documentation of this file.
1<?php
2
11 protected function setUp() {
12 parent::setUp();
13 $this->checkPHPExtension( 'intl' );
14 }
15
29 public function testIsPrefix( $lang, $base, $extended ) {
30 $cp = Collator::create( $lang );
31 $cp->setStrength( Collator::PRIMARY );
32 $baseBin = $cp->getSortKey( $base );
33 // Remove sortkey terminator
34 $baseBin = rtrim( $baseBin, "\0" );
35 $extendedBin = $cp->getSortKey( $extended );
36 $this->assertStringStartsWith( $baseBin, $extendedBin, "$base is not a prefix of $extended" );
37 }
38
39 public static function prefixDataProvider() {
40 return [
41 [ 'en', 'A', 'AA' ],
42 [ 'en', 'A', 'AAA' ],
43 [ 'en', 'Д', 'ДЂ' ],
44 [ 'en', 'Д', 'ДA' ],
45 // 'Ʒ' should expand to 'Z ' (note space).
46 [ 'fi', 'Z', 'Ʒ' ],
47 // 'Þ' should expand to 'th'
48 [ 'sv', 't', 'Þ' ],
49 // Javanese is a limited use alphabet, so should have 3 bytes
50 // per character, so do some tests with it.
51 [ 'en', 'ꦲ', 'ꦲꦤ' ],
52 [ 'en', 'ꦲ', 'ꦲД' ],
53 [ 'en', 'A', 'Aꦲ' ],
54 ];
55 }
56
62 public function testNotIsPrefix( $lang, $base, $extended ) {
63 $cp = Collator::create( $lang );
64 $cp->setStrength( Collator::PRIMARY );
65 $baseBin = $cp->getSortKey( $base );
66 // Remove sortkey terminator
67 $baseBin = rtrim( $baseBin, "\0" );
68 $extendedBin = $cp->getSortKey( $extended );
69 $this->assertStringStartsNotWith( $baseBin, $extendedBin, "$base is a prefix of $extended" );
70 }
71
72 public static function notPrefixDataProvider() {
73 return [
74 [ 'en', 'A', 'B' ],
75 [ 'en', 'AC', 'ABC' ],
76 [ 'en', 'Z', 'Ʒ' ],
77 [ 'en', 'A', 'ꦲ' ],
78 ];
79 }
80
90 public function testGetFirstLetter( $collation, $string, $firstLetter ) {
91 $col = Collation::factory( $collation );
92 $this->assertEquals( $firstLetter, $col->getFirstLetter( $string ) );
93 }
94
96 return [
97 [ 'uppercase', 'Abc', 'A' ],
98 [ 'uppercase', 'abc', 'A' ],
99 [ 'identity', 'abc', 'a' ],
100 [ 'uca-en', 'abc', 'A' ],
101 [ 'uca-en', ' ', ' ' ],
102 [ 'uca-en', 'Êveryone', 'E' ],
103 [ 'uca-vi', 'Êveryone', 'Ê' ],
104 // Make sure thorn is not a first letter.
105 [ 'uca-sv', 'The', 'T' ],
106 [ 'uca-sv', 'Å', 'Å' ],
107 [ 'uca-hu', 'dzsdo', 'Dzs' ],
108 [ 'uca-hu', 'dzdso', 'Dz' ],
109 [ 'uca-hu', 'CSD', 'Cs' ],
110 [ 'uca-root', 'CSD', 'C' ],
111 [ 'uca-fi', 'Ǥ', 'G' ],
112 [ 'uca-fi', 'Ŧ', 'T' ],
113 [ 'uca-fi', 'Ʒ', 'Z' ],
114 [ 'uca-fi', 'Ŋ', 'N' ],
115 [ 'uppercase-ba', 'в', 'В' ],
116 ];
117 }
118}
Class CollationTest Collation IcuCollation IdentityCollation UppercaseCollation.
static notPrefixDataProvider()
testIsPrefix( $lang, $base, $extended)
Test to make sure, that if you have "X" and "XY", the binary sortkey also has "X" being a prefix of "...
testGetFirstLetter( $collation, $string, $firstLetter)
Test correct first letter is fetched.
static prefixDataProvider()
testNotIsPrefix( $lang, $base, $extended)
Opposite of testIsPrefix.
static factory( $collationName)
Definition Collation.php:48
Base class that store and restore the Language objects.
checkPHPExtension( $extName)
Check if $extName is a loaded PHP extension, will skip the test whenever it is not loaded.
if(!isset( $args[0])) $lang