| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- <?php
- namespace Tests\Unit\Services;
- use App\Services\PaliTransliterationService;
- use PHPUnit\Framework\TestCase;
- class PaliTransliterationServiceTest extends TestCase
- {
- private PaliTransliterationService $service;
- protected function setUp(): void
- {
- parent::setUp();
- $this->service = new PaliTransliterationService();
- }
- /**
- * 测试缅文转罗马巴利
- */
- public function test_myanmar_to_roman_conversion(): void
- {
- // 测试基本辅音
- $this->assertEquals('ka', $this->service->myanmarToRoman('က'));
- $this->assertEquals('kha', $this->service->myanmarToRoman('ခ'));
- $this->assertEquals('ga', $this->service->myanmarToRoman('ဂ'));
- // 测试复杂组合
- $this->assertEquals('ssa', $this->service->myanmarToRoman('ဿ'));
- $this->assertEquals('ndra', $this->service->myanmarToRoman('ႁႏၵ'));
- // 测试元音标记
- $this->assertEquals('ā', $this->service->myanmarToRoman('aာ'));
- $this->assertEquals('i', $this->service->myanmarToRoman('aိ'));
- $this->assertEquals('ī', $this->service->myanmarToRoman('aီ'));
- // 测试数字
- $this->assertEquals('1', $this->service->myanmarToRoman('၁'));
- $this->assertEquals('0', $this->service->myanmarToRoman('၀'));
- // 测试标点符号
- $this->assertEquals('.', $this->service->myanmarToRoman('။'));
- $this->assertEquals(',', $this->service->myanmarToRoman('၊'));
- }
- /**
- * 测试罗马巴利转缅文
- */
- public function test_roman_to_myanmar_conversion(): void
- {
- $this->assertEquals('က', $this->service->romanToMyanmar('ka'));
- $this->assertEquals('ခ', $this->service->romanToMyanmar('kha'));
- $this->assertEquals('ဿ', $this->service->romanToMyanmar('ssa'));
- $this->assertEquals('၁', $this->service->romanToMyanmar('1'));
- }
- /**
- * 测试泰文转罗马巴利
- */
- public function test_thai_to_roman_conversion(): void
- {
- // 测试基本辅音
- $this->assertEquals('ka', $this->service->thaiToRoman('ก'));
- $this->assertEquals('kha', $this->service->thaiToRoman('ข'));
- $this->assertEquals('ga', $this->service->thaiToRoman('ค'));
- // 测试复杂组合
- $this->assertEquals('ssa', $this->service->thaiToRoman('สฺส'));
- $this->assertEquals('ndra', $this->service->thaiToRoman('นฺทฺร'));
- // 测试元音
- $this->assertEquals('ā', $this->service->thaiToRoman('า'));
- $this->assertEquals('i', $this->service->thaiToRoman('ิ'));
- // 测试数字
- $this->assertEquals('1', $this->service->thaiToRoman('๑'));
- $this->assertEquals('0', $this->service->thaiToRoman('๐'));
- // 测试标点符号 - 泰文 ฯ 转换为罗马巴利 .
- $this->assertEquals('.', $this->service->thaiToRoman('ฯ'));
- }
- /**
- * 测试罗马巴利转泰文
- */
- public function test_roman_to_thai_conversion(): void
- {
- $this->assertEquals('ก', $this->service->romanToThai('ka'));
- $this->assertEquals('ข', $this->service->romanToThai('kha'));
- $this->assertEquals('สฺส', $this->service->romanToThai('ssa'));
- $this->assertEquals('๑', $this->service->romanToThai('1'));
- }
- /**
- * 测试缅文转泰文
- */
- public function test_myanmar_to_thai_conversion(): void
- {
- $this->assertEquals('ก', $this->service->myanmarToThai('က'));
- $this->assertEquals('ข', $this->service->myanmarToThai('ခ'));
- $this->assertEquals('สฺส', $this->service->myanmarToThai('ဿ'));
- }
- /**
- * 测试泰文转缅文
- */
- public function test_thai_to_myanmar_conversion(): void
- {
- $this->assertEquals('က', $this->service->thaiToMyanmar('ก'));
- $this->assertEquals('ခ', $this->service->thaiToMyanmar('ข'));
- $this->assertEquals('ဿ', $this->service->thaiToMyanmar('สฺส'));
- }
- /**
- * 测试自动检测 - 缅文输入
- */
- public function test_auto_detect_myanmar_input(): void
- {
- $input = 'သမ္မာ'; // 缅文
- $result = $this->service->toRoman($input);
- // 验证结果包含罗马字母和可能的变音符号
- $this->assertMatchesRegularExpression('/^[a-zA-Zāīūṅñṭḍṇḷṃ]+$/', $result);
- }
- /**
- * 测试自动检测 - 泰文输入
- */
- public function test_auto_detect_thai_input(): void
- {
- $input = 'สมฺมา'; // 泰文
- $result = $this->service->toRoman($input);
- // 验证结果包含罗马字母和可能的变音符号
- $this->assertMatchesRegularExpression('/^[a-zA-Zāīūṅñṭḍṇḷṃ]+$/', $result);
- }
- /**
- * 测试自动检测 - 罗马文输入(无需转换)
- */
- public function test_auto_detect_roman_input(): void
- {
- $input = 'sammā';
- $result = $this->service->toRoman($input);
- // 应该返回原文
- $this->assertEquals($input, $result);
- }
- /**
- * 测试空字符串
- */
- public function test_empty_string_conversion(): void
- {
- $this->assertEquals('', $this->service->myanmarToRoman(''));
- $this->assertEquals('', $this->service->thaiToRoman(''));
- $this->assertEquals('', $this->service->toRoman(''));
- }
- /**
- * 测试完整单词转换 - 缅文
- */
- public function test_full_word_myanmar_conversion(): void
- {
- // 测试"法"这个词
- $myanmar = 'ဓမ္မ';
- $expected = 'dhamma';
- $this->assertEquals($expected, $this->service->myanmarToRoman($myanmar));
- }
- /**
- * 测试完整单词转换 - 泰文
- */
- public function test_full_word_thai_conversion(): void
- {
- // 测试"法"这个词
- $thai = 'ธมฺม';
- $expected = 'dhamma';
- $this->assertEquals($expected, $this->service->thaiToRoman($thai));
- }
- /**
- * 测试往返转换一致性 - 缅文
- * 注意:由于映射表的特性,往返转换可能不完全一致
- * 这里测试的是转换后再转回能得到有效的缅文
- */
- public function test_myanmar_round_trip_conversion(): void
- {
- $original = 'က';
- $roman = $this->service->myanmarToRoman($original);
- // 验证转换为罗马字母成功
- $this->assertEquals('ka', $roman);
- // 验证可以转回缅文(可能不完全相同)
- $backToMyanmar = $this->service->romanToMyanmar($roman);
- $this->assertNotEmpty($backToMyanmar);
- // 验证再次转换为罗马字母时结果一致
- $this->assertEquals($roman, $this->service->myanmarToRoman($backToMyanmar));
- }
- /**
- * 测试往返转换一致性 - 泰文
- * 注意:由于映射表的特性,往返转换可能不完全一致
- * 这里测试的是转换后再转回能得到有效的泰文
- */
- public function test_thai_round_trip_conversion(): void
- {
- $original = 'ก';
- $roman = $this->service->thaiToRoman($original);
- // 验证转换为罗马字母成功
- $this->assertEquals('ka', $roman);
- // 验证可以转回泰文(可能不完全相同)
- $backToThai = $this->service->romanToThai($roman);
- $this->assertNotEmpty($backToThai);
- // 验证再次转换为罗马字母时结果一致
- $this->assertEquals($roman, $this->service->thaiToRoman($backToThai));
- }
- /**
- * 测试混合内容(包含未映射字符)
- */
- public function test_mixed_content_with_unmapped_characters(): void
- {
- $input = 'က test ခ';
- $result = $this->service->myanmarToRoman($input);
- // 验证缅文被转换,英文保持不变
- $this->assertStringContainsString('test', $result);
- $this->assertStringContainsString('ka', $result);
- $this->assertStringContainsString('kha', $result);
- }
- /**
- * 测试特殊组合字符
- */
- public function test_special_combined_characters(): void
- {
- // 测试鼻音组合
- $this->assertEquals('ṅka', $this->service->myanmarToRoman('kaၤ'));
- $this->assertEquals('ṅga', $this->service->myanmarToRoman('gaၤ'));
- // 测试双辅音
- $this->assertEquals('ṭṭha', $this->service->myanmarToRoman('႒'));
- $this->assertEquals('ṭṭa', $this->service->myanmarToRoman('႗'));
- }
- }
|