Skip to content

Commit 5ebfcc0

Browse files
author
Wanasit Tanakitrungruang
committed
Fix: test cases affected by DST
1 parent 43231ca commit 5ebfcc0

File tree

6 files changed

+256
-65
lines changed

6 files changed

+256
-65
lines changed

test/en/en.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,10 @@ test("Test - Random text", function () {
107107
expect(result.end.get("month")).toBe(7);
108108
});
109109

110-
testSingleCase(chrono, "03-27-2022, 02:00 AM", new Date(2017, 7 - 1, 7), (result) => {
111-
expect(result.text).toBe("03-27-2022, 02:00 AM");
110+
testSingleCase(chrono, "07-27-2022, 02:00 AM", new Date(2017, 7 - 1, 7), (result) => {
111+
expect(result.text).toBe("07-27-2022, 02:00 AM");
112112
expect(result.start.get("day")).toBe(27);
113-
expect(result.start.get("month")).toBe(3);
113+
expect(result.start.get("month")).toBe(7);
114114
expect(result.start.get("year")).toBe(2022);
115115
expect(result.start.get("hour")).toBe(2);
116116
expect(result.start.get("meridiem")).toBe(Meridiem.AM);

test/result.test.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,32 @@ test("Test - Calendar Checking", () => {
146146
expect(components.isValidDate()).toBe(false);
147147
}
148148
});
149+
150+
test("Test - Checking non-existing date during DST skip", () => {
151+
// Only CET (or CEST) timezones where the DST starts on "Sunday, March 27, 2022" at "02:00 (2 am) local time"
152+
const dateDstPre = new Date(2022, 3 - 1, 27, 2);
153+
const dateDstPost = new Date(2022, 3 - 1, 27, 3);
154+
if (dateDstPre.getTime() == dateDstPost.getTime()) {
155+
const reference = new ReferenceWithTimezone(new Date());
156+
157+
// On "Sunday, March 27, 2022" at "02:00 local time", the clock is moved forward to "03:00 local time".
158+
// Thus, the time between "02:00 and 02:59:59" does not exist.
159+
expect(
160+
new ParsingComponents(reference, { year: 2022, month: 3, day: 27, hour: 2, minute: 0 }).isValidDate()
161+
).toBe(false);
162+
expect(
163+
new ParsingComponents(reference, { year: 2022, month: 3, day: 27, hour: 2, minute: 1 }).isValidDate()
164+
).toBe(false);
165+
expect(
166+
new ParsingComponents(reference, { year: 2022, month: 3, day: 27, hour: 2, minute: 59 }).isValidDate()
167+
).toBe(false);
168+
169+
// Otherwise, it
170+
expect(
171+
new ParsingComponents(reference, { year: 2022, month: 3, day: 27, hour: 1, minute: 59 }).isValidDate()
172+
).toBe(true);
173+
expect(
174+
new ParsingComponents(reference, { year: 2022, month: 3, day: 27, hour: 3, minute: 0 }).isValidDate()
175+
).toBe(true);
176+
}
177+
});

test/ru/ru_relative.test.ts

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,70 +5,103 @@ test("Test - 'This' expressions", () => {
55
testSingleCase(chrono.ru, "на этой неделе", new Date(2017, 11 - 1, 19, 12), (result, text) => {
66
expect(result.index).toBe(0);
77
expect(result.text).toBe(text);
8-
expect(result.start).toBeDate(new Date(2017, 11 - 1, 19, 12));
8+
expect(result.start.get("year")).toBe(2017);
9+
expect(result.start.get("month")).toBe(11);
10+
expect(result.start.get("day")).toBe(19);
11+
expect(result.start.get("hour")).toBe(12);
912
});
1013

1114
testSingleCase(chrono.ru, "в этом месяце", new Date(2017, 11 - 1, 19, 12), (result, text) => {
1215
expect(result.index).toBe(0);
1316
expect(result.text).toBe(text);
14-
expect(result.start).toBeDate(new Date(2017, 11 - 1, 1, 12));
17+
expect(result.start.get("year")).toBe(2017);
18+
expect(result.start.get("month")).toBe(11);
19+
expect(result.start.get("day")).toBe(1);
20+
expect(result.start.get("hour")).toBe(12);
1521
});
1622

1723
testSingleCase(chrono.ru, "в этом месяце", new Date(2017, 11 - 1, 1, 12), (result, text) => {
1824
expect(result.index).toBe(0);
1925
expect(result.text).toBe(text);
20-
expect(result.start).toBeDate(new Date(2017, 11 - 1, 1, 12));
26+
expect(result.start.get("year")).toBe(2017);
27+
expect(result.start.get("month")).toBe(11);
28+
expect(result.start.get("day")).toBe(1);
29+
expect(result.start.get("hour")).toBe(12);
2130
});
2231

2332
testSingleCase(chrono.ru, "в этом году", new Date(2017, 11 - 1, 19, 12), (result, text) => {
2433
expect(result.index).toBe(0);
2534
expect(result.text).toBe(text);
26-
expect(result.start).toBeDate(new Date(2017, 1 - 1, 1, 12));
35+
expect(result.start.get("year")).toBe(2017);
36+
expect(result.start.get("month")).toBe(1);
37+
expect(result.start.get("day")).toBe(1);
38+
expect(result.start.get("hour")).toBe(12);
2739
});
2840
});
2941

3042
test("Test - Past relative expressions", () => {
3143
testSingleCase(chrono.ru, "на прошлой неделе", new Date(2016, 10 - 1, 1, 12), (result, text) => {
3244
expect(result.index).toBe(0);
3345
expect(result.text).toBe(text);
34-
expect(result.start).toBeDate(new Date(2016, 9 - 1, 24, 12));
46+
expect(result.start.get("year")).toBe(2016);
47+
expect(result.start.get("month")).toBe(9);
48+
expect(result.start.get("day")).toBe(24);
49+
expect(result.start.get("hour")).toBe(12);
3550
});
3651

3752
testSingleCase(chrono.ru, "в прошлом месяце", new Date(2016, 10 - 1, 1, 12), (result, text) => {
3853
expect(result.index).toBe(0);
3954
expect(result.text).toBe(text);
40-
expect(result.start).toBeDate(new Date(2016, 9 - 1, 1, 12));
55+
expect(result.start.get("year")).toBe(2016);
56+
expect(result.start.get("month")).toBe(9);
57+
expect(result.start.get("day")).toBe(1);
58+
expect(result.start.get("hour")).toBe(12);
4159
});
4260

4361
testSingleCase(chrono.ru, "в прошлом году", new Date(2016, 10 - 1, 1, 12), (result, text) => {
4462
expect(result.index).toBe(0);
4563
expect(result.text).toBe(text);
46-
expect(result.start).toBeDate(new Date(2015, 10 - 1, 1, 12));
64+
expect(result.start.get("year")).toBe(2015);
65+
expect(result.start.get("month")).toBe(10);
66+
expect(result.start.get("day")).toBe(1);
67+
expect(result.start.get("hour")).toBe(12);
4768
});
4869
});
4970

5071
test("Test - Future relative expressions", () => {
5172
testSingleCase(chrono.ru, "на следующей неделе", new Date(2016, 10 - 1, 1, 12), (result, text) => {
5273
expect(result.index).toBe(0);
5374
expect(result.text).toBe(text);
54-
expect(result.start).toBeDate(new Date(2016, 10 - 1, 8, 12));
75+
expect(result.start.get("year")).toBe(2016);
76+
expect(result.start.get("month")).toBe(10);
77+
expect(result.start.get("day")).toBe(8);
78+
expect(result.start.get("hour")).toBe(12);
5579
});
5680

5781
testSingleCase(chrono.ru, "в следующем месяце", new Date(2016, 10 - 1, 1, 12), (result, text) => {
5882
expect(result.index).toBe(0);
5983
expect(result.text).toBe(text);
60-
expect(result.start).toBeDate(new Date(2016, 11 - 1, 1, 12));
84+
expect(result.start.get("year")).toBe(2016);
85+
expect(result.start.get("month")).toBe(11);
86+
expect(result.start.get("day")).toBe(1);
87+
expect(result.start.get("hour")).toBe(12);
6188
});
6289

6390
testSingleCase(chrono.ru, "в следующем квартале", new Date(2016, 10 - 1, 1, 12), (result, text) => {
6491
expect(result.index).toBe(0);
6592
expect(result.text).toBe(text);
66-
expect(result.start).toBeDate(new Date(2017, 1 - 1, 1, 12));
93+
expect(result.start.get("year")).toBe(2017);
94+
expect(result.start.get("month")).toBe(1);
95+
expect(result.start.get("day")).toBe(1);
96+
expect(result.start.get("hour")).toBe(12);
6797
});
6898

6999
testSingleCase(chrono.ru, "в следующем году", new Date(2016, 10 - 1, 1, 12), (result, text) => {
70100
expect(result.index).toBe(0);
71101
expect(result.text).toBe(text);
72-
expect(result.start).toBeDate(new Date(2017, 10 - 1, 1, 12));
102+
expect(result.start.get("year")).toBe(2017);
103+
expect(result.start.get("month")).toBe(10);
104+
expect(result.start.get("day")).toBe(1);
105+
expect(result.start.get("hour")).toBe(12);
73106
});
74107
});

test/ru/ru_time_units_casual_relative.test.ts

Lines changed: 96 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,120 +5,186 @@ test("Test - Positive time units", () => {
55
testSingleCase(chrono.ru, "следующие 2 недели", new Date(2016, 10 - 1, 1, 12), (result, text) => {
66
expect(result.index).toBe(0);
77
expect(result.text).toBe(text);
8-
expect(result.start).toBeDate(new Date(2016, 10 - 1, 15, 12));
8+
expect(result.start.get("year")).toBe(2016);
9+
expect(result.start.get("month")).toBe(10);
10+
expect(result.start.get("day")).toBe(15);
11+
expect(result.start.get("hour")).toBe(12);
912
});
1013

1114
testSingleCase(chrono.ru, "следующие 2 дня", new Date(2016, 10 - 1, 1, 12), (result, text) => {
1215
expect(result.index).toBe(0);
1316
expect(result.text).toBe(text);
14-
expect(result.start).toBeDate(new Date(2016, 10 - 1, 3, 12));
17+
expect(result.start.get("year")).toBe(2016);
18+
expect(result.start.get("month")).toBe(10);
19+
expect(result.start.get("day")).toBe(3);
20+
expect(result.start.get("hour")).toBe(12);
1521
});
1622

1723
testSingleCase(chrono.ru, "следующие два года", new Date(2016, 10 - 1, 1, 12), (result, text) => {
1824
expect(result.index).toBe(0);
1925
expect(result.text).toBe(text);
20-
expect(result.start).toBeDate(new Date(2018, 10 - 1, 1, 12));
26+
expect(result.start.get("year")).toBe(2018);
27+
expect(result.start.get("month")).toBe(10);
28+
expect(result.start.get("day")).toBe(1);
29+
expect(result.start.get("hour")).toBe(12);
2130
});
2231

2332
testSingleCase(chrono.ru, "следующие 2 недели 3 дня", new Date(2016, 10 - 1, 1, 12), (result, text) => {
2433
expect(result.index).toBe(0);
2534
expect(result.text).toBe(text);
26-
expect(result.start).toBeDate(new Date(2016, 10 - 1, 18, 12));
35+
expect(result.start.get("year")).toBe(2016);
36+
expect(result.start.get("month")).toBe(10);
37+
expect(result.start.get("day")).toBe(18);
38+
expect(result.start.get("hour")).toBe(12);
2739
});
2840

2941
testSingleCase(chrono.ru, "через пару минут", new Date(2016, 10 - 1, 1, 12), (result, text) => {
3042
expect(result.index).toBe(0);
3143
expect(result.text).toBe(text);
32-
expect(result.start).toBeDate(new Date(2016, 10 - 1, 1, 12, 2));
44+
expect(result.start.get("year")).toBe(2016);
45+
expect(result.start.get("month")).toBe(10);
46+
expect(result.start.get("day")).toBe(1);
47+
expect(result.start.get("hour")).toBe(12);
48+
expect(result.start.get("minute")).toBe(2);
3349
});
3450

3551
testSingleCase(chrono.ru, "через полчаса", new Date(2016, 10 - 1, 1, 12), (result, text) => {
3652
expect(result.index).toBe(0);
3753
expect(result.text).toBe(text);
38-
expect(result.start).toBeDate(new Date(2016, 10 - 1, 1, 12, 30));
54+
expect(result.start.get("year")).toBe(2016);
55+
expect(result.start.get("month")).toBe(10);
56+
expect(result.start.get("day")).toBe(1);
57+
expect(result.start.get("hour")).toBe(12);
58+
expect(result.start.get("minute")).toBe(30);
3959
});
4060

4161
testSingleCase(chrono.ru, "через 2 часа", new Date(2016, 10 - 1, 1, 12), (result, text) => {
4262
expect(result.index).toBe(0);
4363
expect(result.text).toBe(text);
44-
expect(result.start).toBeDate(new Date(2016, 10 - 1, 1, 14));
64+
expect(result.start.get("year")).toBe(2016);
65+
expect(result.start.get("month")).toBe(10);
66+
expect(result.start.get("day")).toBe(1);
67+
expect(result.start.get("hour")).toBe(14);
4568
});
4669

4770
testSingleCase(chrono.ru, "спустя 2 часа", new Date(2016, 10 - 1, 1, 12), (result, text) => {
4871
expect(result.index).toBe(0);
4972
expect(result.text).toBe(text);
50-
expect(result.start).toBeDate(new Date(2016, 10 - 1, 1, 14));
73+
expect(result.start.get("year")).toBe(2016);
74+
expect(result.start.get("month")).toBe(10);
75+
expect(result.start.get("day")).toBe(1);
76+
expect(result.start.get("hour")).toBe(14);
5177
});
5278

5379
testSingleCase(chrono.ru, "через три месяца", new Date(2016, 10 - 1, 1, 12), (result, text) => {
5480
expect(result.index).toBe(0);
5581
expect(result.text).toBe(text);
56-
expect(result.start).toBeDate(new Date(2017, 1 - 1, 1, 12));
82+
expect(result.start.get("year")).toBe(2017);
83+
expect(result.start.get("month")).toBe(1);
84+
expect(result.start.get("day")).toBe(1);
85+
expect(result.start.get("hour")).toBe(12);
5786
});
5887

5988
testSingleCase(chrono.ru, "через неделю", new Date(2016, 10 - 1, 1, 12), (result, text) => {
6089
expect(result.index).toBe(0);
6190
expect(result.text).toBe(text);
62-
expect(result.start).toBeDate(new Date(2016, 10 - 1, 8, 12));
91+
expect(result.start.get("year")).toBe(2016);
92+
expect(result.start.get("month")).toBe(10);
93+
expect(result.start.get("day")).toBe(8);
94+
expect(result.start.get("hour")).toBe(12);
6395
});
6496

6597
testSingleCase(chrono.ru, "через месяц", new Date(2016, 10 - 1, 1, 12), (result, text) => {
6698
expect(result.index).toBe(0);
6799
expect(result.text).toBe(text);
68-
expect(result.start).toBeDate(new Date(2016, 11 - 1, 1, 12));
69-
});
70-
71-
testSingleCase(chrono.ru, "через год", new Date(2020, 11 - 1, 22, 12, 11, 32, 6), (result, text) => {
72-
expect(result.index).toBe(0);
73-
expect(result.text).toBe(text);
74-
expect(result.start).toBeDate(new Date(2021, 11 - 1, 22, 12, 11, 32, 6));
75-
});
76-
77-
testSingleCase(chrono.ru, "спустя год", new Date(2020, 11 - 1, 22, 12, 11, 32, 6), (result, text) => {
78-
expect(result.index).toBe(0);
79-
expect(result.text).toBe(text);
80-
expect(result.start).toBeDate(new Date(2021, 11 - 1, 22, 12, 11, 32, 6));
81-
});
100+
expect(result.start.get("year")).toBe(2016);
101+
expect(result.start.get("month")).toBe(11);
102+
expect(result.start.get("day")).toBe(1);
103+
expect(result.start.get("hour")).toBe(12);
104+
});
105+
106+
testSingleCase(
107+
chrono.ru,
108+
"через год",
109+
{ instant: new Date("2020-11-22T03:11:02.006"), timezone: "GMT" },
110+
(result, text) => {
111+
expect(result.index).toBe(0);
112+
expect(result.text).toBe(text);
113+
expect(result.start).toBeDate(new Date("2021-11-22T03:11:02.006"));
114+
}
115+
);
116+
testSingleCase(
117+
chrono.ru,
118+
"через год",
119+
{ instant: new Date("2020-11-22T12:11:32.006"), timezone: "GMT" },
120+
(result, text) => {
121+
expect(result.index).toBe(0);
122+
expect(result.text).toBe(text);
123+
expect(result.start).toBeDate(new Date("2021-11-22T12:11:32.006"));
124+
}
125+
);
82126
});
83127

84128
test("Test - Negative time units", () => {
85129
testSingleCase(chrono.ru, "прошлые 2 недели", new Date(2016, 10 - 1, 1, 12), (result, text) => {
86130
expect(result.index).toBe(0);
87131
expect(result.text).toBe(text);
88-
expect(result.start).toBeDate(new Date(2016, 9 - 1, 17, 12));
132+
expect(result.start.get("year")).toBe(2016);
133+
expect(result.start.get("month")).toBe(9);
134+
expect(result.start.get("day")).toBe(17);
135+
expect(result.start.get("hour")).toBe(12);
89136
});
90137

91138
testSingleCase(chrono.ru, "прошлые два дня", new Date(2016, 10 - 1, 1, 12), (result, text) => {
92139
expect(result.index).toBe(0);
93140
expect(result.text).toBe(text);
94-
expect(result.start).toBeDate(new Date(2016, 9 - 1, 29, 12));
141+
expect(result.start.get("year")).toBe(2016);
142+
expect(result.start.get("month")).toBe(9);
143+
expect(result.start.get("day")).toBe(29);
144+
expect(result.start.get("hour")).toBe(12);
95145
});
96146
});
97147

98148
test("Test - Plus '+' sign", () => {
99149
testSingleCase(chrono.ru.casual, "+15 минут", new Date(2012, 7 - 1, 10, 12, 14), (result, text) => {
100150
expect(result.index).toBe(0);
101151
expect(result.text).toBe(text);
102-
expect(result.start).toBeDate(new Date(2012, 7 - 1, 10, 12, 29));
152+
expect(result.start.get("year")).toBe(2012);
153+
expect(result.start.get("month")).toBe(7);
154+
expect(result.start.get("day")).toBe(10);
155+
expect(result.start.get("hour")).toBe(12);
156+
expect(result.start.get("minute")).toBe(29);
103157
});
104158

105159
testSingleCase(chrono.ru.casual, "+15мин", new Date(2012, 7 - 1, 10, 12, 14), (result, text) => {
106160
expect(result.index).toBe(0);
107161
expect(result.text).toBe(text);
108-
expect(result.start).toBeDate(new Date(2012, 7 - 1, 10, 12, 29));
162+
expect(result.start.get("year")).toBe(2012);
163+
expect(result.start.get("month")).toBe(7);
164+
expect(result.start.get("day")).toBe(10);
165+
expect(result.start.get("hour")).toBe(12);
166+
expect(result.start.get("minute")).toBe(29);
109167
});
110168

111169
testSingleCase(chrono.ru.casual, "+1 день 2 часа", new Date(2012, 7 - 1, 10, 12, 14), (result, text) => {
112170
expect(result.index).toBe(0);
113171
expect(result.text).toBe(text);
114-
expect(result.start).toBeDate(new Date(2012, 7 - 1, 11, 14, 14));
172+
expect(result.start.get("year")).toBe(2012);
173+
expect(result.start.get("month")).toBe(7);
174+
expect(result.start.get("day")).toBe(11);
175+
expect(result.start.get("hour")).toBe(14);
176+
expect(result.start.get("minute")).toBe(14);
115177
});
116178
});
117179

118180
test("Test - Minus '-' sign", () => {
119181
testSingleCase(chrono.ru.casual, "-3 года", new Date(2015, 7 - 1, 10, 12, 14), (result, text) => {
120182
expect(result.index).toBe(0);
121183
expect(result.text).toBe(text);
122-
expect(result.start).toBeDate(new Date(2012, 7 - 1, 10, 12, 14));
184+
expect(result.start.get("year")).toBe(2012);
185+
expect(result.start.get("month")).toBe(7);
186+
expect(result.start.get("day")).toBe(10);
187+
expect(result.start.get("hour")).toBe(12);
188+
expect(result.start.get("minute")).toBe(14);
123189
});
124190
});

0 commit comments

Comments
 (0)