UNPKG

10.7 kBPlain TextView Raw
1import * as chrono from "../../src";
2import { testSingleCase, testUnexpectedResult, testWithExpectedDate } from "../test_util";
3
4test("Test - Parsing Offset Expression", function () {
5 testSingleCase(chrono, " 04/2016 ", new Date(2012, 7, 10), (result) => {
6 expect(result.index).toBe(4);
7 expect(result.text).toBe("04/2016");
8 });
9});
10
11test("Test - Single Expression (MM/dd/yyyy)", function () {
12 testSingleCase(chrono, "8/10/2012", new Date(2012, 7, 10), (result) => {
13 expect(result.start).not.toBeNull();
14 expect(result.start.get("year")).toBe(2012);
15 expect(result.start.get("month")).toBe(8);
16 expect(result.start.get("day")).toBe(10);
17
18 expect(result.index).toBe(0);
19 expect(result.text).toBe("8/10/2012");
20
21 expect(result.start.isCertain("day")).toBe(true);
22 expect(result.start.isCertain("month")).toBe(true);
23 expect(result.start.isCertain("year")).toBe(true);
24
25 expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12));
26 });
27
28 testSingleCase(chrono, ": 8/1/2012", new Date(2012, 7, 10), (result) => {
29 expect(result.start).not.toBeNull();
30 expect(result.start.get("year")).toBe(2012);
31 expect(result.start.get("month")).toBe(8);
32 expect(result.start.get("day")).toBe(1);
33
34 expect(result.index).toBe(2);
35 expect(result.text).toBe("8/1/2012");
36
37 expect(result.start).toBeDate(new Date(2012, 8 - 1, 1, 12));
38 });
39
40 testSingleCase(chrono, "The Deadline is 8/10/2012", new Date(2012, 7, 10), (result) => {
41 expect(result.index).toBe(16);
42 expect(result.text).toBe("8/10/2012");
43
44 expect(result.start).toBeDate(new Date(2012, 7, 10, 12));
45 });
46
47 testSingleCase(chrono, "The Deadline is Tuesday 11/3/2015", new Date(2015, 10, 3), (result) => {
48 expect(result.index).toBe(16);
49 expect(result.text).toBe("Tuesday 11/3/2015");
50
51 expect(result.start).toBeDate(new Date(2015, 10, 3, 12));
52 });
53
54 testSingleCase(chrono.strict, "2/28/2014", (result) => {
55 expect(result.text).toBe("2/28/2014");
56 });
57
58 testWithExpectedDate(chrono.strict, "12-30-16", new Date(2016, 12 - 1, 30, 12));
59
60 testSingleCase(chrono.strict, "Friday 12-30-16", (result) => {
61 expect(result.text).toBe("Friday 12-30-16");
62 expect(result).toBeDate(new Date(2016, 12 - 1, 30, 12));
63 });
64});
65
66test("Test - Single Expression Little-Endian (dd/MM/yyyy)", function () {
67 testSingleCase(chrono.en.GB, "8/10/2012", new Date(2012, 7, 10), (result) => {
68 expect(result.start).not.toBeNull();
69 expect(result.start.get("year")).toBe(2012);
70 expect(result.start.get("month")).toBe(10);
71 expect(result.start.get("day")).toBe(8);
72
73 expect(result.index).toBe(0);
74 expect(result.text).toBe("8/10/2012");
75
76 expect(result.start).toBeDate(new Date(2012, 10 - 1, 8, 12));
77 });
78
79 testWithExpectedDate(chrono.strict, "30-12-16", new Date(2016, 12 - 1, 30, 12));
80
81 testSingleCase(chrono.strict, "Friday 30-12-16", (result) => {
82 expect(result.text).toBe("Friday 30-12-16");
83 expect(result).toBeDate(new Date(2016, 12 - 1, 30, 12));
84 });
85});
86
87test("Test - Single Expression Little-Endian with Month name", function () {
88 testSingleCase(chrono.en.GB, "8/Oct/2012", new Date(2012, 7, 10), (result) => {
89 expect(result.start).not.toBeNull();
90 expect(result.start.get("year")).toBe(2012);
91 expect(result.start.get("month")).toBe(10);
92 expect(result.start.get("day")).toBe(8);
93
94 expect(result.index).toBe(0);
95 expect(result.text).toBe("8/Oct/2012");
96
97 expect(result.start).toBeDate(new Date(2012, 10 - 1, 8, 12));
98 });
99
100 testSingleCase(chrono.strict, "06/Nov/2023", (result) => {
101 expect(result.text).toBe("06/Nov/2023");
102 expect(result).toBeDate(new Date(2023, 11 - 1, 6, 12));
103 });
104
105 testSingleCase(chrono.strict, "06/Nov/2023:06:36:02", (result) => {
106 expect(result.text).toBe("06/Nov/2023:06:36:02");
107 expect(result).toBeDate(new Date(2023, 11 - 1, 6, 6, 36, 2));
108 });
109
110 testSingleCase(chrono.strict, "06/Nov/2023:06:36:02 +0200", (result) => {
111 expect(result.text).toBe("06/Nov/2023:06:36:02 +0200");
112 expect(result).toBeDate(new Date("Mon Nov 06 2023 06:36:02 GMT+0200"));
113 });
114});
115
116test("Test - Single Expression Shorten (mm/yyyy)", () => {
117 testSingleCase(chrono, "The event is going ahead (04/2016)", new Date(2012, 7, 10), (result) => {
118 expect(result.start).not.toBeNull();
119 expect(result.start.get("year")).toBe(2016);
120 expect(result.start.get("month")).toBe(4);
121 expect(result.start.get("day")).toBe(1);
122
123 expect(result.index).toBe(26);
124 expect(result.text).toBe("04/2016");
125
126 expect(result.start).toBeDate(new Date(2016, 4 - 1, 1, 12));
127 });
128
129 testSingleCase(chrono, "Published: 06/2004", new Date(2012, 7, 10), (result) => {
130 expect(result.start).not.toBeNull();
131 expect(result.start.get("year")).toBe(2004);
132 expect(result.start.get("month")).toBe(6);
133 expect(result.start.get("day")).toBe(1);
134
135 expect(result.index).toBe(11);
136 expect(result.text).toBe("06/2004");
137
138 expect(result.start).toBeDate(new Date(2004, 6 - 1, 1, 12));
139 });
140});
141
142test("Test - Single Expression Shorten (dd/mm)", () => {
143 testSingleCase(chrono, "8/10", new Date(2012, 7, 10), (result) => {
144 expect(result.start).not.toBeNull();
145 expect(result.start.get("year")).toBe(2012);
146 expect(result.start.get("month")).toBe(8);
147 expect(result.start.get("day")).toBe(10);
148
149 expect(result.index).toBe(0);
150 expect(result.text).toBe("8/10");
151
152 expect(result.start.isCertain("day")).toBe(true);
153 expect(result.start.isCertain("month")).toBe(true);
154 expect(result.start.isCertain("year")).toBe(false);
155
156 expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12));
157 });
158});
159
160test("Test - Range Expression", function () {
161 testSingleCase(chrono.en, "8/10/2012 - 8/15/2012", new Date(2012, 7, 10), (result) => {
162 expect(result.index).toBe(0);
163 expect(result.text).toBe("8/10/2012 - 8/15/2012");
164
165 expect(result.start).not.toBeNull();
166 expect(result.start.get("year")).toBe(2012);
167 expect(result.start.get("month")).toBe(8);
168 expect(result.start.get("day")).toBe(10);
169
170 expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12));
171
172 expect(result.end).not.toBeNull();
173 expect(result.end.get("year")).toBe(2012);
174 expect(result.end.get("month")).toBe(8);
175 expect(result.end.get("day")).toBe(15);
176
177 expect(result.end).toBeDate(new Date(2012, 8 - 1, 15, 12));
178 });
179});
180
181test("Test - Range Expressions with Time", function () {
182 testSingleCase(chrono.en, "from 01/21/2021 10:00 to 01/01/2023 07:00", new Date(2012, 7, 10), (result) => {
183 expect(result.start).not.toBeNull();
184 expect(result.start.get("year")).toBe(2021);
185 expect(result.start.get("month")).toBe(1);
186 expect(result.start.get("day")).toBe(21);
187 expect(result.start.get("hour")).toBe(10);
188 expect(result.start.get("minute")).toBe(0);
189
190 expect(result.end).not.toBeNull();
191 expect(result.end.get("year")).toBe(2023);
192 expect(result.end.get("month")).toBe(1);
193 expect(result.end.get("day")).toBe(1);
194 expect(result.end.get("hour")).toBe(7);
195 expect(result.end.get("minute")).toBe(0);
196 });
197
198 testSingleCase(chrono.en, "08/08/2023, 09:15 AM to 08/29/2023, 09:15 AM", new Date(2012, 7, 10), (result) => {
199 expect(result.start).not.toBeNull();
200 expect(result.start.get("year")).toBe(2023);
201 expect(result.start.get("month")).toBe(8);
202 expect(result.start.get("day")).toBe(8);
203 expect(result.start.get("hour")).toBe(9);
204 expect(result.start.get("minute")).toBe(15);
205
206 expect(result.end).not.toBeNull();
207 expect(result.end.get("year")).toBe(2023);
208 expect(result.end.get("month")).toBe(8);
209 expect(result.end.get("day")).toBe(29);
210 expect(result.end.get("hour")).toBe(9);
211 expect(result.end.get("minute")).toBe(15);
212 });
213});
214
215test("Test - Splitter variances patterns", function () {
216 const expectDate = new Date(2015, 5 - 1, 25, 12, 0);
217
218 testWithExpectedDate(chrono, "2015-05-25", expectDate);
219 testWithExpectedDate(chrono, "2015/05/25", expectDate);
220 testWithExpectedDate(chrono, "2015.05.25", expectDate);
221 testWithExpectedDate(chrono, "05-25-2015", expectDate);
222 testWithExpectedDate(chrono, "05/25/2015", expectDate);
223 testWithExpectedDate(chrono, "05.25.2015", expectDate);
224 testWithExpectedDate(chrono, "/05/25/2015", expectDate);
225
226 // Also, guessing ambiguous date
227 testWithExpectedDate(chrono, "25/05/2015", expectDate);
228});
229
230test("Test - Impossible Dates and Unexpected Results", function () {
231 testUnexpectedResult(chrono, "8/32/2014");
232 testUnexpectedResult(chrono, "8/32");
233 testUnexpectedResult(chrono, "2/29/2014");
234 testUnexpectedResult(chrono, "2014/22/29");
235 testUnexpectedResult(chrono, "2014/13/22");
236 testUnexpectedResult(chrono, "80-32-89-89");
237 testUnexpectedResult(chrono, "02/29/2022");
238 testUnexpectedResult(chrono, "06/31/2022");
239 testUnexpectedResult(chrono, "06/-31/2022");
240 testUnexpectedResult(chrono, "18/13/2022");
241 testUnexpectedResult(chrono, "15/28/2022");
242 testUnexpectedResult(chrono, "4/13/1");
243});
244
245test("Test - forward dates only option", function () {
246 testSingleCase(chrono, "5/31", new Date(1999, 6 - 1, 1), { forwardDate: true }, (result) => {
247 expect(result.start).not.toBeNull();
248 expect(result.start.get("year")).toBe(2000);
249 expect(result.start.get("month")).toBe(5);
250 expect(result.start.get("day")).toBe(31);
251
252 expect(result.index).toBe(0);
253 expect(result.text).toBe("5/31");
254
255 expect(result.start.isCertain("day")).toBe(true);
256 expect(result.start.isCertain("month")).toBe(true);
257 expect(result.start.isCertain("year")).toBe(false);
258
259 expect(result.start).toBeDate(new Date(2000, 5 - 1, 31, 12));
260 });
261
262 testSingleCase(chrono, "1/8 at 12pm", new Date("Sep 25 2021 12:00:00"), { forwardDate: true }, (result) => {
263 expect(result.text).toBe("1/8 at 12pm");
264
265 expect(result.start).not.toBeNull();
266 expect(result.start.get("year")).toBe(2022);
267 expect(result.start.get("month")).toBe(1);
268 expect(result.start.get("day")).toBe(8);
269
270 expect(result.start).toBeDate(new Date(2022, 1 - 1, 8, 12));
271 });
272});