1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
|
<?php
/**
* @group Language
* @covers \SrConverter
*/
class SrConverterTest extends MediaWikiIntegrationTestCase {
use LanguageConverterTestTrait;
public function testHasVariants() {
$this->assertTrue( $this->getLanguageConverter()->hasVariants(), 'sr has variants' );
}
public function testHasVariantBogus() {
$variants = [
'sr-ec',
'sr-el',
];
foreach ( $variants as $variant ) {
$this->assertTrue( $this->getLanguageConverter()->hasVariant( $variant ),
"no variant for $variant language" );
}
}
public function testEasyConversions() {
$this->assertCyrillic(
'шђчћжШЂЧЋЖ',
'Cyrillic guessing characters'
);
$this->assertLatin(
'šđč枊ĐČĆŽ',
'Latin guessing characters'
);
}
public function testMixedConversions() {
$this->assertCyrillic(
'шђчћжШЂЧЋЖ - šđčćž',
'Mostly Cyrillic characters'
);
$this->assertLatin(
'šđč枊ĐČĆŽ - шђчћж',
'Mostly Latin characters'
);
}
public function testSameAmountOfLatinAndCyrillicGetConverted() {
$this->assertConverted(
'4 Latin: šđčć | 4 Cyrillic: шђчћ',
'sr-ec'
);
$this->assertConverted(
'4 Latin: šđčć | 4 Cyrillic: шђчћ',
'sr-el'
);
}
/**
* @author Nikola Smolenski
*/
public function testConversionToCyrillic() {
// A simple conversion of Latin to Cyrillic
$this->assertEquals( 'абвг',
$this->convertToCyrillic( 'abvg' )
);
// Same as above, but assert that -{}-s must be removed and not converted
$this->assertEquals( 'ljабnjвгdž',
$this->convertToCyrillic( '-{lj}-ab-{nj}-vg-{dž}-' )
);
// A simple conversion of Cyrillic to Cyrillic
$this->assertEquals( 'абвг',
$this->convertToCyrillic( 'абвг' )
);
// Same as above, but assert that -{}-s must be removed and not converted
$this->assertEquals( 'ljабnjвгdž',
$this->convertToCyrillic( '-{lj}-аб-{nj}-вг-{dž}-' )
);
// This text has some Latin, but is recognized as Cyrillic, so it should not be converted
$this->assertEquals( 'abvgшђжчћ',
$this->convertToCyrillic( 'abvgшђжчћ' )
);
// Same as above, but assert that -{}-s must be removed
$this->assertEquals( 'љabvgњшђжчћџ',
$this->convertToCyrillic( '-{љ}-abvg-{њ}-шђжчћ-{џ}-' )
);
// This text has some Cyrillic, but is recognized as Latin, so it should be converted
$this->assertEquals( 'абвгшђжчћ',
$this->convertToCyrillic( 'абвгšđžčć' )
);
// Same as above, but assert that -{}-s must be removed and not converted
$this->assertEquals( 'ljабвгnjшђжчћdž',
$this->convertToCyrillic( '-{lj}-абвг-{nj}-šđžčć-{dž}-' )
);
// Roman numerals are not converted
$this->assertEquals( 'а I б II в III г IV шђжчћ',
$this->convertToCyrillic( 'a I b II v III g IV šđžčć' )
);
// Same, but put the roman numerals at the start/end of the string
$this->assertEquals( 'XX а I б II в III г IV шђжчћ XX',
$this->convertToCyrillic( 'XX a I b II v III g IV šđžčć XX' )
);
}
public function testConversionToLatin() {
// A simple conversion of Latin to Latin
$this->assertEquals( 'abcd',
$this->convertToLatin( 'abcd' )
);
// A simple conversion of Cyrillic to Latin
$this->assertEquals( 'abcd',
$this->convertToLatin( 'абцд' )
);
// This text has some Latin, but is recognized as Cyrillic, so it should be converted
$this->assertEquals( 'abcdšđžčć',
$this->convertToLatin( 'abcdшђжчћ' )
);
// This text has some Cyrillic, but is recognized as Latin, so it should not be converted
$this->assertEquals( 'абцдšđžčć',
$this->convertToLatin( 'абцдšđžčć' )
);
// Roman numerals are not converted (inverse of ToCyrillic test)
$this->assertEquals( 'a I b II v III g IV šđžčć',
$this->convertToLatin( 'а I б II в III г IV шђжчћ' )
);
// Same, but put the roman numerals at the start/end of the string
$this->assertEquals( 'XX a I b II v III g IV šđžčć XX',
$this->convertToLatin( 'XX а I б II в III г IV шђжчћ XX' )
);
}
# #### HELPERS #####################################################
/**
* Wrapper to verify text stay the same after applying conversion
* @param string $text Text to convert
* @param string $variant Language variant 'sr-ec' or 'sr-el'
* @param string $msg Optional message
*/
protected function assertUnConverted( $text, $variant, $msg = '' ) {
$this->assertEquals(
$text,
$this->convertTo( $text, $variant ),
$msg
);
}
/**
* Wrapper to verify a text is different once converted to a variant.
* @param string $text Text to convert
* @param string $variant Language variant 'sr-ec' or 'sr-el'
* @param string $msg Optional message
*/
protected function assertConverted( $text, $variant, $msg = '' ) {
$this->assertNotEquals(
$text,
$this->convertTo( $text, $variant ),
$msg
);
}
/**
* Verifiy the given Cyrillic text is not converted when using
* using the Cyrillic variant and converted to Latin when using
* the Latin variant.
* @param string $text Text to convert
* @param string $msg Optional message
*/
protected function assertCyrillic( $text, $msg = '' ) {
$this->assertUnConverted( $text, 'sr-ec', $msg );
$this->assertConverted( $text, 'sr-el', $msg );
}
/**
* Verifiy the given Latin text is not converted when using
* using the Latin variant and converted to Cyrillic when using
* the Cyrillic variant.
* @param string $text Text to convert
* @param string $msg Optional message
*/
protected function assertLatin( $text, $msg = '' ) {
$this->assertUnConverted( $text, 'sr-el', $msg );
$this->assertConverted( $text, 'sr-ec', $msg );
}
/**
* Wrapper for converter::convertTo() method
* @param string $text
* @param string $variant
* @return string
*/
protected function convertTo( $text, $variant ) {
return $this->getLanguageConverter()->convertTo( $text, $variant );
}
protected function convertToCyrillic( $text ) {
return $this->convertTo( $text, 'sr-ec' );
}
protected function convertToLatin( $text ) {
return $this->convertTo( $text, 'sr-el' );
}
}
|