test: 三分類優先序契約——pill 行為覆蓋 isolate(兩端補隙同口徑、雙命中 pill 勝出)

實證後鎖定契約:pill 與 isolate 之邊界口徑完全相同(同一段 processPills 邊界處理,
兩端補隙/斷 run/斷相鄰/不可切分),差異僅在內部(pill 不可見、isolate 照常);
同一元素同時命中兩選擇器時 pill 語義勝出(collectRuns/jiyaAdjacency 均 pill 先判)。
新增契約測試(113 全綠);README 三分類要點+types.ts 選項註記補優先序說明。
This commit is contained in:
2026-06-12 17:23:11 +08:00
parent c4e8c6cfd5
commit 65a9df561e
4 changed files with 17 additions and 2 deletions
+11
View File
@@ -1093,6 +1093,17 @@ test("isolate revertmark 整綁+邊界間隙還原——DOM 回原樣", ()
assert.equal(document.querySelector("p").innerHTML, before, "render→revert 還原一致(I6");
});
test("三分類優先序:pill 行為覆蓋 isolate——兩端補隙同口徑,雙選擇器同命中時 pill 勝出", () =>
{
// pill 之邊界口徑=isolate(兩端補隙),差異僅在內部;同一元素同時命中
// pillSelector 與 isolateSelector 時,pill 語義(內部不可見)勝出。
const { document } = setupDom('<p lang="zh-Hans">前文<mark class="x">內,文</mark>後文</p>');
createJuzhen({ pillSelector: ".x", isolateSelector: "mark", jinze: false })
.render(document.body);
assert.equal(countTag(document.body, "jz-hws"), 2, "兩端各一間隙(同 isolate 口徑)");
assert.equal(countTag(document.body, "mark jz-char"), 0, "內部不可見(pill 勝出,標點不 charify");
});
// ----- v1 相容層移除 -----
test("v1 相容層已移除:createCjkAutospace 不再導出(消費端已全數遷移 v2 API)", async () =>