MediaWiki  REL1_24
CollationTest.php
Go to the documentation of this file.
00001 <?php
00002 
00010 class CollationTest extends MediaWikiLangTestCase {
00011     protected function setUp() {
00012         parent::setUp();
00013         $this->checkPHPExtension( 'intl' );
00014     }
00015 
00029     public function testIsPrefix( $lang, $base, $extended ) {
00030         $cp = Collator::create( $lang );
00031         $cp->setStrength( Collator::PRIMARY );
00032         $baseBin = $cp->getSortKey( $base );
00033         // Remove sortkey terminator
00034         $baseBin = rtrim( $baseBin, "\0" );
00035         $extendedBin = $cp->getSortKey( $extended );
00036         $this->assertStringStartsWith( $baseBin, $extendedBin, "$base is not a prefix of $extended" );
00037     }
00038 
00039     public static function prefixDataProvider() {
00040         return array(
00041             array( 'en', 'A', 'AA' ),
00042             array( 'en', 'A', 'AAA' ),
00043             array( 'en', 'Д', 'ДЂ' ),
00044             array( 'en', 'Д', 'ДA' ),
00045             // 'Ʒ' should expand to 'Z ' (note space).
00046             array( 'fi', 'Z', 'Ʒ' ),
00047             // 'Þ' should expand to 'th'
00048             array( 'sv', 't', 'Þ' ),
00049             // Javanese is a limited use alphabet, so should have 3 bytes
00050             // per character, so do some tests with it.
00051             array( 'en', 'ꦲ', 'ꦲꦤ' ),
00052             array( 'en', 'ꦲ', 'ꦲД' ),
00053             array( 'en', 'A', 'Aꦲ' ),
00054         );
00055     }
00056 
00062     public function testNotIsPrefix( $lang, $base, $extended ) {
00063         $cp = Collator::create( $lang );
00064         $cp->setStrength( Collator::PRIMARY );
00065         $baseBin = $cp->getSortKey( $base );
00066         // Remove sortkey terminator
00067         $baseBin = rtrim( $baseBin, "\0" );
00068         $extendedBin = $cp->getSortKey( $extended );
00069         $this->assertStringStartsNotWith( $baseBin, $extendedBin, "$base is a prefix of $extended" );
00070     }
00071 
00072     public static function notPrefixDataProvider() {
00073         return array(
00074             array( 'en', 'A', 'B' ),
00075             array( 'en', 'AC', 'ABC' ),
00076             array( 'en', 'Z', 'Ʒ' ),
00077             array( 'en', 'A', 'ꦲ' ),
00078         );
00079     }
00080 
00090     public function testGetFirstLetter( $collation, $string, $firstLetter ) {
00091         $col = Collation::factory( $collation );
00092         $this->assertEquals( $firstLetter, $col->getFirstLetter( $string ) );
00093     }
00094 
00095     function firstLetterProvider() {
00096         return array(
00097             array( 'uppercase', 'Abc', 'A' ),
00098             array( 'uppercase', 'abc', 'A' ),
00099             array( 'identity', 'abc', 'a' ),
00100             array( 'uca-en', 'abc', 'A' ),
00101             array( 'uca-en', ' ', ' ' ),
00102             array( 'uca-en', 'Êveryone', 'E' ),
00103             array( 'uca-vi', 'Êveryone', 'Ê' ),
00104             // Make sure thorn is not a first letter.
00105             array( 'uca-sv', 'The', 'T' ),
00106             array( 'uca-sv', 'Å', 'Å' ),
00107             array( 'uca-hu', 'dzsdo', 'Dzs' ),
00108             array( 'uca-hu', 'dzdso', 'Dz' ),
00109             array( 'uca-hu', 'CSD', 'Cs' ),
00110             array( 'uca-root', 'CSD', 'C' ),
00111             array( 'uca-fi', 'Ǥ', 'G' ),
00112             array( 'uca-fi', 'Ŧ', 'T' ),
00113             array( 'uca-fi', 'Ʒ', 'Z' ),
00114             array( 'uca-fi', 'Ŋ', 'N' ),
00115         );
00116     }
00117 }