visuddhinanda před 2 týdny
rodič
revize
76f6a5c9be
1 změnil soubory, kde provedl 65 přidání a 0 odebrání
  1. 65 0
      api-v13/tests/Unit/ExportPaliSynonymsTest.php

+ 65 - 0
api-v13/tests/Unit/ExportPaliSynonymsTest.php

@@ -0,0 +1,65 @@
+<?php
+
+use App\Console\Commands\ExportPaliSynonyms;
+
+/**
+ * 调用 ExportPaliSynonyms 的私有方法 filterSynonymTerms
+ *
+ * @param  array<int, string>  $terms
+ * @return array<int, string>
+ */
+function filterSynonymTerms(array $terms): array
+{
+    $method = new ReflectionMethod(ExportPaliSynonyms::class, 'filterSynonymTerms');
+
+    return $method->invoke(new ExportPaliSynonyms, $terms);
+}
+
+test('保留含字母或数字的 term', function () {
+    expect(filterSynonymTerms(['buddhavacana', 'buddhavacanaṃ', '心一境性', 'သမာဓိ', 'samādhi2']))
+        ->toBe(['buddhavacana', 'buddhavacanaṃ', '心一境性', 'သမာဓိ', 'samādhi2']);
+});
+
+test('丢弃会被 analyzer 完全消除的纯符号 term', function (string $term) {
+    expect(filterSynonymTerms(['khārika', $term]))->toBe(['khārika']);
+})->with([
+    '圈码数字' => '②',
+    '破折号' => '——',
+    '半个括号' => '?)',
+    '注释符号' => '(#=‹)',
+    '空字符串' => '',
+    '纯空白' => "  \t ",
+]);
+
+test('丢弃带词典源码标记的脏词条', function (string $term) {
+    expect(filterSynonymTerms([$term, 'ceteti']))->toBe(['ceteti']);
+})->with([
+    '# 开头会让整行变成注释' => '#=cetayati)',
+    '嵌套源码标记' => '(#=)(‹paññāpeti)',
+    '词源标记' => '(‹akiñcana无任何)',
+    '括号包裹的变格标注' => '(ku的离格)',
+    '方括号包裹的词根' => '[ava-hīḷanā<hīḍ]',
+    '半角尖括号' => '<upadheyya>',
+]);
+
+test('保留词中带括号的正常释义', function (string $term) {
+    expect(filterSynonymTerms(['arahant', $term]))->toBe(['arahant', $term]);
+})->with([
+    '中文补注' => '阿拉汉[果]',
+    '巴利变格补注' => 'bhesajja[ṃ]',
+    '中文夹注' => '互不分离的(俱生相应)法',
+]);
+
+test('去重并保持原顺序', function () {
+    expect(filterSynonymTerms(['eka', 'eko', 'eka', 'ekaṃ', 'eko']))
+        ->toBe(['eka', 'eko', 'ekaṃ']);
+});
+
+test('term 首尾空白被去掉', function () {
+    expect(filterSynonymTerms([' sati ', "jetavana\t"]))->toBe(['sati', 'jetavana']);
+});
+
+test('保留含空格的多词 term', function () {
+    expect(filterSynonymTerms(['jetavana', 'jetavana monastery']))
+        ->toBe(['jetavana', 'jetavana monastery']);
+});