sendou.ink/app/utils/compression.test.ts
2026-07-31 09:51:49 +03:00

37 lines
1.2 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { compressToBase64, decompressFromBase64 } from "./compression";
describe("compressToBase64 & decompressFromBase64", () => {
it("round-trips a string", () => {
const value = JSON.stringify({ name: "trophy", mesh: [1, 2, 3] });
expect(decompressFromBase64(compressToBase64(value))).toBe(value);
});
it("round-trips unicode content", () => {
const value = "tröphy \u{1f3c6} テスト";
expect(decompressFromBase64(compressToBase64(value))).toBe(value);
});
it("round-trips with the url safe alphabet", () => {
const value = "a".repeat(1000) + JSON.stringify({ b: [4, 5, 6] });
const compressed = compressToBase64(value, { urlSafe: true });
expect(compressed).not.toMatch(/[+/=]/);
expect(decompressFromBase64(compressed)).toBe(value);
});
it("returns null for corrupt input", () => {
expect(decompressFromBase64("!!!not base64!!!")).toBeNull();
expect(decompressFromBase64(btoa("not deflate data"))).toBeNull();
expect(decompressFromBase64("")).toBeNull();
});
it("returns null for truncated input", () => {
const compressed = compressToBase64("some longer input to compress");
expect(decompressFromBase64(compressed.slice(0, 4))).toBeNull();
});
});