diff options
Diffstat (limited to 'packages/excalidraw/charts.test.ts')
| -rw-r--r-- | packages/excalidraw/charts.test.ts | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/packages/excalidraw/charts.test.ts b/packages/excalidraw/charts.test.ts new file mode 100644 index 0000000..fcd8823 --- /dev/null +++ b/packages/excalidraw/charts.test.ts @@ -0,0 +1,117 @@ +import type { Spreadsheet } from "./charts"; +import { 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]); + }); + }); +}); |
