UNPKG

9.33 kBPlain TextView Raw
1import * as chrono from "../../src";
2import { testSingleCase } from "../test_util";
3import { ParsingResult } from "../../src/results";
4
5test("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
34test("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
72test("Test - Future relative expressions", () => {
73 // next hour
74 testSingleCase(chrono.nl, "komend 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 month
115 testSingleCase(chrono.nl, "aankomende maand", new Date(2016, 10 - 1, 1, 12), (result, text) => {
116 expect(result.text).toBe(text);
117 expect(result.start.get("year")).toBe(2016);
118 expect(result.start.get("month")).toBe(11);
119 expect(result.start.get("day")).toBe(1);
120 expect(result.start.get("hour")).toBe(12);
121
122 expect(result.start.isCertain("year")).toBe(true);
123 expect(result.start.isCertain("month")).toBe(true);
124 expect(result.start.isCertain("day")).toBe(false);
125 expect(result.start.isCertain("hour")).toBe(false);
126 });
127
128 // next year
129 testSingleCase(chrono.nl, "volgend jaar", new Date(2020, 11 - 1, 22, 12, 11, 32, 6), (result, text) => {
130 expect(result.text).toBe(text);
131 expect(result.start.get("year")).toBe(2021);
132 expect(result.start.get("month")).toBe(11);
133 expect(result.start.get("day")).toBe(22);
134 expect(result.start.get("hour")).toBe(12);
135 expect(result.start.get("minute")).toBe(11);
136 expect(result.start.get("second")).toBe(32);
137 expect(result.start.get("millisecond")).toBe(6);
138
139 expect(result.start.isCertain("year")).toBe(true);
140 expect(result.start.isCertain("month")).toBe(false);
141 expect(result.start.isCertain("day")).toBe(false);
142 expect(result.start.isCertain("hour")).toBe(false);
143 expect(result.start.isCertain("minute")).toBe(false);
144 expect(result.start.isCertain("second")).toBe(false);
145 expect(result.start.isCertain("millisecond")).toBe(false);
146 expect(result.start.isCertain("timezoneOffset")).toBe(false);
147 });
148});
149
150test("Test - Relative date components' certainty", () => {
151 const refDate = new Date(2016, 10 - 1, 7, 12);
152
153 // next hour
154 testSingleCase(chrono.nl, "komend uur", refDate, (result, text) => {
155 expect(result.text).toBe(text);
156 expect(result.start.get("year")).toBe(2016);
157 expect(result.start.get("month")).toBe(10);
158 expect(result.start.get("day")).toBe(7);
159 expect(result.start.get("hour")).toBe(13);
160 expect(result.start.get("timezoneOffset")).toBe(refDate.getTimezoneOffset() * -1);
161
162 expect(result.start.isCertain("year")).toBe(true);
163 expect(result.start.isCertain("month")).toBe(true);
164 expect(result.start.isCertain("day")).toBe(true);
165 expect(result.start.isCertain("hour")).toBe(true);
166 expect(result.start.isCertain("timezoneOffset")).toBe(true);
167 });
168
169 // next month
170 testSingleCase(chrono.nl, "volgende maand", refDate, (result, text) => {
171 //const expectedDate = new Date(2016, 11, 7, 12);
172
173 expect(result.text).toBe(text);
174 expect(result.start.get("year")).toBe(2016);
175 expect(result.start.get("month")).toBe(11);
176 expect(result.start.get("day")).toBe(7);
177 expect(result.start.get("hour")).toBe(12);
178 //expect(result.start.get("timezoneOffset")).toBe(-expectedDate.getTimezoneOffset());
179
180 expect(result.start.isCertain("year")).toBe(true);
181 expect(result.start.isCertain("month")).toBe(true);
182 expect(result.start.isCertain("day")).toBe(false);
183 expect(result.start.isCertain("hour")).toBe(false);
184 expect(result.start.isCertain("timezoneOffset")).toBe(false);
185 });
186});
187
188test("Test - Relative date components' certainty and imply timezone", () => {
189 const refDate = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
190
191 {
192 // now
193 const text = "nu";
194 const result = chrono.nl.parse(text, refDate)[0] as ParsingResult;
195
196 expect(result.text).toBe(text);
197 result.start.imply("timezoneOffset", 60);
198
199 expect(result).toBeDate(new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)"));
200 expect(result).toBeDate(new Date("Sun Nov 29 2020 5:24:13 GMT+0100"));
201 }
202
203 {
204 // tomorrow at 5pm
205 const text = "morgen om 17 uur";
206 const result = chrono.nl.parse(text, refDate)[0] as ParsingResult;
207
208 expect(result.text).toBe(text);
209 result.start.imply("timezoneOffset", 60);
210
211 expect(result).toBeDate(new Date("Sun Dec 1 2020 1:00:00 GMT+0900 (Japan Standard Time)"));
212 expect(result).toBeDate(new Date("Sun Nov 30 2020 17:00:00 GMT+0100"));
213 }
214
215 {
216 // in 10 minutes
217 const text = "binnen 10 minuten";
218 const result = chrono.nl.parse(text, refDate)[0] as ParsingResult;
219
220 expect(result.text).toBe(text);
221 result.start.imply("timezoneOffset", 60);
222
223 expect(result).toBeDate(new Date("Sun Nov 29 2020 13:34:13 GMT+0900 (Japan Standard Time)"));
224 expect(result).toBeDate(new Date("Sun Nov 29 2020 5:34:13 GMT+0100"));
225 }
226});