From a6c5596f024384d42077113331db6c242161298c Mon Sep 17 00:00:00 2001 From: Rene Saarsoo Date: Mon, 21 Sep 2020 17:33:41 +0300 Subject: [PATCH] Allow more whitespace --- src/parser/parser.test.ts | 49 ++++++++++++++++++++++++++++++--------- src/parser/tokenizer.ts | 2 +- 2 files changed, 39 insertions(+), 12 deletions(-) diff --git a/src/parser/parser.test.ts b/src/parser/parser.test.ts index 6ba55db..01f8cf5 100644 --- a/src/parser/parser.test.ts +++ b/src/parser/parser.test.ts @@ -137,17 +137,6 @@ Cooldown: 5:30 70%..45% ).toThrowErrorMatchingInlineSnapshot(`"Duration not specified"`); }); - it("parses correct duration formats", () => { - expect(parseInterval("Interval: 0:10 50%").duration).toEqual(10); - expect(parseInterval("Interval: 00:10 50%").duration).toEqual(10); - expect(parseInterval("Interval: 0:00:10 50%").duration).toEqual(10); - expect(parseInterval("Interval: 0:02:05 50%").duration).toEqual(125); - expect(parseInterval("Interval: 1:00:00 50%").duration).toEqual(3600); - expect(parseInterval("Interval: 1:00:0 50%").duration).toEqual(3600); - expect(parseInterval("Interval: 1:0:0 50%").duration).toEqual(3600); - expect(parseInterval("Interval: 10:00:00 50%").duration).toEqual(36000); - }); - it("allows any order for interval parameters", () => { expect(parseInterval("Interval: 50% 00:10")).toMatchInlineSnapshot(` Object { @@ -184,6 +173,44 @@ Cooldown: 5:30 70%..45% `); }); + it("allows whitespace between interval parameters", () => { + expect(parseInterval("Interval: 50% 00:10 100rpm")) + .toMatchInlineSnapshot(` + Object { + "cadence": 100, + "duration": 10, + "intensity": Object { + "from": 0.5, + "to": 0.5, + }, + "type": "Interval", + } + `); + expect(parseInterval("Interval: \t 50% \t 00:10 \t\t 100rpm \t")) + .toMatchInlineSnapshot(` + Object { + "cadence": 100, + "duration": 10, + "intensity": Object { + "from": 0.5, + "to": 0.5, + }, + "type": "Interval", + } + `); + }); + + it("parses correct duration formats", () => { + expect(parseInterval("Interval: 0:10 50%").duration).toEqual(10); + expect(parseInterval("Interval: 00:10 50%").duration).toEqual(10); + expect(parseInterval("Interval: 0:00:10 50%").duration).toEqual(10); + expect(parseInterval("Interval: 0:02:05 50%").duration).toEqual(125); + expect(parseInterval("Interval: 1:00:00 50%").duration).toEqual(3600); + expect(parseInterval("Interval: 1:00:0 50%").duration).toEqual(3600); + expect(parseInterval("Interval: 1:0:0 50%").duration).toEqual(3600); + expect(parseInterval("Interval: 10:00:00 50%").duration).toEqual(36000); + }); + it("throws error for incorrect duration formats", () => { expect(() => parseInterval("Interval: 10 50%") diff --git a/src/parser/tokenizer.ts b/src/parser/tokenizer.ts index b87ec0e..8e83a83 100644 --- a/src/parser/tokenizer.ts +++ b/src/parser/tokenizer.ts @@ -77,7 +77,7 @@ const tokenizeParams = (type: LabelTokenValue, text: string): Token[] => { case "Rest": case "Interval": case "Cooldown": - return text.split(" ").map(tokenizeValueParam); + return text.split(/\s+/).map(tokenizeValueParam); } };