X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Flanguages%2Fclasses%2FLanguageCrhTest.php;h=84a4c46757228e2263bbc220fd271255572c7cc3;hb=138298b397b308ad6e4bfc7088884d90e8ac1e37;hp=7c99614e6173e64af6f64e1dcf81b1846fa5605b;hpb=621d00d59bf589d17cf3fa1d18fe55ad5aa91812;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/languages/classes/LanguageCrhTest.php b/tests/phpunit/languages/classes/LanguageCrhTest.php index 7c99614e61..84a4c46757 100644 --- a/tests/phpunit/languages/classes/LanguageCrhTest.php +++ b/tests/phpunit/languages/classes/LanguageCrhTest.php @@ -3,89 +3,136 @@ /** * @covers LanguageCrh * @covers CrhConverter + * @covers MediaWiki\Languages\Data\CrhExceptions */ class LanguageCrhTest extends LanguageClassesTestCase { /** - * @dataProvider provideAutoConvertToAllVariants + * @dataProvider provideAutoConvertToAllVariantsByWord * @covers Language::autoConvertToAllVariants + * + * Test individual words and test minimal contextual transforms + * by creating test strings " " and + * " " and then converting to all variants. */ - public function testAutoConvertToAllVariants( $result, $value ) { + public function testAutoConvertToAllVariantsByWord( $cyrl, $lat ) { + $value = $lat; + $result = [ + 'crh' => $value, + 'crh-cyrl' => $cyrl, + 'crh-latn' => $lat, + ]; + $this->assertEquals( $result, $this->getLang()->autoConvertToAllVariants( $value ) ); + + $value = $cyrl; + $result = [ + 'crh' => $value, + 'crh-cyrl' => $cyrl, + 'crh-latn' => $lat, + ]; + $this->assertEquals( $result, $this->getLang()->autoConvertToAllVariants( $value ) ); + + $value = $cyrl . ' ' . $lat; + $result = [ + 'crh' => $value, + 'crh-cyrl' => $cyrl . ' ' . $cyrl, + 'crh-latn' => $lat . ' ' . $lat, + ]; + $this->assertEquals( $result, $this->getLang()->autoConvertToAllVariants( $value ) ); + + $value = $lat . ' ' . $cyrl; + $result = [ + 'crh' => $value, + 'crh-cyrl' => $cyrl . ' ' . $cyrl, + 'crh-latn' => $lat . ' ' . $lat, + ]; $this->assertEquals( $result, $this->getLang()->autoConvertToAllVariants( $value ) ); } - public static function provideAutoConvertToAllVariants() { + public static function provideAutoConvertToAllVariantsByWord() { return [ - [ // general words, covering more of the alphabet - [ - 'crh' => 'рузгярнынъ ruzgârnıñ Париж Parij', - 'crh-cyrl' => 'рузгярнынъ рузгярнынъ Париж Париж', - 'crh-latn' => 'ruzgârnıñ ruzgârnıñ Parij Parij', - ], - 'рузгярнынъ ruzgârnıñ Париж Parij' - ], - [ // general words, covering more of the alphabet - [ - 'crh' => 'чёкюч çöküç элифбени elifbeni полициясы politsiyası', - 'crh-cyrl' => 'чёкюч чёкюч элифбени элифбени полициясы полициясы', - 'crh-latn' => 'çöküç çöküç elifbeni elifbeni politsiyası politsiyası', - ], - 'чёкюч çöküç элифбени elifbeni полициясы politsiyası' - ], - [ // general words, covering more of the alphabet - [ - 'crh' => 'хусусында hususında акъшамларны aqşamlarnı опькеленюв öpkelenüv', - 'crh-cyrl' => 'хусусында хусусында акъшамларны акъшамларны опькеленюв опькеленюв', - 'crh-latn' => 'hususında hususında aqşamlarnı aqşamlarnı öpkelenüv öpkelenüv', - ], - 'хусусында hususında акъшамларны aqşamlarnı опькеленюв öpkelenüv' - ], - [ // general words, covering more of the alphabet - [ - 'crh' => 'кулюмсиреди külümsiredi айтмайджагъым aytmaycağım козьяшсыз közyaşsız', - 'crh-cyrl' => 'кулюмсиреди кулюмсиреди айтмайджагъым айтмайджагъым козьяшсыз козьяшсыз', - 'crh-latn' => 'külümsiredi külümsiredi aytmaycağım aytmaycağım közyaşsız közyaşsız', - ], - 'кулюмсиреди külümsiredi айтмайджагъым aytmaycağım козьяшсыз közyaşsız' - ], - [ // exception words - [ - 'crh' => 'инструменталь instrumental гургуль gürgül тюшюнмемек tüşünmemek', - 'crh-cyrl' => 'инструменталь инструменталь гургуль гургуль тюшюнмемек тюшюнмемек', - 'crh-latn' => 'instrumental instrumental gürgül gürgül tüşünmemek tüşünmemek', - ], - 'инструменталь instrumental гургуль gürgül тюшюнмемек tüşünmemek' - ], - [ // recent problem words, part 1 - [ - 'crh' => 'künü куню sürgünligi сюргюнлиги özü озю etti этти', - 'crh-cyrl' => 'куню куню сюргюнлиги сюргюнлиги озю озю этти этти', - 'crh-latn' => 'künü künü sürgünligi sürgünligi özü özü etti etti', - ], - 'künü куню sürgünligi сюргюнлиги özü озю etti этти' - ], - [ // recent problem words, part 2 + // general words, covering more of the alphabet + [ 'рузгярнынъ', 'ruzgârnıñ' ], [ 'Париж', 'Parij' ], [ 'чёкюч', 'çöküç' ], + [ 'элифбени', 'elifbeni' ], [ 'полициясы', 'politsiyası' ], [ 'хусусында', 'hususında' ], + [ 'акъшамларны', 'aqşamlarnı' ], [ 'опькеленюв', 'öpkelenüv' ], + [ 'кулюмсиреди', 'külümsiredi' ], [ 'айтмайджагъым', 'aytmaycağım' ], + [ 'козьяшсыз', 'közyaşsız' ], + + // exception words + [ 'инструменталь', 'instrumental' ], [ 'гургуль', 'gürgül' ], [ 'тюшюнмемек', 'tüşünmemek' ], + + // specific problem words + [ 'куню', 'künü' ], [ 'сюргюнлиги', 'sürgünligi' ], [ 'озю', 'özü' ], [ 'этти', 'etti' ], + [ 'эсас', 'esas' ], [ 'дёрт', 'dört' ], [ 'кельди', 'keldi' ], [ 'км²', 'km²' ], + [ 'юзь', 'yüz' ], [ 'АКъШ', 'AQŞ' ], [ 'ШСДжБнен', 'ŞSCBnen' ], [ 'июль', 'iyül' ], + [ 'ишгъаль', 'işğal' ], [ 'ишгъальджилерине', 'işğalcilerine' ], [ 'район', 'rayon' ], + [ 'районынынъ', 'rayonınıñ' ], [ 'Ногъай', 'Noğay' ], [ 'Юрьтю', 'Yürtü' ], + [ 'ватандан', 'vatandan' ], [ 'ком-кок', 'köm-kök' ], [ 'АКЪКЪЫ', 'AQQI' ], + [ 'ДАГЪГЪА', 'DAĞĞA' ], [ '13-юнджи', '13-ünci' ], [ 'ДЖУРЬМЕК', 'CÜRMEK' ], + [ 'джумлеси', 'cümlesi' ], [ 'ильи', 'ilyi' ], [ 'Ильи', 'İlyi' ], [ 'бруцел', 'brutsel' ], + [ 'коцюб', 'kotsüb' ], [ 'плацен', 'platsen' ], [ 'эпицентр', 'epitsentr' ], + + // -tsin- words + [ 'кетсин', 'ketsin' ], [ 'кирлетсин', 'kirletsin' ], [ 'этсин', 'etsin' ], + [ 'етсин', 'yetsin' ], [ 'этсинлерми', 'etsinlermi' ], [ 'принцини', 'printsini' ], + [ 'медицина', 'meditsina' ], [ 'Щетсин', 'Şçetsin' ], [ 'Щекоцины', 'Şçekotsinı' ], + + // regex pattern words + [ 'коюнден', 'köyünden' ], [ 'аньге', 'ange' ], + + // multi part words + [ 'эки юз', 'eki yüz' ], + + // affix patterns + [ 'койнинъ', 'köyniñ' ], [ 'Авджыкойде', 'Avcıköyde' ], [ 'экваториаль', 'ekvatorial' ], + [ 'Джанкой', 'Canköy' ], [ 'усть', 'üst' ], [ 'роль', 'rol' ], [ 'буюк', 'büyük' ], + [ 'джонк', 'cönk' ], + + // Roman numerals vs Initials, part 1 - Roman numeral initials without spaces + [ 'А.Б.Дж.Д.М. Къадырова XII', 'A.B.C.D.M. Qadırova XII' ], + // Roman numerals vs Initials, part 2 - Roman numeral initials with spaces + [ 'Г. Х. Ы. В. X. Л. Меметов III', 'G. H. I. V. X. L. Memetov III' ], + + // ALL CAPS, made up acronyms + [ 'НЪАБ', 'ÑAB' ], [ 'КЪЫДЖ', 'QIC' ], [ 'ГЪУК', 'ĞUK' ], [ 'ДЖОТ', 'COT' ], [ 'ДЖА', 'CA' ], + ]; + } + + /** + * @dataProvider provideAutoConvertToAllVariantsByString + * @covers Language::autoConvertToAllVariants + * + * Run tests that require some context (like Roman numerals) or with + * many-to-one mappings, or other asymmetric results (like smart quotes) + */ + public function testAutoConvertToAllVariantsByString( $result, $value ) { + $this->assertEquals( $result, $this->getLang()->autoConvertToAllVariants( $value ) ); + } + + public static function provideAutoConvertToAllVariantsByString() { + return [ + [ // Roman numerals and quotes, esp. single-letter Roman numerals at the end of a string [ - 'crh' => 'esas эсас dört дёрт keldi кельди', - 'crh-cyrl' => 'эсас эсас дёрт дёрт кельди кельди', - 'crh-latn' => 'esas esas dört dört keldi keldi', + 'crh' => 'VI,VII IX “dört” «дёрт» XI XII I V X L C D M', + 'crh-cyrl' => 'VI,VII IX «дёрт» «дёрт» XI XII I V X L C D M', + 'crh-latn' => 'VI,VII IX “dört” "dört" XI XII I V X L C D M', ], - 'esas эсас dört дёрт keldi кельди' + 'VI,VII IX “dört” «дёрт» XI XII I V X L C D M' ], - [ // multi part words + [ // Many-to-one mappings: many Cyrillic to one Latin [ - 'crh' => 'эки юз eki yüz', - 'crh-cyrl' => 'эки юз эки юз', - 'crh-latn' => 'eki yüz eki yüz', + 'crh' => 'шофер шофёр şoför корбекул корьбекул корьбекуль körbekül', + 'crh-cyrl' => 'шофер шофёр шофёр корбекул корьбекул корьбекуль корьбекуль', + 'crh-latn' => 'şoför şoför şoför körbekül körbekül körbekül körbekül', ], - 'эки юз eki yüz' + 'шофер шофёр şoför корбекул корьбекул корьбекуль körbekül' ], - [ // ALL CAPS, made up acronyms (not 100% sure these are correct) + [ // Many-to-one mappings: many Latin to one Cyrillic [ - 'crh' => 'ÑAB QIC ĞUK COT НЪАБ КЪЫДж ГЪУК ДЖОТ CA ДЖА', - 'crh-cyrl' => 'НЪАБ КЪЫДж ГЪУК ДЖОТ НЪАБ КЪЫДж ГЪУК ДЖОТ ДЖА ДЖА', - 'crh-latn' => 'ÑAB QIC ĞUK COT ÑAB QIC ĞUK COT CA CA', + 'crh' => 'fevqülade fevqulade февкъульаде beyude beyüde бейуде', + 'crh-cyrl' => 'февкъульаде февкъульаде февкъульаде бейуде бейуде бейуде', + 'crh-latn' => 'fevqülade fevqulade fevqulade beyude beyüde beyüde', ], - 'ÑAB QIC ĞUK COT НЪАБ КЪЫДж ГЪУК ДЖОТ CA ДЖА' + 'fevqülade fevqulade февкъульаде beyude beyüde бейуде' ], ]; }