chrono-node 2.2.7 → 2.3.3
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/README.md +25 -9
- package/benchmark/benchmark.js +4 -0
- package/dist/bundle.js +5047 -0
- package/dist/chrono.d.ts +7 -6
- package/dist/chrono.js +6 -5
- package/dist/common/casualReferences.d.ts +6 -6
- package/dist/common/casualReferences.js +16 -15
- package/dist/common/refiners/ForwardDateRefiner.js +1 -1
- package/dist/index.d.ts +7 -3
- package/dist/locales/de/constants.js +1 -1
- package/dist/locales/de/parsers/DECasualDateParser.js +2 -2
- package/dist/locales/en/constants.d.ts +1 -1
- package/dist/locales/en/constants.js +5 -5
- package/dist/locales/en/parsers/ENCasualDateParser.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/FRCasualDateParser.js +4 -4
- 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/ja/parsers/JPCasualDateParser.js +3 -3
- package/dist/locales/nl/constants.js +8 -5
- package/dist/locales/nl/index.js +12 -3
- package/dist/locales/nl/parsers/NLCasualDateParser.js +4 -4
- 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/locales/pt/parsers/PTCasualDateParser.js +4 -4
- package/dist/main.js +1078 -0
- package/dist/results.d.ts +12 -5
- package/dist/results.js +40 -17
- package/dist/timezone.d.ts +194 -0
- package/dist/timezone.js +207 -0
- package/dist/utils/dayjs.js +0 -2
- package/dist/utils/pattern.js +1 -1
- package/package.json +3 -3
- package/src/chrono.ts +21 -8
- package/src/common/casualReferences.ts +17 -18
- package/src/common/refiners/ForwardDateRefiner.ts +1 -1
- package/src/index.ts +19 -3
- package/src/locales/de/constants.ts +1 -1
- package/src/locales/de/parsers/DECasualDateParser.ts +2 -2
- package/src/locales/en/constants.ts +5 -5
- package/src/locales/en/parsers/ENCasualDateParser.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/FRCasualDateParser.ts +4 -4
- 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/ja/parsers/JPCasualDateParser.ts +3 -3
- package/src/locales/nl/constants.ts +11 -5
- package/src/locales/nl/index.ts +12 -3
- package/src/locales/nl/parsers/NLCasualDateParser.ts +4 -4
- 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/locales/pt/parsers/PTCasualDateParser.ts +4 -4
- package/src/results.ts +52 -18
- package/src/timezone.ts +205 -0
- package/src/utils/dayjs.ts +0 -2
- package/src/utils/pattern.ts +1 -1
- package/test/en/en_month_name_little_endian.test.ts +10 -0
- package/test/en/en_relative.test.ts +30 -0
- package/test/en/en_slash.test.ts +11 -0
- package/test/en/en_timezone_exp.test.ts +7 -4
- 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/result.test.ts +32 -13
- package/test/system_timezone.test.ts +100 -0
- package/test/test_util.ts +10 -7
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import * as chrono from "../../src/";
|
|
2
|
+
import { testSingleCase } from "../test_util";
|
|
3
|
+
|
|
4
|
+
test("Test - Later Expression", function () {
|
|
5
|
+
// 2 days later
|
|
6
|
+
testSingleCase(chrono.nl, "2 dagen later", new Date(2012, 7, 10, 12), (result) => {
|
|
7
|
+
expect(result.start).not.toBeNull();
|
|
8
|
+
expect(result.start.get("year")).toBe(2012);
|
|
9
|
+
expect(result.start.get("month")).toBe(8);
|
|
10
|
+
expect(result.start.get("day")).toBe(12);
|
|
11
|
+
|
|
12
|
+
expect(result.index).toBe(0);
|
|
13
|
+
expect(result.text).toBe("2 dagen later");
|
|
14
|
+
|
|
15
|
+
expect(result.start.isCertain("day")).toBe(true);
|
|
16
|
+
expect(result.start.isCertain("month")).toBe(true);
|
|
17
|
+
|
|
18
|
+
expect(result.start).toBeDate(new Date(2012, 8 - 1, 12, 12));
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
// 5 minutes later
|
|
22
|
+
testSingleCase(chrono.nl, "5 minuten later", new Date(2012, 7, 10, 10, 0), (result) => {
|
|
23
|
+
expect(result.start).not.toBeNull();
|
|
24
|
+
expect(result.start.get("year")).toBe(2012);
|
|
25
|
+
expect(result.start.get("month")).toBe(8);
|
|
26
|
+
expect(result.start.get("day")).toBe(10);
|
|
27
|
+
expect(result.start.get("hour")).toBe(10);
|
|
28
|
+
expect(result.start.get("minute")).toBe(5);
|
|
29
|
+
|
|
30
|
+
expect(result.index).toBe(0);
|
|
31
|
+
expect(result.text).toBe("5 minuten later");
|
|
32
|
+
|
|
33
|
+
expect(result.start.isCertain("hour")).toBe(true);
|
|
34
|
+
expect(result.start.isCertain("minute")).toBe(true);
|
|
35
|
+
|
|
36
|
+
expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 10, 5));
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// 3 week later
|
|
40
|
+
testSingleCase(chrono.nl, "3 weken later", new Date(2012, 7 - 1, 10, 10, 0), (result) => {
|
|
41
|
+
expect(result.start).not.toBeNull();
|
|
42
|
+
expect(result.start.get("year")).toBe(2012);
|
|
43
|
+
expect(result.start.get("month")).toBe(7);
|
|
44
|
+
expect(result.start.get("day")).toBe(31);
|
|
45
|
+
|
|
46
|
+
expect(result.index).toBe(0);
|
|
47
|
+
expect(result.text).toBe("3 weken later");
|
|
48
|
+
|
|
49
|
+
expect(result.start).toBeDate(new Date(2012, 7 - 1, 31, 10, 0));
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test("Test - From now Expression", () => {
|
|
54
|
+
// 5 days from now, we did something
|
|
55
|
+
testSingleCase(chrono.nl, "5 dagen vanaf nu we hebben iets gedaan", new Date(2012, 7, 10), (result) => {
|
|
56
|
+
expect(result.start).not.toBeNull();
|
|
57
|
+
expect(result.start.get("year")).toBe(2012);
|
|
58
|
+
expect(result.start.get("month")).toBe(8);
|
|
59
|
+
expect(result.start.get("day")).toBe(15);
|
|
60
|
+
|
|
61
|
+
expect(result.index).toBe(0);
|
|
62
|
+
expect(result.text).toBe("5 dagen vanaf nu");
|
|
63
|
+
|
|
64
|
+
expect(result.start).toBeDate(new Date(2012, 8 - 1, 15));
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
// 10 days from now, we did something
|
|
68
|
+
testSingleCase(chrono.nl, "10 dagen vanaf nu we hebben iets gedaan", new Date(2012, 7, 10), (result) => {
|
|
69
|
+
expect(result.start).not.toBeNull();
|
|
70
|
+
expect(result.start.get("year")).toBe(2012);
|
|
71
|
+
expect(result.start.get("month")).toBe(8);
|
|
72
|
+
expect(result.start.get("day")).toBe(20);
|
|
73
|
+
|
|
74
|
+
expect(result.index).toBe(0);
|
|
75
|
+
expect(result.text).toBe("10 dagen vanaf nu");
|
|
76
|
+
|
|
77
|
+
expect(result.start).toBeDate(new Date(2012, 8 - 1, 20));
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
// 15 minute from now
|
|
81
|
+
testSingleCase(chrono.nl, "15 minuten vanaf nu", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
82
|
+
expect(result.index).toBe(0);
|
|
83
|
+
expect(result.text).toBe("15 minuten vanaf nu");
|
|
84
|
+
expect(result.start.get("hour")).toBe(12);
|
|
85
|
+
expect(result.start.get("minute")).toBe(29);
|
|
86
|
+
|
|
87
|
+
expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 29));
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
// 15 minutes earlier
|
|
91
|
+
testSingleCase(chrono.nl, "15 minuten eerder", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
92
|
+
expect(result.index).toBe(0);
|
|
93
|
+
expect(result.text).toBe("15 minuten eerder");
|
|
94
|
+
expect(result.start.get("hour")).toBe(11);
|
|
95
|
+
expect(result.start.get("minute")).toBe(59);
|
|
96
|
+
|
|
97
|
+
expect(result.start).toBeDate(new Date(2012, 7, 10, 11, 59));
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
// 15 minute out
|
|
101
|
+
testSingleCase(chrono.nl, "15 minuten uit", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
102
|
+
expect(result.index).toBe(0);
|
|
103
|
+
expect(result.text).toBe("15 minuten uit");
|
|
104
|
+
expect(result.start.get("hour")).toBe(12);
|
|
105
|
+
expect(result.start.get("minute")).toBe(29);
|
|
106
|
+
|
|
107
|
+
expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 29));
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
// 12 hours from now
|
|
111
|
+
testSingleCase(chrono.nl, " 12 uur vanaf nu", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
112
|
+
expect(result.index).toBe(3);
|
|
113
|
+
expect(result.text).toBe("12 uur vanaf nu");
|
|
114
|
+
expect(result.start.get("day")).toBe(11);
|
|
115
|
+
expect(result.start.get("hour")).toBe(0);
|
|
116
|
+
expect(result.start.get("minute")).toBe(14);
|
|
117
|
+
|
|
118
|
+
expect(result.start).toBeDate(new Date(2012, 7, 11, 0, 14));
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
// half an hour from now
|
|
122
|
+
testSingleCase(chrono.nl, " half uur vanaf nu", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
123
|
+
expect(result.text).toBe("half uur vanaf nu");
|
|
124
|
+
expect(result.index).toBe(3);
|
|
125
|
+
expect(result.start.get("hour")).toBe(12);
|
|
126
|
+
expect(result.start.get("minute")).toBe(44);
|
|
127
|
+
|
|
128
|
+
expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 44));
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
// 12 hours from now I did something
|
|
132
|
+
testSingleCase(chrono.nl, "Over 12 uur heb ik iets gedaan", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
133
|
+
expect(result.index).toBe(0);
|
|
134
|
+
expect(result.text).toBe("Over 12 uur");
|
|
135
|
+
expect(result.start.get("day")).toBe(11);
|
|
136
|
+
expect(result.start.get("hour")).toBe(0);
|
|
137
|
+
expect(result.start.get("minute")).toBe(14);
|
|
138
|
+
|
|
139
|
+
expect(result.start).toBeDate(new Date(2012, 7, 11, 0, 14));
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
// 12 seconds from now I did something
|
|
143
|
+
testSingleCase(chrono.nl, "Over 12 seconden heb ik iets gedaan", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
144
|
+
expect(result.index).toBe(0);
|
|
145
|
+
expect(result.text).toBe("Over 12 seconden");
|
|
146
|
+
expect(result.start.get("hour")).toBe(12);
|
|
147
|
+
expect(result.start.get("minute")).toBe(14);
|
|
148
|
+
expect(result.start.get("second")).toBe(12);
|
|
149
|
+
|
|
150
|
+
expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 14, 12));
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
// three seconds from now I did something
|
|
154
|
+
testSingleCase(chrono.nl, "over drie seconden heb ik iets gedaan", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
155
|
+
expect(result.index).toBe(0);
|
|
156
|
+
expect(result.text).toBe("over drie seconden");
|
|
157
|
+
expect(result.start.get("hour")).toBe(12);
|
|
158
|
+
expect(result.start.get("minute")).toBe(14);
|
|
159
|
+
expect(result.start.get("second")).toBe(3);
|
|
160
|
+
|
|
161
|
+
expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 14, 3));
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
// 5 Days from now, we did something
|
|
165
|
+
testSingleCase(chrono.nl, "Over 5 dagen hebben we iets gedaan", new Date(2012, 7, 10), (result) => {
|
|
166
|
+
expect(result.start).not.toBeNull();
|
|
167
|
+
expect(result.start.get("year")).toBe(2012);
|
|
168
|
+
expect(result.start.get("month")).toBe(8);
|
|
169
|
+
expect(result.start.get("day")).toBe(15);
|
|
170
|
+
|
|
171
|
+
expect(result.index).toBe(0);
|
|
172
|
+
expect(result.text).toBe("Over 5 dagen");
|
|
173
|
+
|
|
174
|
+
expect(result.start).toBeDate(new Date(2012, 8 - 1, 15));
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
// half An hour from now
|
|
178
|
+
testSingleCase(chrono.nl, " half uur vanaf nu", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
179
|
+
expect(result.index).toBe(3);
|
|
180
|
+
expect(result.text).toBe("half uur vanaf nu");
|
|
181
|
+
expect(result.start.get("hour")).toBe(12);
|
|
182
|
+
expect(result.start.get("minute")).toBe(44);
|
|
183
|
+
|
|
184
|
+
expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 44));
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
// A days from now, we did something
|
|
188
|
+
testSingleCase(chrono.nl, "Over een dag hebben we iets gedaan", new Date(2012, 7, 10), (result) => {
|
|
189
|
+
expect(result.start).not.toBeNull();
|
|
190
|
+
expect(result.start.get("year")).toBe(2012);
|
|
191
|
+
expect(result.start.get("month")).toBe(8);
|
|
192
|
+
expect(result.start.get("day")).toBe(11);
|
|
193
|
+
|
|
194
|
+
expect(result.index).toBe(0);
|
|
195
|
+
expect(result.text).toBe("Over een dag");
|
|
196
|
+
|
|
197
|
+
expect(result.start).toBeDate(new Date(2012, 8 - 1, 11));
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
// a min out
|
|
201
|
+
testSingleCase(chrono.nl, "een minuutje uit", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
202
|
+
expect(result.index).toBe(0);
|
|
203
|
+
expect(result.text).toBe("een minuutje uit");
|
|
204
|
+
expect(result.start.get("hour")).toBe(12);
|
|
205
|
+
expect(result.start.get("minute")).toBe(15);
|
|
206
|
+
|
|
207
|
+
expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 15));
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
// in 1 hour
|
|
211
|
+
testSingleCase(chrono.nl, "in 1 uur", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
212
|
+
expect(result.index).toBe(0);
|
|
213
|
+
expect(result.text).toBe("in 1 uur");
|
|
214
|
+
expect(result.start.get("hour")).toBe(13);
|
|
215
|
+
expect(result.start.get("minute")).toBe(14);
|
|
216
|
+
|
|
217
|
+
expect(result.start).toBeDate(new Date(2012, 7, 10, 13, 14));
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
// in 1.5 hours
|
|
221
|
+
testSingleCase(chrono.nl, "over 1,5 uur", new Date(2012, 7, 10, 12, 40), (result) => {
|
|
222
|
+
expect(result.index).toBe(0);
|
|
223
|
+
expect(result.text).toBe("over 1,5 uur");
|
|
224
|
+
expect(result.start.get("hour")).toBe(14);
|
|
225
|
+
expect(result.start.get("minute")).toBe(10);
|
|
226
|
+
|
|
227
|
+
expect(result.start).toBeDate(new Date(2012, 7, 10, 14, 10));
|
|
228
|
+
});
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
test("Test - Strict mode", function () {
|
|
232
|
+
// 15 minutes from now
|
|
233
|
+
testSingleCase(chrono.nl.strict, "15 minuten vanaf nu", new Date(2012, 7, 10, 12, 14), (result, text) => {
|
|
234
|
+
expect(result.text).toBe(text);
|
|
235
|
+
expect(result.start.get("hour")).toBe(12);
|
|
236
|
+
expect(result.start.get("minute")).toBe(29);
|
|
237
|
+
|
|
238
|
+
expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 29));
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
// 25 minutes later
|
|
242
|
+
testSingleCase(chrono.nl.strict, "25 minuten later", new Date(2012, 7, 10, 12, 40), (result) => {
|
|
243
|
+
expect(result.index).toBe(0);
|
|
244
|
+
expect(result.text).toBe("25 minuten later");
|
|
245
|
+
expect(result.start.get("hour")).toBe(13);
|
|
246
|
+
expect(result.start.get("minute")).toBe(5);
|
|
247
|
+
|
|
248
|
+
expect(result.start).toBeDate(new Date(2012, 7, 10, 13, 5));
|
|
249
|
+
});
|
|
250
|
+
});
|
package/test/result.test.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { ParsingComponents } from "../src/results";
|
|
1
|
+
import { ParsingComponents, ReferenceWithTimezone } from "../src/results";
|
|
2
2
|
|
|
3
3
|
test("Test - Create & manipulate date results", () => {
|
|
4
|
-
const
|
|
5
|
-
const components = new ParsingComponents(
|
|
4
|
+
const reference = new ReferenceWithTimezone(new Date());
|
|
5
|
+
const components = new ParsingComponents(reference, { year: 2014, month: 11, day: 24 });
|
|
6
6
|
|
|
7
7
|
expect(components.get("year")).toBe(2014);
|
|
8
8
|
expect(components.get("month")).toBe(11);
|
|
@@ -32,26 +32,45 @@ test("Test - Create & manipulate date results", () => {
|
|
|
32
32
|
expect(components.get("year")).toBe(2013);
|
|
33
33
|
});
|
|
34
34
|
|
|
35
|
+
test("Test - Calendar checking with implied components", () => {
|
|
36
|
+
const reference = new ReferenceWithTimezone(new Date());
|
|
37
|
+
|
|
38
|
+
{
|
|
39
|
+
const components = new ParsingComponents(reference, {
|
|
40
|
+
"day": 13,
|
|
41
|
+
"month": 3,
|
|
42
|
+
"year": 2021,
|
|
43
|
+
"hour": 14,
|
|
44
|
+
"minute": 22,
|
|
45
|
+
"second": 14,
|
|
46
|
+
"millisecond": 0,
|
|
47
|
+
});
|
|
48
|
+
components.imply("timezoneOffset", -300);
|
|
49
|
+
|
|
50
|
+
expect(components.isValidDate()).toBe(true);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
|
|
35
54
|
test("Test - Calendar Checking", () => {
|
|
36
|
-
const
|
|
55
|
+
const reference = new ReferenceWithTimezone(new Date());
|
|
37
56
|
|
|
38
57
|
{
|
|
39
|
-
const components = new ParsingComponents(
|
|
58
|
+
const components = new ParsingComponents(reference, { year: 2014, month: 11, day: 24 });
|
|
40
59
|
expect(components.isValidDate()).toBe(true);
|
|
41
60
|
}
|
|
42
61
|
|
|
43
62
|
{
|
|
44
|
-
const components = new ParsingComponents(
|
|
63
|
+
const components = new ParsingComponents(reference, { year: 2014, month: 11, day: 24, hour: 12 });
|
|
45
64
|
expect(components.isValidDate()).toBe(true);
|
|
46
65
|
}
|
|
47
66
|
|
|
48
67
|
{
|
|
49
|
-
const components = new ParsingComponents(
|
|
68
|
+
const components = new ParsingComponents(reference, { year: 2014, month: 11, day: 24, hour: 12, minute: 30 });
|
|
50
69
|
expect(components.isValidDate()).toBe(true);
|
|
51
70
|
}
|
|
52
71
|
|
|
53
72
|
{
|
|
54
|
-
const components = new ParsingComponents(
|
|
73
|
+
const components = new ParsingComponents(reference, {
|
|
55
74
|
year: 2014,
|
|
56
75
|
month: 11,
|
|
57
76
|
day: 24,
|
|
@@ -63,27 +82,27 @@ test("Test - Calendar Checking", () => {
|
|
|
63
82
|
}
|
|
64
83
|
|
|
65
84
|
{
|
|
66
|
-
const components = new ParsingComponents(
|
|
85
|
+
const components = new ParsingComponents(reference, { year: 2014, month: 13, day: 24 });
|
|
67
86
|
expect(components.isValidDate()).toBe(false);
|
|
68
87
|
}
|
|
69
88
|
|
|
70
89
|
{
|
|
71
|
-
const components = new ParsingComponents(
|
|
90
|
+
const components = new ParsingComponents(reference, { year: 2014, month: 11, day: 32 });
|
|
72
91
|
expect(components.isValidDate()).toBe(false);
|
|
73
92
|
}
|
|
74
93
|
|
|
75
94
|
{
|
|
76
|
-
const components = new ParsingComponents(
|
|
95
|
+
const components = new ParsingComponents(reference, { year: 2014, month: 11, day: 24, hour: 24 });
|
|
77
96
|
expect(components.isValidDate()).toBe(false);
|
|
78
97
|
}
|
|
79
98
|
|
|
80
99
|
{
|
|
81
|
-
const components = new ParsingComponents(
|
|
100
|
+
const components = new ParsingComponents(reference, { year: 2014, month: 11, day: 24, hour: 12, minute: 60 });
|
|
82
101
|
expect(components.isValidDate()).toBe(false);
|
|
83
102
|
}
|
|
84
103
|
|
|
85
104
|
{
|
|
86
|
-
const components = new ParsingComponents(
|
|
105
|
+
const components = new ParsingComponents(reference, {
|
|
87
106
|
year: 2014,
|
|
88
107
|
month: 11,
|
|
89
108
|
day: 24,
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import * as chrono from "../src/";
|
|
2
|
+
import { testSingleCase } from "./test_util";
|
|
3
|
+
|
|
4
|
+
test("Test - Timezone difference on reference example", function () {
|
|
5
|
+
testSingleCase(
|
|
6
|
+
chrono,
|
|
7
|
+
"Friday at 4pm",
|
|
8
|
+
{
|
|
9
|
+
instant: new Date("Wed Jun 09 2021 07:00:00 GMT-0500 (CDT)"),
|
|
10
|
+
timezone: "CDT",
|
|
11
|
+
},
|
|
12
|
+
(result) => {
|
|
13
|
+
expect(result).toBeDate(new Date("Fri Jun 11 2021 16:00:00 GMT-0500 (CDT)"));
|
|
14
|
+
expect(result).toBeDate(new Date("Fri Jun 12 2021 06:00:00 GMT+0900 (JST)"));
|
|
15
|
+
}
|
|
16
|
+
);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test("Test - Timezone difference on reference date", function () {
|
|
20
|
+
// Sun Jun 06 2021 19:00:00 GMT+0900 (JST)
|
|
21
|
+
// Sun Jun 06 2021 11:00:00 GMT+0100 (BST)
|
|
22
|
+
const refInstant = new Date("Sun Jun 06 2021 19:00:00 GMT+0900 (JST)");
|
|
23
|
+
|
|
24
|
+
testSingleCase(chrono, "At 4pm tomorrow", { instant: refInstant, timezone: "BST" }, (result) => {
|
|
25
|
+
const expectedInstant = new Date("Mon Jun 07 2021 16:00:00 GMT+0100 (BST)");
|
|
26
|
+
expect(result).toBeDate(expectedInstant);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
testSingleCase(chrono, "At 4pm tomorrow", { instant: refInstant, timezone: "JST" }, (result) => {
|
|
30
|
+
const expectedInstant = new Date("Mon Jun 07 2021 16:00:00 GMT+0900 (JST)");
|
|
31
|
+
expect(result).toBeDate(expectedInstant);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
test("Test - Timezone difference on written date", function () {
|
|
36
|
+
// Sun Jun 06 2021 19:00:00 GMT+0900 (JST)
|
|
37
|
+
// Sun Jun 06 2021 11:00:00 GMT+0100 (BST)
|
|
38
|
+
const refInstant = new Date("Sun Jun 06 2021 19:00:00 GMT+0900 (JST)");
|
|
39
|
+
|
|
40
|
+
testSingleCase(chrono, "Sun Jun 06 2021 19:00:00", { timezone: "JST" }, (result) => {
|
|
41
|
+
expect(result).toBeDate(refInstant);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
testSingleCase(chrono, "Sun Jun 06 2021 11:00:00", { timezone: "BST" }, (result) => {
|
|
45
|
+
expect(result).toBeDate(refInstant);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
testSingleCase(chrono, "Sun Jun 06 2021 11:00:00", { timezone: 60 }, (result) => {
|
|
49
|
+
expect(result).toBeDate(refInstant);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test("Test - Precise [now] mentioned", function () {
|
|
54
|
+
const refDate = new Date("Sat Mar 13 2021 14:22:14 GMT+0900 (Japan Standard Time)");
|
|
55
|
+
|
|
56
|
+
testSingleCase(chrono, "now", refDate, (result) => {
|
|
57
|
+
expect(result).toBeDate(refDate);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
testSingleCase(chrono, "now", { instant: refDate }, (result) => {
|
|
61
|
+
expect(result).toBeDate(refDate);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
testSingleCase(chrono, "now", { instant: refDate, timezone: 540 }, (result) => {
|
|
65
|
+
expect(result).toBeDate(refDate);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
testSingleCase(chrono, "now", { instant: refDate, timezone: "JST" }, (result) => {
|
|
69
|
+
expect(result).toBeDate(refDate);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
testSingleCase(chrono, "now", { instant: refDate, timezone: -300 }, (result) => {
|
|
73
|
+
expect(result).toBeDate(refDate);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
test("Test - Precise date/time mentioned", function () {
|
|
78
|
+
const text = "Sat Mar 13 2021 14:22:14 GMT+0900";
|
|
79
|
+
const refDate = new Date();
|
|
80
|
+
|
|
81
|
+
testSingleCase(chrono, text, refDate, (result, text) => {
|
|
82
|
+
expect(result).toBeDate(new Date(text));
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
testSingleCase(chrono, text, { instant: refDate }, (result) => {
|
|
86
|
+
expect(result).toBeDate(new Date(text));
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
testSingleCase(chrono, text, { instant: refDate, timezone: 540 }, (result) => {
|
|
90
|
+
expect(result).toBeDate(new Date(text));
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
testSingleCase(chrono, text, { instant: refDate, timezone: "JST" }, (result) => {
|
|
94
|
+
expect(result).toBeDate(new Date(text));
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
testSingleCase(chrono, text, { instant: refDate, timezone: -300 }, (result) => {
|
|
98
|
+
expect(result).toBeDate(new Date(text));
|
|
99
|
+
});
|
|
100
|
+
});
|
package/test/test_util.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { BufferedDebugHandler } from "../src/debugging";
|
|
2
|
-
import { en, ParsedResult, ParsingOption } from "../src";
|
|
2
|
+
import { en, ParsedResult, ParsingOption, ParsingReference } from "../src";
|
|
3
3
|
|
|
4
4
|
interface ChronoLike {
|
|
5
|
-
parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[];
|
|
5
|
+
parse(text: string, ref?: ParsingReference | Date, option?: ParsingOption): ParsedResult[];
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
type CheckResult = (p: ParsedResult, text: string) => void;
|
|
@@ -11,20 +11,20 @@ export function testSingleCase(chrono: ChronoLike, text: string, checkResult?: C
|
|
|
11
11
|
export function testSingleCase(
|
|
12
12
|
chrono: ChronoLike,
|
|
13
13
|
text: string,
|
|
14
|
-
refDateOrCheckResult?: Date | CheckResult,
|
|
14
|
+
refDateOrCheckResult?: ParsingReference | Date | CheckResult,
|
|
15
15
|
checkResult?: CheckResult
|
|
16
16
|
);
|
|
17
17
|
export function testSingleCase(
|
|
18
18
|
chrono: ChronoLike,
|
|
19
19
|
text: string,
|
|
20
|
-
refDateOrCheckResult?: Date | CheckResult,
|
|
20
|
+
refDateOrCheckResult?: ParsingReference | Date | CheckResult,
|
|
21
21
|
optionOrCheckResult?: ParsingOption | CheckResult,
|
|
22
22
|
checkResult?: CheckResult
|
|
23
23
|
);
|
|
24
24
|
export function testSingleCase(
|
|
25
25
|
chrono: ChronoLike,
|
|
26
26
|
text: string,
|
|
27
|
-
refDateOrCheckResult?: Date | CheckResult,
|
|
27
|
+
refDateOrCheckResult?: ParsingReference | Date | CheckResult,
|
|
28
28
|
optionOrCheckResult?: ParsingOption | CheckResult,
|
|
29
29
|
checkResult?: CheckResult
|
|
30
30
|
) {
|
|
@@ -61,10 +61,13 @@ export function testWithExpectedDate(chrono: ChronoLike, text: string, expectedD
|
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
export function testUnexpectedResult(chrono: ChronoLike, text: string, refDate?: Date) {
|
|
64
|
+
export function testUnexpectedResult(chrono: ChronoLike, text: string, refDate?: Date, options?: ParsingOption) {
|
|
65
65
|
const debugHandler = new BufferedDebugHandler();
|
|
66
|
+
options = options || {};
|
|
67
|
+
options.debug = debugHandler;
|
|
68
|
+
|
|
66
69
|
try {
|
|
67
|
-
const results = chrono.parse(text, refDate,
|
|
70
|
+
const results = chrono.parse(text, refDate, options);
|
|
68
71
|
expect(results).toHaveLength(0);
|
|
69
72
|
} catch (e) {
|
|
70
73
|
debugHandler.executeBufferedBlocks();
|