← Files Biological Sequence & Alignment ViewerARCHIVED FILE
src/spreadsheet-safety.test.ts
1.59 KB · Sep 30, 2026 · 23:01 UTC
import { describe, expect, it } from "vitest";
import { neutralizeSpreadsheetFormula } from "./spreadsheet-safety";
describe("spreadsheet formula safety", () => {
it.each([
"=HYPERLINK(\"https://example.invalid\",\"public fixture\")",
"+SUM(1,2)",
"-SUM(1,2)",
"@SUM(1,2)",
])("neutralizes a formula beginning with %s", (value) => {
expect(neutralizeSpreadsheetFormula(value)).toBe(`'${value}`);
});
it.each([
" ",
"\t",
"\r",
"\n",
"\u0000",
"\u001b",
"\u00a0",
"\u2003",
"\u200b",
"\u202e",
"\u2060",
"\ufeff",
"\ufeff\u200b \t",
])("neutralizes a formula after ignored prefix %j", (prefix) => {
const value = `${prefix}=SUM(1,2)`;
expect(neutralizeSpreadsheetFormula(value)).toBe(`'${value}`);
});
it.each([
"\uff1dSUM(1,2)",
"\uff0bSUM(1,2)",
"\uff0dSUM(1,2)",
"\uff20SUM(1,2)",
"\ufe66SUM(1,2)",
"\ufe62SUM(1,2)",
])("neutralizes compatibility-equivalent operators in %s", (value) => {
expect(neutralizeSpreadsheetFormula(value)).toBe(`'${value}`);
});
it.each([
"",
" ",
"\ufeff",
"-",
"+",
"\t-",
"URS0000D6941A",
"CCNA2_MOUSE/171-297",
"chr22:1001-1567",
"already = ordinary text",
"'=SUM(1,2)",
])("preserves a nonformula biological value %j", (value) => {
expect(neutralizeSpreadsheetFormula(value)).toBe(value);
});
it("does not repeatedly modify a neutralized cell", () => {
const neutralized = neutralizeSpreadsheetFormula("\u200b=SUM(1,2)");
expect(neutralizeSpreadsheetFormula(neutralized)).toBe(neutralized);
});
});
SHA-256: c10a0340c5257c1788820e6e32d5209e7a53fb0bf202bf4534c0f074f76bf2df