summaryrefslogtreecommitdiffstats
path: root/packages/excalidraw/charts.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/excalidraw/charts.test.ts')
-rw-r--r--packages/excalidraw/charts.test.ts117
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]);
+ });
+ });
+});