Files
claude-code/src/utils/__tests__/xml.test.ts
claude-code-best cad6409bfe test: 添加 Utils 纯函数单元测试 (测试计划 02)
覆盖 xml, hash, stringUtils, semver, uuid, format, frontmatterParser,
file, glob, diff 共 10 个模块的纯函数测试。
json.ts 因模块加载链路过重暂跳过。
共 190 个测试用例(含已有 array/set)全部通过。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 22:03:02 +08:00

43 lines
1.1 KiB
TypeScript

import { describe, expect, test } from "bun:test";
import { escapeXml, escapeXmlAttr } from "../xml";
describe("escapeXml", () => {
test("escapes ampersand", () => {
expect(escapeXml("a & b")).toBe("a &amp; b");
});
test("escapes less-than", () => {
expect(escapeXml("<div>")).toBe("&lt;div&gt;");
});
test("escapes greater-than", () => {
expect(escapeXml("a > b")).toBe("a &gt; b");
});
test("escapes multiple special chars", () => {
expect(escapeXml("<a & b>")).toBe("&lt;a &amp; b&gt;");
});
test("returns empty string unchanged", () => {
expect(escapeXml("")).toBe("");
});
test("returns normal text unchanged", () => {
expect(escapeXml("hello world")).toBe("hello world");
});
});
describe("escapeXmlAttr", () => {
test("escapes double quotes", () => {
expect(escapeXmlAttr('say "hello"')).toBe("say &quot;hello&quot;");
});
test("escapes single quotes", () => {
expect(escapeXmlAttr("it's")).toBe("it&apos;s");
});
test("escapes all special chars", () => {
expect(escapeXmlAttr('<a & "b">')).toBe("&lt;a &amp; &quot;b&quot;&gt;");
});
});