1 | import * as chrono from "../../src";
|
2 | import { testSingleCase, testUnexpectedResult, testWithExpectedDate } from "../test_util";
|
3 |
|
4 | test("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 |
|
11 | test("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 |
|
66 | test("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 |
|
87 | test("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 |
|
116 | test("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 |
|
142 | test("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 |
|
160 | test("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 |
|
181 | test("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 |
|
215 | test("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 |
|
227 | testWithExpectedDate(chrono, "25/05/2015", expectDate);
|
228 | });
|
229 |
|
230 | test("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 |
|
245 | test("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 | });
|