2
0

PaliTransliterationServiceTest.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <?php
  2. namespace Tests\Unit\Services;
  3. use App\Services\PaliTransliterationService;
  4. use PHPUnit\Framework\TestCase;
  5. class PaliTransliterationServiceTest extends TestCase
  6. {
  7. private PaliTransliterationService $service;
  8. protected function setUp(): void
  9. {
  10. parent::setUp();
  11. $this->service = new PaliTransliterationService();
  12. }
  13. /**
  14. * 测试缅文转罗马巴利
  15. */
  16. public function test_myanmar_to_roman_conversion(): void
  17. {
  18. // 测试基本辅音
  19. $this->assertEquals('ka', $this->service->myanmarToRoman('က'));
  20. $this->assertEquals('kha', $this->service->myanmarToRoman('ခ'));
  21. $this->assertEquals('ga', $this->service->myanmarToRoman('ဂ'));
  22. // 测试复杂组合
  23. $this->assertEquals('ssa', $this->service->myanmarToRoman('ဿ'));
  24. $this->assertEquals('ndra', $this->service->myanmarToRoman('ႁႏၵ'));
  25. // 测试元音标记
  26. $this->assertEquals('ā', $this->service->myanmarToRoman('aာ'));
  27. $this->assertEquals('i', $this->service->myanmarToRoman('aိ'));
  28. $this->assertEquals('ī', $this->service->myanmarToRoman('aီ'));
  29. // 测试数字
  30. $this->assertEquals('1', $this->service->myanmarToRoman('၁'));
  31. $this->assertEquals('0', $this->service->myanmarToRoman('၀'));
  32. // 测试标点符号
  33. $this->assertEquals('.', $this->service->myanmarToRoman('။'));
  34. $this->assertEquals(',', $this->service->myanmarToRoman('၊'));
  35. }
  36. /**
  37. * 测试罗马巴利转缅文
  38. */
  39. public function test_roman_to_myanmar_conversion(): void
  40. {
  41. $this->assertEquals('က', $this->service->romanToMyanmar('ka'));
  42. $this->assertEquals('ခ', $this->service->romanToMyanmar('kha'));
  43. $this->assertEquals('ဿ', $this->service->romanToMyanmar('ssa'));
  44. $this->assertEquals('၁', $this->service->romanToMyanmar('1'));
  45. }
  46. /**
  47. * 测试泰文转罗马巴利
  48. */
  49. public function test_thai_to_roman_conversion(): void
  50. {
  51. // 测试基本辅音
  52. $this->assertEquals('ka', $this->service->thaiToRoman('ก'));
  53. $this->assertEquals('kha', $this->service->thaiToRoman('ข'));
  54. $this->assertEquals('ga', $this->service->thaiToRoman('ค'));
  55. // 测试复杂组合
  56. $this->assertEquals('ssa', $this->service->thaiToRoman('สฺส'));
  57. $this->assertEquals('ndra', $this->service->thaiToRoman('นฺทฺร'));
  58. // 测试元音
  59. $this->assertEquals('ā', $this->service->thaiToRoman('า'));
  60. $this->assertEquals('i', $this->service->thaiToRoman('ิ'));
  61. // 测试数字
  62. $this->assertEquals('1', $this->service->thaiToRoman('๑'));
  63. $this->assertEquals('0', $this->service->thaiToRoman('๐'));
  64. // 测试标点符号 - 泰文 ฯ 转换为罗马巴利 .
  65. $this->assertEquals('.', $this->service->thaiToRoman('ฯ'));
  66. }
  67. /**
  68. * 测试罗马巴利转泰文
  69. */
  70. public function test_roman_to_thai_conversion(): void
  71. {
  72. $this->assertEquals('ก', $this->service->romanToThai('ka'));
  73. $this->assertEquals('ข', $this->service->romanToThai('kha'));
  74. $this->assertEquals('สฺส', $this->service->romanToThai('ssa'));
  75. $this->assertEquals('๑', $this->service->romanToThai('1'));
  76. }
  77. /**
  78. * 测试缅文转泰文
  79. */
  80. public function test_myanmar_to_thai_conversion(): void
  81. {
  82. $this->assertEquals('ก', $this->service->myanmarToThai('က'));
  83. $this->assertEquals('ข', $this->service->myanmarToThai('ခ'));
  84. $this->assertEquals('สฺส', $this->service->myanmarToThai('ဿ'));
  85. }
  86. /**
  87. * 测试泰文转缅文
  88. */
  89. public function test_thai_to_myanmar_conversion(): void
  90. {
  91. $this->assertEquals('က', $this->service->thaiToMyanmar('ก'));
  92. $this->assertEquals('ခ', $this->service->thaiToMyanmar('ข'));
  93. $this->assertEquals('ဿ', $this->service->thaiToMyanmar('สฺส'));
  94. }
  95. /**
  96. * 测试自动检测 - 缅文输入
  97. */
  98. public function test_auto_detect_myanmar_input(): void
  99. {
  100. $input = 'သမ္မာ'; // 缅文
  101. $result = $this->service->toRoman($input);
  102. // 验证结果包含罗马字母和可能的变音符号
  103. $this->assertMatchesRegularExpression('/^[a-zA-Zāīūṅñṭḍṇḷṃ]+$/', $result);
  104. }
  105. /**
  106. * 测试自动检测 - 泰文输入
  107. */
  108. public function test_auto_detect_thai_input(): void
  109. {
  110. $input = 'สมฺมา'; // 泰文
  111. $result = $this->service->toRoman($input);
  112. // 验证结果包含罗马字母和可能的变音符号
  113. $this->assertMatchesRegularExpression('/^[a-zA-Zāīūṅñṭḍṇḷṃ]+$/', $result);
  114. }
  115. /**
  116. * 测试自动检测 - 罗马文输入(无需转换)
  117. */
  118. public function test_auto_detect_roman_input(): void
  119. {
  120. $input = 'sammā';
  121. $result = $this->service->toRoman($input);
  122. // 应该返回原文
  123. $this->assertEquals($input, $result);
  124. }
  125. /**
  126. * 测试空字符串
  127. */
  128. public function test_empty_string_conversion(): void
  129. {
  130. $this->assertEquals('', $this->service->myanmarToRoman(''));
  131. $this->assertEquals('', $this->service->thaiToRoman(''));
  132. $this->assertEquals('', $this->service->toRoman(''));
  133. }
  134. /**
  135. * 测试完整单词转换 - 缅文
  136. */
  137. public function test_full_word_myanmar_conversion(): void
  138. {
  139. // 测试"法"这个词
  140. $myanmar = 'ဓမ္မ';
  141. $expected = 'dhamma';
  142. $this->assertEquals($expected, $this->service->myanmarToRoman($myanmar));
  143. }
  144. /**
  145. * 测试完整单词转换 - 泰文
  146. */
  147. public function test_full_word_thai_conversion(): void
  148. {
  149. // 测试"法"这个词
  150. $thai = 'ธมฺม';
  151. $expected = 'dhamma';
  152. $this->assertEquals($expected, $this->service->thaiToRoman($thai));
  153. }
  154. /**
  155. * 测试往返转换一致性 - 缅文
  156. * 注意:由于映射表的特性,往返转换可能不完全一致
  157. * 这里测试的是转换后再转回能得到有效的缅文
  158. */
  159. public function test_myanmar_round_trip_conversion(): void
  160. {
  161. $original = 'က';
  162. $roman = $this->service->myanmarToRoman($original);
  163. // 验证转换为罗马字母成功
  164. $this->assertEquals('ka', $roman);
  165. // 验证可以转回缅文(可能不完全相同)
  166. $backToMyanmar = $this->service->romanToMyanmar($roman);
  167. $this->assertNotEmpty($backToMyanmar);
  168. // 验证再次转换为罗马字母时结果一致
  169. $this->assertEquals($roman, $this->service->myanmarToRoman($backToMyanmar));
  170. }
  171. /**
  172. * 测试往返转换一致性 - 泰文
  173. * 注意:由于映射表的特性,往返转换可能不完全一致
  174. * 这里测试的是转换后再转回能得到有效的泰文
  175. */
  176. public function test_thai_round_trip_conversion(): void
  177. {
  178. $original = 'ก';
  179. $roman = $this->service->thaiToRoman($original);
  180. // 验证转换为罗马字母成功
  181. $this->assertEquals('ka', $roman);
  182. // 验证可以转回泰文(可能不完全相同)
  183. $backToThai = $this->service->romanToThai($roman);
  184. $this->assertNotEmpty($backToThai);
  185. // 验证再次转换为罗马字母时结果一致
  186. $this->assertEquals($roman, $this->service->thaiToRoman($backToThai));
  187. }
  188. /**
  189. * 测试混合内容(包含未映射字符)
  190. */
  191. public function test_mixed_content_with_unmapped_characters(): void
  192. {
  193. $input = 'က test ခ';
  194. $result = $this->service->myanmarToRoman($input);
  195. // 验证缅文被转换,英文保持不变
  196. $this->assertStringContainsString('test', $result);
  197. $this->assertStringContainsString('ka', $result);
  198. $this->assertStringContainsString('kha', $result);
  199. }
  200. /**
  201. * 测试特殊组合字符
  202. */
  203. public function test_special_combined_characters(): void
  204. {
  205. // 测试鼻音组合
  206. $this->assertEquals('ṅka', $this->service->myanmarToRoman('kaၤ'));
  207. $this->assertEquals('ṅga', $this->service->myanmarToRoman('gaၤ'));
  208. // 测试双辅音
  209. $this->assertEquals('ṭṭha', $this->service->myanmarToRoman('႒'));
  210. $this->assertEquals('ṭṭa', $this->service->myanmarToRoman('႗'));
  211. }
  212. }