UNPKG

chrono-node

Version:

A natural language date parser in Javascript

192 lines (153 loc) 7.38 kB
import * as chrono from "../../src"; import { testSingleCase, testUnexpectedResult } from "../test_util"; import ENTimeExpressionParser from "../../src/locales/en/parsers/ENTimeExpressionParser"; import { Meridiem } from "../../src"; test("Test - Date + Time Expression", function () { testSingleCase(chrono, "Something happen on 2014-04-18 13:00 - 16:00 as", (result) => { expect(result.text).toBe("2014-04-18 13:00 - 16:00"); expect(result.start).toBeDate(new Date(2014, 4 - 1, 18, 13)); expect(result.end).toBeDate(new Date(2014, 4 - 1, 18, 16)); }); }); test("Test - Time Expression", function () { testSingleCase(chrono, "between 3:30-4:30pm", new Date(2020, 7 - 1, 6), (result) => { expect(result.text).toBe("3:30-4:30pm"); expect(result.start).toBeDate(new Date(2020, 7 - 1, 6, 15, 30)); expect(result.end).toBeDate(new Date(2020, 7 - 1, 6, 16, 30)); }); testSingleCase(chrono, "9:00 PST", new Date(2020, 7 - 1, 6), (result) => { expect(result.text).toBe("9:00 PST"); expect(result.start.get("hour")).toBe(9); expect(result.start.get("minute")).toBe(0); expect(result.start.get("timezoneOffset")).toBe(-480); }); }); test("Test - Quoted Expressions", function () { testSingleCase(chrono, "Want to meet for dinner (5pm EST)?", new Date(2020, 7 - 1, 6), (result) => { expect(result.text).toContain("5pm EST"); }); testSingleCase(chrono, "between '3:30-4:30pm'", new Date(2020, 7 - 1, 6), (result) => { expect(result.text).toContain("3:30-4:30pm"); expect(result.start).toBeDate(new Date(2020, 7 - 1, 6, 15, 30)); expect(result.end).toBeDate(new Date(2020, 7 - 1, 6, 16, 30)); }); testSingleCase(chrono, "The date is '2014-04-18'", (result) => { expect(result.text).toContain("2014-04-18"); expect(result.start).toBeDate(new Date(2014, 4 - 1, 18, 12)); }); }); test("Test - Strict Mode", function () { testUnexpectedResult(chrono.strict, "Tuesday"); }); test("Test - Built-in English variants", () => { testSingleCase(chrono.en, "6/10/2018", (result) => { expect(result.start).toBeDate(new Date(2018, 6 - 1, 10, 12)); }); testSingleCase(chrono.en.GB, "6/10/2018", (result) => { expect(result.start).toBeDate(new Date(2018, 10 - 1, 6, 12)); }); }); test("Test - Random text", function () { testSingleCase(chrono, "Adam <Adam@supercalendar.com> написал(а):\nThe date is 02.07.2013", (result) => { expect(result.text).toBe("02.07.2013"); }); testSingleCase(chrono, "174 November 1,2001- March 31,2002", (result) => { expect(result.text).toBe("November 1,2001- March 31,2002"); }); testSingleCase(chrono, "...Thursday, December 15, 2011 Best Available Rate ", (result) => { expect(result.text).toBe("Thursday, December 15, 2011"); expect(result.start.get("year")).toBe(2011); }); testSingleCase(chrono, "SUN 15SEP 11:05 AM - 12:50 PM", (result) => { expect(result.text).toBe("SUN 15SEP 11:05 AM - 12:50 PM"); expect(result.end.get("hour")).toBe(12); expect(result.end.get("minute")).toBe(50); }); testSingleCase(chrono, "FRI 13SEP 1:29 PM - FRI 13SEP 3:29 PM", (result) => { expect(result.text).toBe("FRI 13SEP 1:29 PM - FRI 13SEP 3:29 PM"); expect(result.start.get("day")).toBe(13); expect(result.start.get("hour")).toBe(13); expect(result.start.get("minute")).toBe(29); expect(result.end.get("day")).toBe(13); expect(result.end.get("hour")).toBe(15); expect(result.end.get("minute")).toBe(29); }); testSingleCase(chrono, "9:00 AM to 5:00 PM, Tuesday, 20 May 2013", (result) => { expect(result.text).toBe("9:00 AM to 5:00 PM, Tuesday, 20 May 2013"); expect(result.start).toBeDate(new Date(2013, 4, 20, 9, 0)); expect(result.end).toBeDate(new Date(2013, 4, 20, 17, 0)); }); testSingleCase(chrono, "Monday afternoon to last night", new Date(2017, 7 - 1, 7), (result) => { 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, "07-27-2022, 02:00 AM", new Date(2017, 7 - 1, 7), (result) => { expect(result.text).toBe("07-27-2022, 02:00 AM"); expect(result.start.get("day")).toBe(27); expect(result.start.get("month")).toBe(7); expect(result.start.get("year")).toBe(2022); expect(result.start.get("hour")).toBe(2); expect(result.start.get("meridiem")).toBe(Meridiem.AM); }); }); test("Test - Wikipedia Texts", function () { const text = "October 7, 2011, of which details were not revealed out of respect to Jobs's family.[239] " + "Apple announced on the same day that they had no plans for a public service, but were encouraging " + '"well-wishers" to send their remembrance messages to an email address created to receive such messages.[240] ' + "Sunday, October 16, 2011"; const results = chrono.parse(text, new Date(2012, 7, 10)); expect(results.length).toBe(2); { const result = results[0]; expect(result.start.get("year")).toBe(2011); expect(result.start.get("month")).toBe(10); expect(result.start.get("day")).toBe(7); expect(result.index).toBe(0); expect(result.text).toBe("October 7, 2011"); } { const result = results[1]; expect(result.start.get("year")).toBe(2011); expect(result.start.get("month")).toBe(10); expect(result.start.get("day")).toBe(16); expect(result.index).toBe(297); expect(result.text).toBe("Sunday, October 16, 2011"); } }); test("Test - Parse multiple date results", function () { const text = "I will see you at 2:30. If not I will see you somewhere between 3:30-4:30pm"; const results = chrono.parse(text, new Date(2020, 7 - 1, 6)); expect(results.length).toBe(2); { const result = results[0]; expect(result.text).toBe("at 2:30"); expect(result.start.get("year")).toBe(2020); expect(result.start.get("month")).toBe(7); expect(result.start.get("day")).toBe(6); expect(result.start.get("hour")).toBe(2); expect(result.end).toBeNull(); } { const result = results[1]; expect(result.text).toBe("3:30-4:30pm"); expect(result.start.get("hour")).toBe(15); expect(result.start.get("minute")).toBe(30); expect(result.end.get("hour")).toBe(16); expect(result.end.get("minute")).toBe(30); } }); test("Test - Customize by removing time extraction", () => { const custom = chrono.en.casual.clone(); custom.parsers = custom.parsers.filter((p) => !(p instanceof ENTimeExpressionParser)); custom.parse("Thursday 9AM"); testSingleCase(custom, "Thursday 9AM", new Date(2020, 11 - 1, 29), (result, text) => { expect(result.text).toBe("Thursday"); expect(result.start.get("year")).toBe(2020); expect(result.start.get("month")).toBe(11); expect(result.start.get("day")).toBe(26); }); });