From cbc21ab445646551f612a63e4e7871787e58bb9e Mon Sep 17 00:00:00 2001 From: Andrew Pomeroy Date: Thu, 29 Dec 2022 14:13:10 -0800 Subject: [PATCH] Add until/till/through as date/time range expression operators --- .../en/parsers/ENTimeExpressionParser.ts | 2 +- .../en/refiners/ENMergeDateRangeRefiner.ts | 2 +- test/en/en.test.ts | 2 + test/en/en_time_exp.test.ts | 42 +++++++++++++++++++ 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/locales/en/parsers/ENTimeExpressionParser.ts b/src/locales/en/parsers/ENTimeExpressionParser.ts index f7b52033..57b23631 100644 --- a/src/locales/en/parsers/ENTimeExpressionParser.ts +++ b/src/locales/en/parsers/ENTimeExpressionParser.ts @@ -9,7 +9,7 @@ export default class ENTimeExpressionParser extends AbstractTimeExpressionParser } followingPhase(): string { - return "\\s*(?:\\-|\\–|\\~|\\〜|to|\\?)\\s*"; + return "\\s*(?:\\-|\\–|\\~|\\〜|to|until|through|till|\\?)\\s*"; } primaryPrefix(): string { diff --git a/src/locales/en/refiners/ENMergeDateRangeRefiner.ts b/src/locales/en/refiners/ENMergeDateRangeRefiner.ts index 8910f36a..f3f33a17 100644 --- a/src/locales/en/refiners/ENMergeDateRangeRefiner.ts +++ b/src/locales/en/refiners/ENMergeDateRangeRefiner.ts @@ -12,6 +12,6 @@ import AbstractMergeDateRangeRefiner from "../../../common/refiners/AbstractMerg */ export default class ENMergeDateRangeRefiner extends AbstractMergeDateRangeRefiner { patternBetween(): RegExp { - return /^\s*(to|-)\s*$/i; + return /^\s*(to|-|–|until|through|till)\s*$/i; } } diff --git a/test/en/en.test.ts b/test/en/en.test.ts index 76712337..c38b20fa 100644 --- a/test/en/en.test.ts +++ b/test/en/en.test.ts @@ -95,6 +95,8 @@ test("Test - Random text", function () { expect(result.text).toBe("Monday afternoon to last night"); expect(result.start.get("day")).toBe(3); expect(result.start.get("month")).toBe(7); + expect(result.end.get("day")).toBe(7); + expect(result.end.get("month")).toBe(7); }); testSingleCase(chrono, "03-27-2022, 02:00 AM", new Date(2017, 7 - 1, 7), (result) => { diff --git a/test/en/en_time_exp.test.ts b/test/en/en_time_exp.test.ts index 05699c22..c5c559a8 100644 --- a/test/en/en_time_exp.test.ts +++ b/test/en/en_time_exp.test.ts @@ -38,6 +38,48 @@ test("Test - Time range expression", function () { expect(result.end.get("second")).toBe(0); expect(result.end.get("meridiem")).toBe(Meridiem.PM); }); + + testSingleCase(chrono, "10:00:00 until 21:45:00", new Date(2016, 10 - 1, 1, 11), (result, text) => { + expect(result.text).toBe(text); + + expect(result.start.get("hour")).toBe(10); + expect(result.start.get("minute")).toBe(0); + expect(result.start.get("second")).toBe(0); + expect(result.start.get("meridiem")).toBe(Meridiem.AM); + + expect(result.end.get("hour")).toBe(21); + expect(result.end.get("minute")).toBe(45); + expect(result.end.get("second")).toBe(0); + expect(result.end.get("meridiem")).toBe(Meridiem.PM); + }); + + testSingleCase(chrono, "10:00:00 till 21:45:00", new Date(2016, 10 - 1, 1, 11), (result, text) => { + expect(result.text).toBe(text); + + expect(result.start.get("hour")).toBe(10); + expect(result.start.get("minute")).toBe(0); + expect(result.start.get("second")).toBe(0); + expect(result.start.get("meridiem")).toBe(Meridiem.AM); + + expect(result.end.get("hour")).toBe(21); + expect(result.end.get("minute")).toBe(45); + expect(result.end.get("second")).toBe(0); + expect(result.end.get("meridiem")).toBe(Meridiem.PM); + }); + + testSingleCase(chrono, "10:00:00 through 21:45:00", new Date(2016, 10 - 1, 1, 11), (result, text) => { + expect(result.text).toBe(text); + + expect(result.start.get("hour")).toBe(10); + expect(result.start.get("minute")).toBe(0); + expect(result.start.get("second")).toBe(0); + expect(result.start.get("meridiem")).toBe(Meridiem.AM); + + expect(result.end.get("hour")).toBe(21); + expect(result.end.get("minute")).toBe(45); + expect(result.end.get("second")).toBe(0); + expect(result.end.get("meridiem")).toBe(Meridiem.PM); + }); }); test("Test - Casual time number expression", function () {