| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- import { describe, expect, test } from "bun:test";
- import {
- partiallySanitizeUnicode,
- recursivelySanitizeUnicode,
- } from "../sanitization";
- // ─── partiallySanitizeUnicode ───────────────────────────────────────────
- describe("partiallySanitizeUnicode", () => {
- test("preserves normal ASCII text", () => {
- expect(partiallySanitizeUnicode("hello world")).toBe("hello world");
- });
- test("preserves CJK characters", () => {
- expect(partiallySanitizeUnicode("你好世界")).toBe("你好世界");
- });
- test("removes zero-width spaces", () => {
- expect(partiallySanitizeUnicode("hello\u200Bworld")).toBe("helloworld");
- });
- test("removes BOM", () => {
- expect(partiallySanitizeUnicode("\uFEFFhello")).toBe("hello");
- });
- test("removes directional formatting", () => {
- expect(partiallySanitizeUnicode("hello\u202Aworld")).toBe("helloworld");
- });
- test("removes private use area characters", () => {
- expect(partiallySanitizeUnicode("hello\uE000world")).toBe("helloworld");
- });
- test("handles empty string", () => {
- expect(partiallySanitizeUnicode("")).toBe("");
- });
- test("handles string with only dangerous characters", () => {
- const result = partiallySanitizeUnicode("\u200B\u200C\u200D\uFEFF");
- expect(result.length).toBeLessThanOrEqual(1); // ZWJ may survive NFKC
- });
- });
- // ─── recursivelySanitizeUnicode ─────────────────────────────────────────
- describe("recursivelySanitizeUnicode", () => {
- test("sanitizes string values", () => {
- expect(recursivelySanitizeUnicode("hello\u200Bworld")).toBe("helloworld");
- });
- test("sanitizes array elements", () => {
- const result = recursivelySanitizeUnicode(["a\u200Bb", "c\uFEFFd"]);
- expect(result).toEqual(["ab", "cd"]);
- });
- test("sanitizes object values recursively", () => {
- const result = recursivelySanitizeUnicode({
- key: "val\u200Bue",
- nested: { inner: "te\uFEFFst" },
- });
- expect(result).toEqual({ key: "value", nested: { inner: "test" } });
- });
- test("preserves numbers", () => {
- expect(recursivelySanitizeUnicode(42)).toBe(42);
- });
- test("preserves booleans", () => {
- expect(recursivelySanitizeUnicode(true)).toBe(true);
- });
- test("preserves null", () => {
- expect(recursivelySanitizeUnicode(null)).toBeNull();
- });
- });
|