Merge "Fix 'Tags' padding to keep it farther from the edge and document the source...
[lhc/web/wiklou.git] / tests / phpunit / languages / classes / LanguageCrhTest.php
index 7c99614..84a4c46 100644 (file)
 /**
  * @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 "<cyrillic> <latin>" and
+        * "<latin> <cyrillic>" 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'      => 'Ñ\8dки Ñ\8eз eki yüz',
-                                       'crh-cyrl' => 'Ñ\8dки Ñ\8eз Ñ\8dки Ñ\8eз',
-                                       'crh-latn' => 'eki yüz eki yüz',
+                                       'crh'      => 'Ñ\88оÑ\84еÑ\80 Ñ\88оÑ\84Ñ\91Ñ\80 Å\9foför ÐºÐ¾Ñ\80бекÑ\83л ÐºÐ¾Ñ\80Ñ\8cбекÑ\83л ÐºÐ¾Ñ\80Ñ\8cбекÑ\83лÑ\8c körbekül',
+                                       'crh-cyrl' => 'Ñ\88оÑ\84еÑ\80 Ñ\88оÑ\84Ñ\91Ñ\80 Ñ\88оÑ\84Ñ\91Ñ\80 ÐºÐ¾Ñ\80бекÑ\83л ÐºÐ¾Ñ\80Ñ\8cбекÑ\83л ÐºÐ¾Ñ\80Ñ\8cбекÑ\83лÑ\8c ÐºÐ¾Ñ\80Ñ\8cбекÑ\83лÑ\8c',
+                                       'crh-latn' => 'şoför şoför şoför körbekül körbekül körbekül körbekül',
                                ],
-                               'Ñ\8dки Ñ\8eз eki yüz'
+                               'Ñ\88оÑ\84еÑ\80 Ñ\88оÑ\84Ñ\91Ñ\80 Å\9foför ÐºÐ¾Ñ\80бекÑ\83л ÐºÐ¾Ñ\80Ñ\8cбекÑ\83л ÐºÐ¾Ñ\80Ñ\8cбекÑ\83лÑ\8c 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 бейуде'
                        ],
                ];
        }