ExportPaliSynonymsTest.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. use App\Console\Commands\ExportPaliSynonyms;
  3. /**
  4. * 调用 ExportPaliSynonyms 的私有方法 filterSynonymTerms
  5. *
  6. * @param array<int, string> $terms
  7. * @return array<int, string>
  8. */
  9. function filterSynonymTerms(array $terms): array
  10. {
  11. $method = new ReflectionMethod(ExportPaliSynonyms::class, 'filterSynonymTerms');
  12. return $method->invoke(new ExportPaliSynonyms, $terms);
  13. }
  14. test('保留含字母或数字的 term', function () {
  15. expect(filterSynonymTerms(['buddhavacana', 'buddhavacanaṃ', '心一境性', 'သမာဓိ', 'samādhi2']))
  16. ->toBe(['buddhavacana', 'buddhavacanaṃ', '心一境性', 'သမာဓိ', 'samādhi2']);
  17. });
  18. test('丢弃会被 analyzer 完全消除的纯符号 term', function (string $term) {
  19. expect(filterSynonymTerms(['khārika', $term]))->toBe(['khārika']);
  20. })->with([
  21. '圈码数字' => '②',
  22. '破折号' => '——',
  23. '半个括号' => '?)',
  24. '注释符号' => '(#=‹)',
  25. '空字符串' => '',
  26. '纯空白' => " \t ",
  27. ]);
  28. test('丢弃带词典源码标记的脏词条', function (string $term) {
  29. expect(filterSynonymTerms([$term, 'ceteti']))->toBe(['ceteti']);
  30. })->with([
  31. '# 开头会让整行变成注释' => '#=cetayati)',
  32. '嵌套源码标记' => '(#=)(‹paññāpeti)',
  33. '词源标记' => '(‹akiñcana无任何)',
  34. '括号包裹的变格标注' => '(ku的离格)',
  35. '方括号包裹的词根' => '[ava-hīḷanā<hīḍ]',
  36. '半角尖括号' => '<upadheyya>',
  37. ]);
  38. test('保留词中带括号的正常释义', function (string $term) {
  39. expect(filterSynonymTerms(['arahant', $term]))->toBe(['arahant', $term]);
  40. })->with([
  41. '中文补注' => '阿拉汉[果]',
  42. '巴利变格补注' => 'bhesajja[ṃ]',
  43. '中文夹注' => '互不分离的(俱生相应)法',
  44. ]);
  45. test('去重并保持原顺序', function () {
  46. expect(filterSynonymTerms(['eka', 'eko', 'eka', 'ekaṃ', 'eko']))
  47. ->toBe(['eka', 'eko', 'ekaṃ']);
  48. });
  49. test('term 首尾空白被去掉', function () {
  50. expect(filterSynonymTerms([' sati ', "jetavana\t"]))->toBe(['sati', 'jetavana']);
  51. });
  52. test('保留含空格的多词 term', function () {
  53. expect(filterSynonymTerms(['jetavana', 'jetavana monastery']))
  54. ->toBe(['jetavana', 'jetavana monastery']);
  55. });