122 lines
3.0 KiB
TypeScript
122 lines
3.0 KiB
TypeScript
import {
|
|
Spreadsheet,
|
|
tryParseCells,
|
|
tryParseNumber,
|
|
VALID_SPREADSHEET,
|
|
} from "./charts";
|
|
|
|
describe("charts", () => {
|
|
describe("tryParseNumber", () => {
|
|
it.each<[string, number]>([
|
|
["1", 1],
|
|
["0", 0],
|
|
["-1", -1],
|
|
["0.1", 0.1],
|
|
[".1", 0.1],
|
|
["1.", 1],
|
|
["424.", 424],
|
|
["$1", 1],
|
|
["-.1", -0.1],
|
|
["-$1", -1],
|
|
["$-1", -1],
|
|
])("should correctly identify %s as numbers", (given, expected) => {
|
|
expect(tryParseNumber(given)).toEqual(expected);
|
|
});
|
|
|
|
it.each<[string]>([["a"], ["$"], ["$a"], ["-$a"]])(
|
|
"should correctly identify %s as not a number",
|
|
(given) => {
|
|
expect(tryParseNumber(given)).toBeNull();
|
|
},
|
|
);
|
|
});
|
|
|
|
describe("tryParseCells", () => {
|
|
it("Successfully parses a spreadsheet", () => {
|
|
const spreadsheet = [
|
|
["time", "value"],
|
|
["01:00", "61"],
|
|
["02:00", "-60"],
|
|
["03:00", "85"],
|
|
["04:00", "-67"],
|
|
["05:00", "54"],
|
|
["06:00", "95"],
|
|
];
|
|
|
|
const result = tryParseCells(spreadsheet);
|
|
|
|
expect(result.type).toBe(VALID_SPREADSHEET);
|
|
|
|
const { title, labels, values } = (
|
|
result as { type: typeof VALID_SPREADSHEET; spreadsheet: Spreadsheet }
|
|
).spreadsheet;
|
|
|
|
expect(title).toEqual("value");
|
|
expect(labels).toEqual([
|
|
"01:00",
|
|
"02:00",
|
|
"03:00",
|
|
"04:00",
|
|
"05:00",
|
|
"06:00",
|
|
]);
|
|
expect(values).toEqual([61, -60, 85, -67, 54, 95]);
|
|
});
|
|
|
|
it("Uses the second column as the label if it is not a number", () => {
|
|
const spreadsheet = [
|
|
["time", "value"],
|
|
["01:00", "61"],
|
|
["02:00", "-60"],
|
|
["03:00", "85"],
|
|
["04:00", "-67"],
|
|
["05:00", "54"],
|
|
["06:00", "95"],
|
|
];
|
|
|
|
const result = tryParseCells(spreadsheet);
|
|
|
|
expect(result.type).toBe(VALID_SPREADSHEET);
|
|
|
|
const { title, labels, values } = (
|
|
result as { type: typeof VALID_SPREADSHEET; spreadsheet: Spreadsheet }
|
|
).spreadsheet;
|
|
|
|
expect(title).toEqual("value");
|
|
expect(labels).toEqual([
|
|
"01:00",
|
|
"02:00",
|
|
"03:00",
|
|
"04:00",
|
|
"05:00",
|
|
"06:00",
|
|
]);
|
|
expect(values).toEqual([61, -60, 85, -67, 54, 95]);
|
|
});
|
|
|
|
it("treats the first column as labels if both columns are numbers", () => {
|
|
const spreadsheet = [
|
|
["time", "value"],
|
|
["01", "61"],
|
|
["02", "-60"],
|
|
["03", "85"],
|
|
["04", "-67"],
|
|
["05", "54"],
|
|
["06", "95"],
|
|
];
|
|
|
|
const result = tryParseCells(spreadsheet);
|
|
|
|
expect(result.type).toBe(VALID_SPREADSHEET);
|
|
|
|
const { title, labels, values } = (
|
|
result as { type: typeof VALID_SPREADSHEET; spreadsheet: Spreadsheet }
|
|
).spreadsheet;
|
|
|
|
expect(title).toEqual("value");
|
|
expect(labels).toEqual(["01", "02", "03", "04", "05", "06"]);
|
|
expect(values).toEqual([61, -60, 85, -67, 54, 95]);
|
|
});
|
|
});
|
|
});
|