chrono-node 2.3.0 → 2.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/benchmark/benchmark.js +4 -0
- package/dist/common/casualReferences.js +3 -1
- package/dist/common/refiners/ForwardDateRefiner.js +1 -1
- package/dist/locales/de/constants.js +1 -1
- package/dist/locales/en/constants.d.ts +1 -1
- package/dist/locales/en/constants.js +5 -5
- package/dist/locales/en/parsers/ENCasualTimeParser.js +1 -1
- package/dist/locales/en/parsers/ENMonthNameLittleEndianParser.js +6 -8
- package/dist/locales/en/parsers/ENRelativeDateFormatParser.js +3 -3
- package/dist/locales/en/parsers/ENTimeUnitAgoFormatParser.js +3 -3
- package/dist/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js +1 -1
- package/dist/locales/en/parsers/ENTimeUnitLaterFormatParser.js +2 -2
- package/dist/locales/en/parsers/ENTimeUnitWithinFormatParser.js +1 -1
- package/dist/locales/fr/constants.js +1 -1
- package/dist/locales/fr/parsers/FRTimeUnitAgoFormatParser.js +1 -1
- package/dist/locales/fr/parsers/FRTimeUnitRelativeFormatParser.js +1 -1
- package/dist/locales/fr/parsers/FRTimeUnitWithinFormatParser.js +1 -1
- package/dist/locales/nl/constants.js +8 -5
- package/dist/locales/nl/index.js +12 -3
- package/dist/locales/nl/parsers/NLRelativeDateFormatParser.d.ts +7 -0
- package/dist/locales/nl/parsers/NLRelativeDateFormatParser.js +57 -0
- package/dist/locales/nl/parsers/NLTimeExpressionParser.d.ts +1 -0
- package/dist/locales/nl/parsers/NLTimeExpressionParser.js +3 -0
- package/dist/locales/nl/parsers/NLTimeUnitAgoFormatParser.d.ts +9 -0
- package/dist/locales/nl/parsers/NLTimeUnitAgoFormatParser.js +23 -0
- package/dist/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.d.ts +7 -0
- package/dist/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.js +25 -0
- package/dist/locales/nl/parsers/NLTimeUnitLaterFormatParser.d.ts +9 -0
- package/dist/locales/nl/parsers/NLTimeUnitLaterFormatParser.js +22 -0
- package/dist/locales/nl/parsers/NLTimeUnitWithinFormatParser.js +1 -1
- package/dist/results.d.ts +2 -2
- package/dist/results.js +18 -12
- package/dist/timezone.d.ts +1 -1
- package/dist/timezone.js +3 -0
- package/dist/utils/pattern.js +1 -1
- package/package.json +1 -1
- package/src/common/casualReferences.ts +3 -1
- package/src/common/refiners/ForwardDateRefiner.ts +1 -1
- package/src/locales/de/constants.ts +1 -1
- package/src/locales/en/constants.ts +5 -5
- package/src/locales/en/parsers/ENCasualTimeParser.ts +1 -1
- package/src/locales/en/parsers/ENMonthNameLittleEndianParser.ts +9 -10
- package/src/locales/en/parsers/ENRelativeDateFormatParser.ts +3 -3
- package/src/locales/en/parsers/ENTimeUnitAgoFormatParser.ts +3 -4
- package/src/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.ts +1 -1
- package/src/locales/en/parsers/ENTimeUnitLaterFormatParser.ts +2 -2
- package/src/locales/en/parsers/ENTimeUnitWithinFormatParser.ts +1 -1
- package/src/locales/fr/constants.ts +1 -1
- package/src/locales/fr/parsers/FRTimeUnitAgoFormatParser.ts +1 -1
- package/src/locales/fr/parsers/FRTimeUnitRelativeFormatParser.ts +1 -1
- package/src/locales/fr/parsers/FRTimeUnitWithinFormatParser.ts +1 -1
- package/src/locales/nl/constants.ts +11 -5
- package/src/locales/nl/index.ts +12 -3
- package/src/locales/nl/parsers/NLRelativeDateFormatParser.ts +70 -0
- package/src/locales/nl/parsers/NLTimeExpressionParser.ts +4 -0
- package/src/locales/nl/parsers/NLTimeUnitAgoFormatParser.ts +26 -0
- package/src/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.ts +27 -0
- package/src/locales/nl/parsers/NLTimeUnitLaterFormatParser.ts +27 -0
- package/src/locales/nl/parsers/NLTimeUnitWithinFormatParser.ts +1 -1
- package/src/results.ts +22 -12
- package/src/timezone.ts +5 -1
- package/src/utils/pattern.ts +1 -1
- package/test/en/en_casual.test.ts +11 -0
- package/test/en/en_month_name_little_endian.test.ts +10 -0
- package/test/en/en_relative.test.ts +8 -0
- package/test/en/en_slash.test.ts +11 -0
- package/test/en/en_timezone_exp.test.ts +85 -10
- package/test/en/en_weekday.test.ts +69 -25
- package/test/en/negative_cases.test.ts +2 -0
- package/test/nl/nl_relative.test.ts +212 -0
- package/test/nl/nl_time_units_ago.test.ts +243 -0
- package/test/nl/nl_time_units_casual_relative.test.ts +130 -0
- package/test/nl/nl_time_units_later.test.ts +250 -0
- package/test/test_util.ts +5 -2
|
@@ -364,6 +364,16 @@ test("Test - Forward Option", () => {
|
|
|
364
364
|
expect(result.end.get("day")).toBe(23);
|
|
365
365
|
expect(result.end.get("hour")).toBe(19);
|
|
366
366
|
});
|
|
367
|
+
|
|
368
|
+
testSingleCase(chrono, "17 August 2013 - 19 August 2013", (result) => {
|
|
369
|
+
expect(result.start.get("year")).toBe(2013);
|
|
370
|
+
expect(result.start.get("month")).toBe(8);
|
|
371
|
+
expect(result.start.get("day")).toBe(17);
|
|
372
|
+
|
|
373
|
+
expect(result.end.get("year")).toBe(2013);
|
|
374
|
+
expect(result.end.get("month")).toBe(8);
|
|
375
|
+
expect(result.end.get("day")).toBe(19);
|
|
376
|
+
});
|
|
367
377
|
});
|
|
368
378
|
|
|
369
379
|
test("Test - Impossible Dates (Strict Mode)", function () {
|
|
@@ -230,4 +230,12 @@ test("Test - Relative date components' certainty and imply timezone", () => {
|
|
|
230
230
|
expect(result).toBeDate(new Date("Sun Nov 29 2020 13:34:13 GMT+0900 (Japan Standard Time)"));
|
|
231
231
|
expect(result).toBeDate(new Date("Sun Nov 29 2020 5:34:13 GMT+0100"));
|
|
232
232
|
}
|
|
233
|
+
|
|
234
|
+
{
|
|
235
|
+
const text = "in 20 minutes";
|
|
236
|
+
const result = chrono.parse(text, { instant: refDate, timezone: null })[0] as ParsingResult;
|
|
237
|
+
|
|
238
|
+
expect(result.text).toBe(text);
|
|
239
|
+
expect(result.start.isCertain("timezoneOffset")).toBe(false);
|
|
240
|
+
}
|
|
233
241
|
});
|
package/test/en/en_slash.test.ts
CHANGED
|
@@ -203,4 +203,15 @@ test("Test - forward dates only option", function () {
|
|
|
203
203
|
|
|
204
204
|
expect(result.start).toBeDate(new Date(2000, 5 - 1, 31, 12));
|
|
205
205
|
});
|
|
206
|
+
|
|
207
|
+
testSingleCase(chrono, "1/8 at 12pm", new Date("Sep 25 2021 12:00:00"), { forwardDate: true }, (result) => {
|
|
208
|
+
expect(result.text).toBe("1/8 at 12pm");
|
|
209
|
+
|
|
210
|
+
expect(result.start).not.toBeNull();
|
|
211
|
+
expect(result.start.get("year")).toBe(2022);
|
|
212
|
+
expect(result.start.get("month")).toBe(1);
|
|
213
|
+
expect(result.start.get("day")).toBe(8);
|
|
214
|
+
|
|
215
|
+
expect(result.start).toBeDate(new Date(2022, 1 - 1, 8, 12));
|
|
216
|
+
});
|
|
206
217
|
});
|
|
@@ -81,20 +81,95 @@ test("Test - Parsing date with timezone abbreviation", function () {
|
|
|
81
81
|
});
|
|
82
82
|
|
|
83
83
|
test("Test - Not parsing timezone from relative time", function () {
|
|
84
|
-
|
|
84
|
+
{
|
|
85
|
+
const refInstant = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
|
|
86
|
+
const expectedInstant = new Date("Sun Nov 29 2020 14:24:13 GMT+0900 (Japan Standard Time)");
|
|
87
|
+
|
|
88
|
+
testSingleCase(chrono, "in 1 hour get eggs and milk", refInstant, (result, text) => {
|
|
89
|
+
expect(result.text).toBe("in 1 hour");
|
|
90
|
+
expect(result.start.get("timezoneOffset")).toBe(-refInstant.getTimezoneOffset());
|
|
91
|
+
expect(result.start).toBeDate(expectedInstant);
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
{
|
|
96
|
+
const refInstant = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
|
|
97
|
+
const expectedInstant = new Date("Sun Nov 29 2020 14:24:13 GMT+0900 (Japan Standard Time)");
|
|
98
|
+
|
|
99
|
+
testSingleCase(chrono, "in 1 hour GMT", refInstant, (result, text) => {
|
|
100
|
+
expect(result.text).toBe("in 1 hour");
|
|
101
|
+
expect(result.start).toBeDate(expectedInstant);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
{
|
|
106
|
+
const refInstant = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
|
|
107
|
+
const expectedInstant = new Date("Sun Nov 29 2020 14:24:13 GMT+0900 (Japan Standard Time)");
|
|
108
|
+
|
|
109
|
+
testSingleCase(chrono, "in 1 hour GMT", { instant: refInstant, timezone: "JST" }, (result, text) => {
|
|
110
|
+
expect(result.text).toBe("in 1 hour");
|
|
111
|
+
expect(result.start).toBeDate(expectedInstant);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
{
|
|
116
|
+
const refInstant = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
|
|
117
|
+
const expectedInstant = new Date("Sun Nov 29 2020 14:24:13 GMT+0900 (Japan Standard Time)");
|
|
118
|
+
|
|
119
|
+
testSingleCase(chrono, "in 1 hour GMT", { instant: refInstant, timezone: "BST" }, (result, text) => {
|
|
120
|
+
expect(result.text).toBe("in 1 hour");
|
|
121
|
+
expect(result.start).toBeDate(expectedInstant);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
});
|
|
85
125
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
126
|
+
test("Test - Relative time (Now) is not effected by timezone setting", function () {
|
|
127
|
+
const refInstant = new Date(1637674343000);
|
|
128
|
+
|
|
129
|
+
testSingleCase(chrono, "now", { instant: refInstant }, (result) => {
|
|
130
|
+
expect(result.text).toBe("now");
|
|
131
|
+
expect(result.start).toBeDate(refInstant);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
testSingleCase(chrono, "now", { instant: refInstant, timezone: null }, (result) => {
|
|
135
|
+
expect(result.text).toBe("now");
|
|
136
|
+
expect(result.start).toBeDate(refInstant);
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
testSingleCase(chrono, "now", { instant: refInstant, timezone: "BST" }, (result) => {
|
|
140
|
+
expect(result.text).toBe("now");
|
|
141
|
+
expect(result.start).toBeDate(refInstant);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
testSingleCase(chrono, "now", { instant: refInstant, timezone: "JST" }, (result) => {
|
|
145
|
+
expect(result.text).toBe("now");
|
|
146
|
+
expect(result.start).toBeDate(refInstant);
|
|
89
147
|
});
|
|
148
|
+
});
|
|
90
149
|
|
|
91
|
-
|
|
92
|
-
|
|
150
|
+
test("Test - Relative time (2 hour later) is not effected by timezone setting", function () {
|
|
151
|
+
const refInstant = new Date(1637674343000);
|
|
152
|
+
const expectedInstant = new Date(1637674343000 + 2 * 60 * 60 * 1000);
|
|
93
153
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
154
|
+
testSingleCase(chrono, "2 hour later", { instant: refInstant }, (result) => {
|
|
155
|
+
expect(result.text).toBe("2 hour later");
|
|
156
|
+
expect(result.start).toBeDate(expectedInstant);
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
testSingleCase(chrono, "2 hour later", { instant: refInstant, timezone: null }, (result) => {
|
|
160
|
+
expect(result.text).toBe("2 hour later");
|
|
161
|
+
expect(result.start).toBeDate(expectedInstant);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
testSingleCase(chrono, "2 hour later", { instant: refInstant, timezone: "BST" }, (result) => {
|
|
165
|
+
expect(result.text).toBe("2 hour later");
|
|
166
|
+
expect(result.start).toBeDate(expectedInstant);
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
testSingleCase(chrono, "2 hour later", { instant: refInstant, timezone: "JST" }, (result) => {
|
|
170
|
+
expect(result.text).toBe("2 hour later");
|
|
171
|
+
expect(result.start).toBeDate(expectedInstant);
|
|
172
|
+
});
|
|
98
173
|
});
|
|
99
174
|
|
|
100
175
|
test("Test - Parsing timezone from relative date when valid", function () {
|
|
@@ -20,30 +20,6 @@ test("Test - Single Expression", function () {
|
|
|
20
20
|
expect(result.start).toBeDate(new Date(2012, 7, 6, 12));
|
|
21
21
|
});
|
|
22
22
|
|
|
23
|
-
testSingleCase(
|
|
24
|
-
chrono.casual,
|
|
25
|
-
"Monday (forward dates only)",
|
|
26
|
-
new Date(2012, 7, 9),
|
|
27
|
-
{ forwardDate: true },
|
|
28
|
-
(result) => {
|
|
29
|
-
expect(result.index).toBe(0);
|
|
30
|
-
expect(result.text).toBe("Monday");
|
|
31
|
-
|
|
32
|
-
expect(result.start).not.toBeNull();
|
|
33
|
-
expect(result.start.get("year")).toBe(2012);
|
|
34
|
-
expect(result.start.get("month")).toBe(8);
|
|
35
|
-
expect(result.start.get("day")).toBe(13);
|
|
36
|
-
expect(result.start.get("weekday")).toBe(1);
|
|
37
|
-
|
|
38
|
-
expect(result.start.isCertain("day")).toBe(false);
|
|
39
|
-
expect(result.start.isCertain("month")).toBe(false);
|
|
40
|
-
expect(result.start.isCertain("year")).toBe(false);
|
|
41
|
-
expect(result.start.isCertain("weekday")).toBe(true);
|
|
42
|
-
|
|
43
|
-
expect(result.start).toBeDate(new Date(2012, 7, 13, 12));
|
|
44
|
-
}
|
|
45
|
-
);
|
|
46
|
-
|
|
47
23
|
testSingleCase(chrono.casual, "Thursday", new Date(2012, 7, 9), (result) => {
|
|
48
24
|
expect(result.index).toBe(0);
|
|
49
25
|
expect(result.text).toBe("Thursday");
|
|
@@ -182,7 +158,31 @@ test("Test - Weekday Overlap", function () {
|
|
|
182
158
|
});
|
|
183
159
|
});
|
|
184
160
|
|
|
185
|
-
test("Test - forward dates only option",
|
|
161
|
+
test("Test - forward dates only option", () => {
|
|
162
|
+
testSingleCase(
|
|
163
|
+
chrono.casual,
|
|
164
|
+
"Monday (forward dates only)",
|
|
165
|
+
new Date(2012, 7, 9),
|
|
166
|
+
{ forwardDate: true },
|
|
167
|
+
(result) => {
|
|
168
|
+
expect(result.index).toBe(0);
|
|
169
|
+
expect(result.text).toBe("Monday");
|
|
170
|
+
|
|
171
|
+
expect(result.start).not.toBeNull();
|
|
172
|
+
expect(result.start.get("year")).toBe(2012);
|
|
173
|
+
expect(result.start.get("month")).toBe(8);
|
|
174
|
+
expect(result.start.get("day")).toBe(13);
|
|
175
|
+
expect(result.start.get("weekday")).toBe(1);
|
|
176
|
+
|
|
177
|
+
expect(result.start.isCertain("day")).toBe(false);
|
|
178
|
+
expect(result.start.isCertain("month")).toBe(false);
|
|
179
|
+
expect(result.start.isCertain("year")).toBe(false);
|
|
180
|
+
expect(result.start.isCertain("weekday")).toBe(true);
|
|
181
|
+
|
|
182
|
+
expect(result.start).toBeDate(new Date(2012, 7, 13, 12));
|
|
183
|
+
}
|
|
184
|
+
);
|
|
185
|
+
|
|
186
186
|
testSingleCase(
|
|
187
187
|
chrono.casual,
|
|
188
188
|
"this Friday to this Monday",
|
|
@@ -219,4 +219,48 @@ test("Test - forward dates only option", function () {
|
|
|
219
219
|
expect(result.end).toBeDate(new Date(2016, 8 - 1, 8, 12));
|
|
220
220
|
}
|
|
221
221
|
);
|
|
222
|
+
|
|
223
|
+
testSingleCase(
|
|
224
|
+
chrono.casual,
|
|
225
|
+
"sunday morning",
|
|
226
|
+
new Date("August 15, 2021, 20:00"),
|
|
227
|
+
{ forwardDate: true },
|
|
228
|
+
(result) => {
|
|
229
|
+
expect(result.index).toBe(0);
|
|
230
|
+
expect(result.text).toBe("sunday morning");
|
|
231
|
+
|
|
232
|
+
expect(result.start).not.toBeNull();
|
|
233
|
+
expect(result.start.get("year")).toBe(2021);
|
|
234
|
+
expect(result.start.get("month")).toBe(8);
|
|
235
|
+
expect(result.start.get("day")).toBe(22);
|
|
236
|
+
expect(result.start.get("weekday")).toBe(0);
|
|
237
|
+
|
|
238
|
+
expect(result.start.isCertain("day")).toBe(false);
|
|
239
|
+
expect(result.start.isCertain("month")).toBe(false);
|
|
240
|
+
expect(result.start.isCertain("year")).toBe(false);
|
|
241
|
+
expect(result.start.isCertain("weekday")).toBe(true);
|
|
242
|
+
|
|
243
|
+
expect(result.start).toBeDate(new Date(2021, 8 - 1, 22, 6));
|
|
244
|
+
}
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
testSingleCase(
|
|
248
|
+
chrono.casual,
|
|
249
|
+
"vacation monday - friday",
|
|
250
|
+
new Date("thursday 13 June 2019"),
|
|
251
|
+
{ forwardDate: true },
|
|
252
|
+
(result) => {
|
|
253
|
+
expect(result.text).toBe("monday - friday");
|
|
254
|
+
|
|
255
|
+
expect(result.start).not.toBeNull();
|
|
256
|
+
expect(result.start.get("year")).toBe(2019);
|
|
257
|
+
expect(result.start.get("month")).toBe(6);
|
|
258
|
+
expect(result.start.get("day")).toBe(17);
|
|
259
|
+
|
|
260
|
+
expect(result.end).not.toBeNull();
|
|
261
|
+
expect(result.end.get("year")).toBe(2019);
|
|
262
|
+
expect(result.end.get("month")).toBe(6);
|
|
263
|
+
expect(result.end.get("day")).toBe(21);
|
|
264
|
+
}
|
|
265
|
+
);
|
|
222
266
|
});
|
|
@@ -21,6 +21,8 @@ test("Test - Skip random non-date patterns", function () {
|
|
|
21
21
|
testUnexpectedResult(chrono, "Total: $1,194.09 [image: View Reservation");
|
|
22
22
|
|
|
23
23
|
testUnexpectedResult(chrono, "at 6.5 kilograms");
|
|
24
|
+
|
|
25
|
+
testUnexpectedResult(chrono, "ah that is unusual", null, { forwardDate: true });
|
|
24
26
|
});
|
|
25
27
|
|
|
26
28
|
test("Test - URLs % encoded", function () {
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import * as chrono from "../../src";
|
|
2
|
+
import { testSingleCase } from "../test_util";
|
|
3
|
+
import { ParsingResult } from "../../src/results";
|
|
4
|
+
|
|
5
|
+
test("Test - 'This' expressions", () => {
|
|
6
|
+
// this week
|
|
7
|
+
testSingleCase(chrono.nl, "deze week", new Date(2017, 11 - 1, 19, 12), (result, text) => {
|
|
8
|
+
expect(result.text).toBe(text);
|
|
9
|
+
expect(result.start.get("year")).toBe(2017);
|
|
10
|
+
expect(result.start.get("month")).toBe(11);
|
|
11
|
+
expect(result.start.get("day")).toBe(19);
|
|
12
|
+
expect(result.start.get("hour")).toBe(12);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
// this month
|
|
16
|
+
testSingleCase(chrono.nl, "deze maand", new Date(2017, 11 - 1, 19, 12), (result, text) => {
|
|
17
|
+
expect(result.text).toBe(text);
|
|
18
|
+
expect(result.start.get("year")).toBe(2017);
|
|
19
|
+
expect(result.start.get("month")).toBe(11);
|
|
20
|
+
expect(result.start.get("day")).toBe(1);
|
|
21
|
+
expect(result.start.get("hour")).toBe(12);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
// this year
|
|
25
|
+
testSingleCase(chrono.nl, "dit jaar", new Date(2017, 11 - 1, 19, 12), (result, text) => {
|
|
26
|
+
expect(result.text).toBe(text);
|
|
27
|
+
expect(result.start.get("year")).toBe(2017);
|
|
28
|
+
expect(result.start.get("month")).toBe(1);
|
|
29
|
+
expect(result.start.get("day")).toBe(1);
|
|
30
|
+
expect(result.start.get("hour")).toBe(12);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
test("Test - Past relative expressions", () => {
|
|
35
|
+
// last week
|
|
36
|
+
testSingleCase(chrono.nl, "afgelopen week", new Date(2016, 10 - 1, 1, 12), (result, text) => {
|
|
37
|
+
expect(result.text).toBe(text);
|
|
38
|
+
expect(result.start.get("year")).toBe(2016);
|
|
39
|
+
expect(result.start.get("month")).toBe(9);
|
|
40
|
+
expect(result.start.get("day")).toBe(24);
|
|
41
|
+
expect(result.start.get("hour")).toBe(12);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// last month
|
|
45
|
+
testSingleCase(chrono.nl, "afgelopen maand", new Date(2016, 10 - 1, 1, 12), (result, text) => {
|
|
46
|
+
expect(result.text).toBe(text);
|
|
47
|
+
expect(result.start.get("year")).toBe(2016);
|
|
48
|
+
expect(result.start.get("month")).toBe(9);
|
|
49
|
+
expect(result.start.get("day")).toBe(1);
|
|
50
|
+
expect(result.start.get("hour")).toBe(12);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// last day
|
|
54
|
+
testSingleCase(chrono.nl, "afgelopen dag", new Date(2016, 10 - 1, 1, 12), (result, text) => {
|
|
55
|
+
expect(result.text).toBe(text);
|
|
56
|
+
expect(result.start.get("year")).toBe(2016);
|
|
57
|
+
expect(result.start.get("month")).toBe(9);
|
|
58
|
+
expect(result.start.get("day")).toBe(30);
|
|
59
|
+
expect(result.start.get("hour")).toBe(12);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// past week
|
|
63
|
+
testSingleCase(chrono.nl, "vorige week", new Date(2016, 10 - 1, 1, 12), (result, text) => {
|
|
64
|
+
expect(result.text).toBe(text);
|
|
65
|
+
expect(result.start.get("year")).toBe(2016);
|
|
66
|
+
expect(result.start.get("month")).toBe(9);
|
|
67
|
+
expect(result.start.get("day")).toBe(24);
|
|
68
|
+
expect(result.start.get("hour")).toBe(12);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
test("Test - Future relative expressions", () => {
|
|
73
|
+
// next hour
|
|
74
|
+
testSingleCase(chrono.nl, "komende uur", new Date(2016, 10 - 1, 1, 12), (result, text) => {
|
|
75
|
+
expect(result.text).toBe(text);
|
|
76
|
+
expect(result.start.get("year")).toBe(2016);
|
|
77
|
+
expect(result.start.get("month")).toBe(10);
|
|
78
|
+
expect(result.start.get("day")).toBe(1);
|
|
79
|
+
expect(result.start.get("hour")).toBe(13);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
// next week
|
|
83
|
+
testSingleCase(chrono.nl, "volgende week", new Date(2016, 10 - 1, 1, 12), (result, text) => {
|
|
84
|
+
expect(result.text).toBe(text);
|
|
85
|
+
expect(result.start.get("year")).toBe(2016);
|
|
86
|
+
expect(result.start.get("month")).toBe(10);
|
|
87
|
+
expect(result.start.get("day")).toBe(8);
|
|
88
|
+
expect(result.start.get("hour")).toBe(12);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
// next day
|
|
92
|
+
testSingleCase(chrono.nl, "volgende dag", new Date(2016, 10 - 1, 1, 12), (result, text) => {
|
|
93
|
+
expect(result.text).toBe(text);
|
|
94
|
+
expect(result.start.get("year")).toBe(2016);
|
|
95
|
+
expect(result.start.get("month")).toBe(10);
|
|
96
|
+
expect(result.start.get("day")).toBe(2);
|
|
97
|
+
expect(result.start.get("hour")).toBe(12);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
// next month
|
|
101
|
+
testSingleCase(chrono.nl, "volgende maand", new Date(2016, 10 - 1, 1, 12), (result, text) => {
|
|
102
|
+
expect(result.text).toBe(text);
|
|
103
|
+
expect(result.start.get("year")).toBe(2016);
|
|
104
|
+
expect(result.start.get("month")).toBe(11);
|
|
105
|
+
expect(result.start.get("day")).toBe(1);
|
|
106
|
+
expect(result.start.get("hour")).toBe(12);
|
|
107
|
+
|
|
108
|
+
expect(result.start.isCertain("year")).toBe(true);
|
|
109
|
+
expect(result.start.isCertain("month")).toBe(true);
|
|
110
|
+
expect(result.start.isCertain("day")).toBe(false);
|
|
111
|
+
expect(result.start.isCertain("hour")).toBe(false);
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
// next year
|
|
115
|
+
testSingleCase(chrono.nl, "volgend jaar", new Date(2020, 11 - 1, 22, 12, 11, 32, 6), (result, text) => {
|
|
116
|
+
expect(result.text).toBe(text);
|
|
117
|
+
expect(result.start.get("year")).toBe(2021);
|
|
118
|
+
expect(result.start.get("month")).toBe(11);
|
|
119
|
+
expect(result.start.get("day")).toBe(22);
|
|
120
|
+
expect(result.start.get("hour")).toBe(12);
|
|
121
|
+
expect(result.start.get("minute")).toBe(11);
|
|
122
|
+
expect(result.start.get("second")).toBe(32);
|
|
123
|
+
expect(result.start.get("millisecond")).toBe(6);
|
|
124
|
+
|
|
125
|
+
expect(result.start.isCertain("year")).toBe(true);
|
|
126
|
+
expect(result.start.isCertain("month")).toBe(false);
|
|
127
|
+
expect(result.start.isCertain("day")).toBe(false);
|
|
128
|
+
expect(result.start.isCertain("hour")).toBe(false);
|
|
129
|
+
expect(result.start.isCertain("minute")).toBe(false);
|
|
130
|
+
expect(result.start.isCertain("second")).toBe(false);
|
|
131
|
+
expect(result.start.isCertain("millisecond")).toBe(false);
|
|
132
|
+
expect(result.start.isCertain("timezoneOffset")).toBe(false);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
test("Test - Relative date components' certainty", () => {
|
|
137
|
+
const refDate = new Date(2016, 10 - 1, 7, 12);
|
|
138
|
+
|
|
139
|
+
// next hour
|
|
140
|
+
testSingleCase(chrono.nl, "komende uur", refDate, (result, text) => {
|
|
141
|
+
expect(result.text).toBe(text);
|
|
142
|
+
expect(result.start.get("year")).toBe(2016);
|
|
143
|
+
expect(result.start.get("month")).toBe(10);
|
|
144
|
+
expect(result.start.get("day")).toBe(7);
|
|
145
|
+
expect(result.start.get("hour")).toBe(13);
|
|
146
|
+
expect(result.start.get("timezoneOffset")).toBe(refDate.getTimezoneOffset() * -1);
|
|
147
|
+
|
|
148
|
+
expect(result.start.isCertain("year")).toBe(true);
|
|
149
|
+
expect(result.start.isCertain("month")).toBe(true);
|
|
150
|
+
expect(result.start.isCertain("day")).toBe(true);
|
|
151
|
+
expect(result.start.isCertain("hour")).toBe(true);
|
|
152
|
+
expect(result.start.isCertain("timezoneOffset")).toBe(true);
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
// next month
|
|
156
|
+
testSingleCase(chrono.nl, "volgende maand", refDate, (result, text) => {
|
|
157
|
+
const expectedDate = new Date(2016, 11, 7, 12);
|
|
158
|
+
|
|
159
|
+
expect(result.text).toBe(text);
|
|
160
|
+
expect(result.start.get("year")).toBe(2016);
|
|
161
|
+
expect(result.start.get("month")).toBe(11);
|
|
162
|
+
expect(result.start.get("day")).toBe(7);
|
|
163
|
+
expect(result.start.get("hour")).toBe(12);
|
|
164
|
+
expect(result.start.get("timezoneOffset")).toBe(-expectedDate.getTimezoneOffset());
|
|
165
|
+
|
|
166
|
+
expect(result.start.isCertain("year")).toBe(true);
|
|
167
|
+
expect(result.start.isCertain("month")).toBe(true);
|
|
168
|
+
expect(result.start.isCertain("day")).toBe(false);
|
|
169
|
+
expect(result.start.isCertain("hour")).toBe(false);
|
|
170
|
+
expect(result.start.isCertain("timezoneOffset")).toBe(false);
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
test("Test - Relative date components' certainty and imply timezone", () => {
|
|
175
|
+
const refDate = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
|
|
176
|
+
|
|
177
|
+
{
|
|
178
|
+
// now
|
|
179
|
+
const text = "nu";
|
|
180
|
+
const result = chrono.nl.parse(text, refDate)[0] as ParsingResult;
|
|
181
|
+
|
|
182
|
+
expect(result.text).toBe(text);
|
|
183
|
+
result.start.imply("timezoneOffset", 60);
|
|
184
|
+
|
|
185
|
+
expect(result).toBeDate(new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)"));
|
|
186
|
+
expect(result).toBeDate(new Date("Sun Nov 29 2020 5:24:13 GMT+0100"));
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
{
|
|
190
|
+
// tomorrow at 5pm
|
|
191
|
+
const text = "morgen om 17 uur";
|
|
192
|
+
const result = chrono.nl.parse(text, refDate)[0] as ParsingResult;
|
|
193
|
+
|
|
194
|
+
expect(result.text).toBe(text);
|
|
195
|
+
result.start.imply("timezoneOffset", 60);
|
|
196
|
+
|
|
197
|
+
expect(result).toBeDate(new Date("Sun Dec 1 2020 1:00:00 GMT+0900 (Japan Standard Time)"));
|
|
198
|
+
expect(result).toBeDate(new Date("Sun Nov 30 2020 17:00:00 GMT+0100"));
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
{
|
|
202
|
+
// in 10 minutes
|
|
203
|
+
const text = "binnen 10 minuten";
|
|
204
|
+
const result = chrono.nl.parse(text, refDate)[0] as ParsingResult;
|
|
205
|
+
|
|
206
|
+
expect(result.text).toBe(text);
|
|
207
|
+
result.start.imply("timezoneOffset", 60);
|
|
208
|
+
|
|
209
|
+
expect(result).toBeDate(new Date("Sun Nov 29 2020 13:34:13 GMT+0900 (Japan Standard Time)"));
|
|
210
|
+
expect(result).toBeDate(new Date("Sun Nov 29 2020 5:34:13 GMT+0100"));
|
|
211
|
+
}
|
|
212
|
+
});
|