feat(rules): 建立共享排版契约并收束 WebKit 与 Unicode 基线
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
// 在新引擎落地(回應使用者提問)。
|
||||
|
||||
import assert from "node:assert/strict";
|
||||
import { readFileSync } from "node:fs";
|
||||
import { test } from "node:test";
|
||||
|
||||
import { setupDom, countTag } from "./helpers.mjs";
|
||||
@@ -78,3 +79,42 @@ test("間隔號:姓名 · 兩側不插 jz-hws(· 屬 CJK 標點,非西文
|
||||
createJuzhen(SPACING_ONLY).render(document.body);
|
||||
assert.equal(countTag(document.querySelector("p"), "jz-hws"), 0, "· 兩側皆不應有間隙");
|
||||
});
|
||||
|
||||
// ----- ASCII 左括號(Safari 16 無 lookbehind 路徑)-----
|
||||
|
||||
test("左括號:普通英數字後補間隙,連續樣式不漏匹配", () =>
|
||||
{
|
||||
const { document } = setupDom("<p>A(b[c{中</p>");
|
||||
createJuzhen(SPACING_ONLY).render(document.body);
|
||||
assert.equal(countTag(document.querySelector("p"), "jz-hws"), 3);
|
||||
});
|
||||
|
||||
test("左括號:dot-prefixed 英數字串段不補間隙", () =>
|
||||
{
|
||||
const { document } = setupDom("<p>.foo(中</p><p>x.bar[文</p><p>.baz{字</p>");
|
||||
createJuzhen(SPACING_ONLY).render(document.body);
|
||||
for (const p of document.querySelectorAll("p"))
|
||||
{
|
||||
assert.equal(countTag(p, "jz-hws"), 0);
|
||||
}
|
||||
});
|
||||
|
||||
test("左括號:點號不在當前英數字 suffix 前時仍補間隙", () =>
|
||||
{
|
||||
const { document } = setupDom("<p>.foo-bar(中</p>");
|
||||
createJuzhen(SPACING_ONLY).render(document.body);
|
||||
assert.equal(countTag(document.querySelector("p"), "jz-hws"), 1);
|
||||
});
|
||||
|
||||
test("Safari 16 產物:spacing 源碼與發佈 JS 不得含 lookbehind 語法", () =>
|
||||
{
|
||||
const lookbehindSyntax = /\(\?<([=!])/;
|
||||
for (const path of [
|
||||
new URL("../src/typeset/spacing.ts", import.meta.url),
|
||||
new URL("../dist/juzhen.mjs", import.meta.url),
|
||||
new URL("../dist/juzhen.iife.js", import.meta.url),
|
||||
])
|
||||
{
|
||||
assert.doesNotMatch(readFileSync(path, "utf8"), lookbehindSyntax, path.pathname);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user