LanguageCrhTest.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. /**
  3. * @covers LanguageCrh
  4. * @covers CrhConverter
  5. * @covers MediaWiki\Languages\Data\CrhExceptions
  6. */
  7. class LanguageCrhTest extends LanguageClassesTestCase {
  8. /**
  9. * @dataProvider provideAutoConvertToAllVariantsByWord
  10. * @covers Language::autoConvertToAllVariants
  11. *
  12. * Test individual words and test minimal contextual transforms
  13. * by creating test strings "<cyrillic> <latin>" and
  14. * "<latin> <cyrillic>" and then converting to all variants.
  15. */
  16. public function testAutoConvertToAllVariantsByWord( $cyrl, $lat ) {
  17. $value = $lat;
  18. $result = [
  19. 'crh' => $value,
  20. 'crh-cyrl' => $cyrl,
  21. 'crh-latn' => $lat,
  22. ];
  23. $this->assertEquals( $result, $this->getLang()->autoConvertToAllVariants( $value ) );
  24. $value = $cyrl;
  25. $result = [
  26. 'crh' => $value,
  27. 'crh-cyrl' => $cyrl,
  28. 'crh-latn' => $lat,
  29. ];
  30. $this->assertEquals( $result, $this->getLang()->autoConvertToAllVariants( $value ) );
  31. $value = $cyrl . ' ' . $lat;
  32. $result = [
  33. 'crh' => $value,
  34. 'crh-cyrl' => $cyrl . ' ' . $cyrl,
  35. 'crh-latn' => $lat . ' ' . $lat,
  36. ];
  37. $this->assertEquals( $result, $this->getLang()->autoConvertToAllVariants( $value ) );
  38. $value = $lat . ' ' . $cyrl;
  39. $result = [
  40. 'crh' => $value,
  41. 'crh-cyrl' => $cyrl . ' ' . $cyrl,
  42. 'crh-latn' => $lat . ' ' . $lat,
  43. ];
  44. $this->assertEquals( $result, $this->getLang()->autoConvertToAllVariants( $value ) );
  45. }
  46. public static function provideAutoConvertToAllVariantsByWord() {
  47. return [
  48. // general words, covering more of the alphabet
  49. [ 'рузгярнынъ', 'ruzgârnıñ' ], [ 'Париж', 'Parij' ], [ 'чёкюч', 'çöküç' ],
  50. [ 'элифбени', 'elifbeni' ], [ 'полициясы', 'politsiyası' ], [ 'хусусында', 'hususında' ],
  51. [ 'акъшамларны', 'aqşamlarnı' ], [ 'опькеленюв', 'öpkelenüv' ],
  52. [ 'кулюмсиреди', 'külümsiredi' ], [ 'айтмайджагъым', 'aytmaycağım' ],
  53. [ 'козьяшсыз', 'közyaşsız' ],
  54. // exception words
  55. [ 'инструменталь', 'instrumental' ], [ 'гургуль', 'gürgül' ], [ 'тюшюнмемек', 'tüşünmemek' ],
  56. // specific problem words
  57. [ 'куню', 'künü' ], [ 'сюргюнлиги', 'sürgünligi' ], [ 'озю', 'özü' ], [ 'этти', 'etti' ],
  58. [ 'эсас', 'esas' ], [ 'дёрт', 'dört' ], [ 'кельди', 'keldi' ], [ 'км²', 'km²' ],
  59. [ 'юзь', 'yüz' ], [ 'АКъШ', 'AQŞ' ], [ 'ШСДжБнен', 'ŞSCBnen' ], [ 'июль', 'iyül' ],
  60. [ 'ишгъаль', 'işğal' ], [ 'ишгъальджилерине', 'işğalcilerine' ], [ 'район', 'rayon' ],
  61. [ 'районынынъ', 'rayonınıñ' ], [ 'Ногъай', 'Noğay' ], [ 'Юрьтю', 'Yürtü' ],
  62. [ 'ватандан', 'vatandan' ], [ 'ком-кок', 'köm-kök' ], [ 'АКЪКЪЫ', 'AQQI' ],
  63. [ 'ДАГЪГЪА', 'DAĞĞA' ], [ '13-юнджи', '13-ünci' ], [ 'ДЖУРЬМЕК', 'CÜRMEK' ],
  64. [ 'джумлеси', 'cümlesi' ], [ 'ильи', 'ilyi' ], [ 'Ильи', 'İlyi' ], [ 'бруцел', 'brutsel' ],
  65. [ 'коцюб', 'kotsüb' ], [ 'плацен', 'platsen' ], [ 'эпицентр', 'epitsentr' ],
  66. // -tsin- words
  67. [ 'кетсин', 'ketsin' ], [ 'кирлетсин', 'kirletsin' ], [ 'этсин', 'etsin' ],
  68. [ 'етсин', 'yetsin' ], [ 'этсинлерми', 'etsinlermi' ], [ 'принцини', 'printsini' ],
  69. [ 'медицина', 'meditsina' ], [ 'Щетсин', 'Şçetsin' ], [ 'Щекоцины', 'Şçekotsinı' ],
  70. // regex pattern words
  71. [ 'коюнден', 'köyünden' ], [ 'аньге', 'ange' ],
  72. // multi part words
  73. [ 'эки юз', 'eki yüz' ],
  74. // affix patterns
  75. [ 'койнинъ', 'köyniñ' ], [ 'Авджыкойде', 'Avcıköyde' ], [ 'экваториаль', 'ekvatorial' ],
  76. [ 'Джанкой', 'Canköy' ], [ 'усть', 'üst' ], [ 'роль', 'rol' ], [ 'буюк', 'büyük' ],
  77. [ 'джонк', 'cönk' ],
  78. // Roman numerals vs Initials, part 1 - Roman numeral initials without spaces
  79. [ 'А.Б.Дж.Д.М. Къадырова XII', 'A.B.C.D.M. Qadırova XII' ],
  80. // Roman numerals vs Initials, part 2 - Roman numeral initials with spaces
  81. [ 'Г. Х. Ы. В. X. Л. Меметов III', 'G. H. I. V. X. L. Memetov III' ],
  82. // ALL CAPS, made up acronyms
  83. [ 'НЪАБ', 'ÑAB' ], [ 'КЪЫДЖ', 'QIC' ], [ 'ГЪУК', 'ĞUK' ], [ 'ДЖОТ', 'COT' ], [ 'ДЖА', 'CA' ],
  84. ];
  85. }
  86. /**
  87. * @dataProvider provideAutoConvertToAllVariantsByString
  88. * @covers Language::autoConvertToAllVariants
  89. *
  90. * Run tests that require some context (like Roman numerals) or with
  91. * many-to-one mappings, or other asymmetric results (like smart quotes)
  92. */
  93. public function testAutoConvertToAllVariantsByString( $result, $value ) {
  94. $this->assertEquals( $result, $this->getLang()->autoConvertToAllVariants( $value ) );
  95. }
  96. public static function provideAutoConvertToAllVariantsByString() {
  97. return [
  98. [ // Roman numerals and quotes, esp. single-letter Roman numerals at the end of a string
  99. [
  100. 'crh' => 'VI,VII IX “dört” «дёрт» XI XII I V X L C D M',
  101. 'crh-cyrl' => 'VI,VII IX «дёрт» «дёрт» XI XII I V X L C D M',
  102. 'crh-latn' => 'VI,VII IX “dört” "dört" XI XII I V X L C D M',
  103. ],
  104. 'VI,VII IX “dört” «дёрт» XI XII I V X L C D M'
  105. ],
  106. [ // Many-to-one mappings: many Cyrillic to one Latin
  107. [
  108. 'crh' => 'шофер шофёр şoför корбекул корьбекул корьбекуль körbekül',
  109. 'crh-cyrl' => 'шофер шофёр шофёр корбекул корьбекул корьбекуль корьбекуль',
  110. 'crh-latn' => 'şoför şoför şoför körbekül körbekül körbekül körbekül',
  111. ],
  112. 'шофер шофёр şoför корбекул корьбекул корьбекуль körbekül'
  113. ],
  114. [ // Many-to-one mappings: many Latin to one Cyrillic
  115. [
  116. 'crh' => 'fevqülade fevqulade февкъульаде beyude beyüde бейуде',
  117. 'crh-cyrl' => 'февкъульаде февкъульаде февкъульаде бейуде бейуде бейуде',
  118. 'crh-latn' => 'fevqülade fevqulade fevqulade beyude beyüde beyüde',
  119. ],
  120. 'fevqülade fevqulade февкъульаде beyude beyüde бейуде'
  121. ],
  122. ];
  123. }
  124. }