chrono-node 2.3.4 → 2.3.5
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 +1 -1
- package/dist/common/parsers/AbstractParserWithWordBoundary.js +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3 -1
- package/dist/locales/zh/hant/constants.d.ts +28 -0
- package/dist/locales/zh/hant/constants.js +52 -0
- package/dist/locales/zh/hant/parsers/ZHHantCasualDateParser.d.ts +7 -0
- package/dist/locales/zh/hant/parsers/ZHHantCasualDateParser.js +138 -0
- package/dist/locales/zh/hant/parsers/ZHHantDateParser.d.ts +6 -0
- package/dist/locales/zh/hant/parsers/ZHHantDateParser.js +64 -0
- package/dist/locales/zh/hant/parsers/ZHHantDeadlineFormatParser.d.ts +6 -0
- package/dist/locales/zh/hant/parsers/ZHHantDeadlineFormatParser.js +78 -0
- package/dist/locales/zh/hant/parsers/ZHHantRelationWeekdayParser.d.ts +7 -0
- package/dist/locales/zh/hant/parsers/ZHHantRelationWeekdayParser.js +70 -0
- package/dist/locales/zh/hant/parsers/ZHHantTimeExpressionParser.d.ts +6 -0
- package/dist/locales/zh/hant/parsers/ZHHantTimeExpressionParser.js +438 -0
- package/dist/locales/zh/hant/parsers/ZHHantWeekdayParser.d.ts +7 -0
- package/dist/locales/zh/hant/parsers/ZHHantWeekdayParser.js +46 -0
- package/dist/locales/zh/hant/refiners/ZHHantMergeDateRangeRefiner.d.ts +4 -0
- package/dist/locales/zh/hant/refiners/ZHHantMergeDateRangeRefiner.js +12 -0
- package/dist/locales/zh/hant/refiners/ZHHantMergeDateTimeRefiner.d.ts +4 -0
- package/dist/locales/zh/hant/refiners/ZHHantMergeDateTimeRefiner.js +12 -0
- package/dist/locales/zh/index.d.ts +9 -0
- package/dist/locales/zh/index.js +49 -0
- package/dist/utils/dayjs.js +7 -0
- package/package.json +1 -1
- package/src/common/parsers/AbstractParserWithWordBoundary.ts +1 -1
- package/src/index.ts +2 -1
- package/src/locales/zh/hant/constants.ts +53 -0
- package/src/locales/zh/hant/parsers/ZHHantCasualDateParser.ts +128 -0
- package/src/locales/zh/hant/parsers/ZHHantDateParser.ts +68 -0
- package/src/locales/zh/hant/parsers/ZHHantDeadlineFormatParser.ts +81 -0
- package/src/locales/zh/hant/parsers/ZHHantRelationWeekdayParser.ts +69 -0
- package/src/locales/zh/hant/parsers/ZHHantTimeExpressionParser.ts +424 -0
- package/src/locales/zh/hant/parsers/ZHHantWeekdayParser.ts +46 -0
- package/src/locales/zh/hant/refiners/ZHHantMergeDateRangeRefiner.ts +7 -0
- package/src/locales/zh/hant/refiners/ZHHantMergeDateTimeRefiner.ts +7 -0
- package/src/locales/zh/index.ts +63 -0
- package/src/utils/dayjs.ts +6 -0
- package/test/en/en_time_units_ago.test.ts +16 -0
- package/test/en/en_time_units_later.test.ts +6 -0
- package/test/zh/zh.test.ts +18 -0
- package/test/zh/zh_hant_casual.test.ts +246 -0
- package/test/zh/zh_hant_date.test.ts +103 -0
- package/test/zh/zh_hant_deadline.test.ts +136 -0
- package/test/zh/zh_hant_time_exp.test.ts +182 -0
- package/test/zh/zh_hant_weekday.test.ts +132 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as chrono from "../../src/";
|
|
2
2
|
import { testSingleCase, testUnexpectedResult } from "../test_util";
|
|
3
|
+
import { Meridiem } from "../../src/";
|
|
3
4
|
|
|
4
5
|
test("Test - Single Expression", function () {
|
|
5
6
|
testSingleCase(chrono, "5 days ago, we did something", new Date(2012, 7, 10), (result) => {
|
|
@@ -31,6 +32,7 @@ test("Test - Single Expression", function () {
|
|
|
31
32
|
expect(result.text).toBe("15 minute ago");
|
|
32
33
|
expect(result.start.get("hour")).toBe(11);
|
|
33
34
|
expect(result.start.get("minute")).toBe(59);
|
|
35
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.AM);
|
|
34
36
|
|
|
35
37
|
expect(result.start).toBeDate(new Date(2012, 7, 10, 11, 59));
|
|
36
38
|
});
|
|
@@ -40,6 +42,7 @@ test("Test - Single Expression", function () {
|
|
|
40
42
|
expect(result.text).toBe("15 minute earlier");
|
|
41
43
|
expect(result.start.get("hour")).toBe(11);
|
|
42
44
|
expect(result.start.get("minute")).toBe(59);
|
|
45
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.AM);
|
|
43
46
|
|
|
44
47
|
expect(result.start).toBeDate(new Date(2012, 7, 10, 11, 59));
|
|
45
48
|
});
|
|
@@ -49,6 +52,7 @@ test("Test - Single Expression", function () {
|
|
|
49
52
|
expect(result.text).toBe("15 minute before");
|
|
50
53
|
expect(result.start.get("hour")).toBe(11);
|
|
51
54
|
expect(result.start.get("minute")).toBe(59);
|
|
55
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.AM);
|
|
52
56
|
|
|
53
57
|
expect(result.start).toBeDate(new Date(2012, 7, 10, 11, 59));
|
|
54
58
|
});
|
|
@@ -58,6 +62,7 @@ test("Test - Single Expression", function () {
|
|
|
58
62
|
expect(result.text).toBe("12 hours ago");
|
|
59
63
|
expect(result.start.get("hour")).toBe(0);
|
|
60
64
|
expect(result.start.get("minute")).toBe(14);
|
|
65
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.AM);
|
|
61
66
|
|
|
62
67
|
expect(result.start).toBeDate(new Date(2012, 7, 10, 0, 14));
|
|
63
68
|
});
|
|
@@ -67,6 +72,7 @@ test("Test - Single Expression", function () {
|
|
|
67
72
|
expect(result.text).toBe("1h ago");
|
|
68
73
|
expect(result.start.get("hour")).toBe(11);
|
|
69
74
|
expect(result.start.get("minute")).toBe(14);
|
|
75
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.AM);
|
|
70
76
|
});
|
|
71
77
|
|
|
72
78
|
testSingleCase(chrono, "1hr ago", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
@@ -74,6 +80,7 @@ test("Test - Single Expression", function () {
|
|
|
74
80
|
expect(result.text).toBe("1hr ago");
|
|
75
81
|
expect(result.start.get("hour")).toBe(11);
|
|
76
82
|
expect(result.start.get("minute")).toBe(14);
|
|
83
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.AM);
|
|
77
84
|
});
|
|
78
85
|
|
|
79
86
|
testSingleCase(chrono, " half an hour ago", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
@@ -81,6 +88,7 @@ test("Test - Single Expression", function () {
|
|
|
81
88
|
expect(result.text).toBe("half an hour ago");
|
|
82
89
|
expect(result.start.get("hour")).toBe(11);
|
|
83
90
|
expect(result.start.get("minute")).toBe(44);
|
|
91
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.AM);
|
|
84
92
|
|
|
85
93
|
expect(result.start).toBeDate(new Date(2012, 7, 10, 11, 44));
|
|
86
94
|
});
|
|
@@ -90,6 +98,7 @@ test("Test - Single Expression", function () {
|
|
|
90
98
|
expect(result.text).toBe("12 hours ago");
|
|
91
99
|
expect(result.start.get("hour")).toBe(0);
|
|
92
100
|
expect(result.start.get("minute")).toBe(14);
|
|
101
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.AM);
|
|
93
102
|
|
|
94
103
|
expect(result.start).toBeDate(new Date(2012, 7, 10, 0, 14));
|
|
95
104
|
});
|
|
@@ -100,6 +109,7 @@ test("Test - Single Expression", function () {
|
|
|
100
109
|
expect(result.start.get("hour")).toBe(12);
|
|
101
110
|
expect(result.start.get("minute")).toBe(13);
|
|
102
111
|
expect(result.start.get("second")).toBe(48);
|
|
112
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.PM);
|
|
103
113
|
|
|
104
114
|
expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 13, 48));
|
|
105
115
|
});
|
|
@@ -110,6 +120,7 @@ test("Test - Single Expression", function () {
|
|
|
110
120
|
expect(result.start.get("hour")).toBe(12);
|
|
111
121
|
expect(result.start.get("minute")).toBe(13);
|
|
112
122
|
expect(result.start.get("second")).toBe(57);
|
|
123
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.PM);
|
|
113
124
|
|
|
114
125
|
expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 13, 57));
|
|
115
126
|
});
|
|
@@ -131,6 +142,7 @@ test("Test - Single Expression", function () {
|
|
|
131
142
|
expect(result.text).toBe("half An hour ago");
|
|
132
143
|
expect(result.start.get("hour")).toBe(11);
|
|
133
144
|
expect(result.start.get("minute")).toBe(44);
|
|
145
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.AM);
|
|
134
146
|
|
|
135
147
|
expect(result.start).toBeDate(new Date(2012, 7, 10, 11, 44));
|
|
136
148
|
});
|
|
@@ -152,6 +164,7 @@ test("Test - Single Expression", function () {
|
|
|
152
164
|
expect(result.text).toBe("a min before");
|
|
153
165
|
expect(result.start.get("hour")).toBe(12);
|
|
154
166
|
expect(result.start.get("minute")).toBe(13);
|
|
167
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.PM);
|
|
155
168
|
|
|
156
169
|
expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 13));
|
|
157
170
|
});
|
|
@@ -213,6 +226,7 @@ test("Test - Nested time ago", function () {
|
|
|
213
226
|
expect(result.start.get("day")).toBe(10);
|
|
214
227
|
expect(result.start.get("hour")).toBe(7);
|
|
215
228
|
expect(result.start.get("minute")).toBe(1);
|
|
229
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.AM);
|
|
216
230
|
});
|
|
217
231
|
|
|
218
232
|
testSingleCase(chrono, "1 day 21 hours ago ", new Date(2012, 7, 10, 22, 30), (result) => {
|
|
@@ -220,6 +234,7 @@ test("Test - Nested time ago", function () {
|
|
|
220
234
|
expect(result.start.get("day")).toBe(9);
|
|
221
235
|
expect(result.start.get("hour")).toBe(1);
|
|
222
236
|
expect(result.start.get("minute")).toBe(30);
|
|
237
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.AM);
|
|
223
238
|
});
|
|
224
239
|
|
|
225
240
|
testSingleCase(chrono, "3 min 49 sec ago ", new Date(2012, 7, 10, 22, 30), (result) => {
|
|
@@ -228,6 +243,7 @@ test("Test - Nested time ago", function () {
|
|
|
228
243
|
expect(result.start.get("hour")).toBe(22);
|
|
229
244
|
expect(result.start.get("minute")).toBe(26);
|
|
230
245
|
expect(result.start.get("second")).toBe(11);
|
|
246
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.PM);
|
|
231
247
|
});
|
|
232
248
|
});
|
|
233
249
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as chrono from "../../src/";
|
|
2
2
|
import { testSingleCase } from "../test_util";
|
|
3
|
+
import { Meridiem } from "../../src/";
|
|
3
4
|
|
|
4
5
|
test("Test - Later Expression", function () {
|
|
5
6
|
testSingleCase(chrono, "2 days later", new Date(2012, 7, 10, 12), (result) => {
|
|
@@ -77,6 +78,7 @@ test("Test - From now Expression", () => {
|
|
|
77
78
|
expect(result.text).toBe("15 minute from now");
|
|
78
79
|
expect(result.start.get("hour")).toBe(12);
|
|
79
80
|
expect(result.start.get("minute")).toBe(29);
|
|
81
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.PM);
|
|
80
82
|
|
|
81
83
|
expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 29));
|
|
82
84
|
});
|
|
@@ -86,6 +88,7 @@ test("Test - From now Expression", () => {
|
|
|
86
88
|
expect(result.text).toBe("15 minutes earlier");
|
|
87
89
|
expect(result.start.get("hour")).toBe(11);
|
|
88
90
|
expect(result.start.get("minute")).toBe(59);
|
|
91
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.AM);
|
|
89
92
|
|
|
90
93
|
expect(result.start).toBeDate(new Date(2012, 7, 10, 11, 59));
|
|
91
94
|
});
|
|
@@ -95,6 +98,7 @@ test("Test - From now Expression", () => {
|
|
|
95
98
|
expect(result.text).toBe("15 minute out");
|
|
96
99
|
expect(result.start.get("hour")).toBe(12);
|
|
97
100
|
expect(result.start.get("minute")).toBe(29);
|
|
101
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.PM);
|
|
98
102
|
|
|
99
103
|
expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 29));
|
|
100
104
|
});
|
|
@@ -115,6 +119,7 @@ test("Test - From now Expression", () => {
|
|
|
115
119
|
expect(result.start.get("day")).toBe(11);
|
|
116
120
|
expect(result.start.get("hour")).toBe(0);
|
|
117
121
|
expect(result.start.get("minute")).toBe(14);
|
|
122
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.AM);
|
|
118
123
|
});
|
|
119
124
|
|
|
120
125
|
testSingleCase(chrono, " half an hour from now", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
@@ -122,6 +127,7 @@ test("Test - From now Expression", () => {
|
|
|
122
127
|
expect(result.text).toBe("half an hour from now");
|
|
123
128
|
expect(result.start.get("hour")).toBe(12);
|
|
124
129
|
expect(result.start.get("minute")).toBe(44);
|
|
130
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.PM);
|
|
125
131
|
|
|
126
132
|
expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 44));
|
|
127
133
|
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as chrono from "../../src";
|
|
2
|
+
import { testSingleCase } from "../test_util";
|
|
3
|
+
|
|
4
|
+
test("Test - International compatible", () => {
|
|
5
|
+
testSingleCase(chrono.zh, "1994-11-05T08:15:30-05:30", new Date(2012, 7, 8), (result) => {
|
|
6
|
+
expect(result.start).not.toBeNull();
|
|
7
|
+
expect(result.start.get("year")).toBe(1994);
|
|
8
|
+
expect(result.start.get("month")).toBe(11);
|
|
9
|
+
expect(result.start.get("day")).toBe(5);
|
|
10
|
+
expect(result.start.get("hour")).toBe(8);
|
|
11
|
+
expect(result.start.get("minute")).toBe(15);
|
|
12
|
+
expect(result.start.get("second")).toBe(30);
|
|
13
|
+
expect(result.start.get("timezoneOffset")).toBe(-330);
|
|
14
|
+
expect(result.text).toBe("1994-11-05T08:15:30-05:30");
|
|
15
|
+
|
|
16
|
+
expect(result.start).toBeDate(new Date(784043130000));
|
|
17
|
+
});
|
|
18
|
+
});
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import * as chrono from "../../src";
|
|
2
|
+
import { testSingleCase } from "../test_util";
|
|
3
|
+
|
|
4
|
+
test("Test - Single Expression", function () {
|
|
5
|
+
testSingleCase(chrono.zh.hant, "雞而家全部都係雞", new Date(2012, 7, 10, 8, 9, 10, 11), (result) => {
|
|
6
|
+
expect(result.index).toBe(1);
|
|
7
|
+
expect(result.text).toBe("而家");
|
|
8
|
+
|
|
9
|
+
expect(result.start).not.toBeNull();
|
|
10
|
+
expect(result.start.get("year")).toBe(2012);
|
|
11
|
+
expect(result.start.get("month")).toBe(8);
|
|
12
|
+
expect(result.start.get("day")).toBe(10);
|
|
13
|
+
expect(result.start.get("hour")).toBe(8);
|
|
14
|
+
expect(result.start.get("minute")).toBe(9);
|
|
15
|
+
expect(result.start.get("second")).toBe(10);
|
|
16
|
+
expect(result.start.get("millisecond")).toBe(11);
|
|
17
|
+
|
|
18
|
+
const resultDate = result.start.date();
|
|
19
|
+
const expectDate = new Date(2012, 7, 10, 8, 9, 10, 11);
|
|
20
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
testSingleCase(chrono.zh.hant, "雞今日全部都係雞", new Date(2012, 7, 10, 12), (result) => {
|
|
24
|
+
expect(result.index).toBe(1);
|
|
25
|
+
expect(result.text).toBe("今日");
|
|
26
|
+
|
|
27
|
+
expect(result.start).not.toBeNull();
|
|
28
|
+
expect(result.start.get("year")).toBe(2012);
|
|
29
|
+
expect(result.start.get("month")).toBe(8);
|
|
30
|
+
expect(result.start.get("day")).toBe(10);
|
|
31
|
+
|
|
32
|
+
const resultDate = result.start.date();
|
|
33
|
+
const expectDate = new Date(2012, 7, 10, 12);
|
|
34
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
testSingleCase(chrono.zh.hant, "雞聽日全部都係雞", new Date(2012, 7, 10, 12), (result) => {
|
|
38
|
+
expect(result.index).toBe(1);
|
|
39
|
+
expect(result.text).toBe("聽日");
|
|
40
|
+
|
|
41
|
+
expect(result.start).not.toBeNull();
|
|
42
|
+
expect(result.start.get("year")).toBe(2012);
|
|
43
|
+
expect(result.start.get("month")).toBe(8);
|
|
44
|
+
expect(result.start.get("day")).toBe(11);
|
|
45
|
+
|
|
46
|
+
const resultDate = result.start.date();
|
|
47
|
+
const expectDate = new Date(2012, 7, 11, 12);
|
|
48
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
testSingleCase(chrono.zh.hant, "雞明天全部都係雞", new Date(2012, 7, 10, 1), (result) => {
|
|
52
|
+
// Say.."Tomorrow" in the late night (1 AM)
|
|
53
|
+
const resultDate = result.start.date();
|
|
54
|
+
const expectDate = new Date(2012, 7, 10, 12);
|
|
55
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
testSingleCase(chrono.zh.hant, "雞後天凌晨全部都係雞", new Date(2012, 7, 10, 0, 0), (result) => {
|
|
59
|
+
const resultDate = result.start.date();
|
|
60
|
+
const expectDate = new Date(2012, 7, 12, 0, 0);
|
|
61
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
testSingleCase(chrono.zh.hant, "雞大前天凌晨全部都係雞", new Date(2012, 7, 10, 0, 0), (result) => {
|
|
65
|
+
const resultDate = result.start.date();
|
|
66
|
+
const expectDate = new Date(2012, 7, 7, 0, 0);
|
|
67
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
testSingleCase(chrono.zh.hant, "雞琴日全部都係雞", new Date(2012, 7, 10, 12), (result) => {
|
|
71
|
+
expect(result.index).toBe(1);
|
|
72
|
+
expect(result.text).toBe("琴日");
|
|
73
|
+
|
|
74
|
+
expect(result.start).not.toBeNull();
|
|
75
|
+
expect(result.start.get("year")).toBe(2012);
|
|
76
|
+
expect(result.start.get("month")).toBe(8);
|
|
77
|
+
expect(result.start.get("day")).toBe(9);
|
|
78
|
+
|
|
79
|
+
const resultDate = result.start.date();
|
|
80
|
+
const expectDate = new Date(2012, 7, 9, 12);
|
|
81
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
testSingleCase(chrono.zh.hant, "雞昨天晚上全部都係雞", new Date(2012, 7, 10, 12), (result) => {
|
|
85
|
+
expect(result.index).toBe(1);
|
|
86
|
+
expect(result.text).toBe("昨天晚上");
|
|
87
|
+
|
|
88
|
+
expect(result.start).not.toBeNull();
|
|
89
|
+
expect(result.start.get("year")).toBe(2012);
|
|
90
|
+
expect(result.start.get("month")).toBe(8);
|
|
91
|
+
expect(result.start.get("day")).toBe(9);
|
|
92
|
+
expect(result.start.get("hour")).toBe(22);
|
|
93
|
+
|
|
94
|
+
const resultDate = result.start.date();
|
|
95
|
+
const expectDate = new Date(2012, 7, 9, 22);
|
|
96
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
testSingleCase(chrono.zh.hant, "雞今日朝早全部都係雞", new Date(2012, 7, 10, 12), (result) => {
|
|
100
|
+
expect(result.index).toBe(1);
|
|
101
|
+
expect(result.text).toBe("今日朝早");
|
|
102
|
+
|
|
103
|
+
expect(result.start).not.toBeNull();
|
|
104
|
+
expect(result.start.get("year")).toBe(2012);
|
|
105
|
+
expect(result.start.get("month")).toBe(8);
|
|
106
|
+
expect(result.start.get("day")).toBe(10);
|
|
107
|
+
expect(result.start.get("hour")).toBe(6);
|
|
108
|
+
|
|
109
|
+
const resultDate = result.start.date();
|
|
110
|
+
const expectDate = new Date(2012, 7, 10, 6);
|
|
111
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
testSingleCase(chrono.zh.hant, "雞晏晝全部都係雞", new Date(2012, 7, 10, 12), (result) => {
|
|
115
|
+
expect(result.index).toBe(1);
|
|
116
|
+
expect(result.text).toBe("晏晝");
|
|
117
|
+
|
|
118
|
+
expect(result.start).not.toBeNull();
|
|
119
|
+
expect(result.start.get("year")).toBe(2012);
|
|
120
|
+
expect(result.start.get("month")).toBe(8);
|
|
121
|
+
expect(result.start.get("day")).toBe(10);
|
|
122
|
+
expect(result.start.get("hour")).toBe(15);
|
|
123
|
+
|
|
124
|
+
const resultDate = result.start.date();
|
|
125
|
+
const expectDate = new Date(2012, 7, 10, 15);
|
|
126
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
testSingleCase(chrono.zh.hant, "雞今晚全部都係雞", new Date(2012, 7, 10, 12), (result) => {
|
|
130
|
+
expect(result.index).toBe(1);
|
|
131
|
+
expect(result.text).toBe("今晚");
|
|
132
|
+
|
|
133
|
+
expect(result.start).not.toBeNull();
|
|
134
|
+
expect(result.start.get("year")).toBe(2012);
|
|
135
|
+
expect(result.start.get("month")).toBe(8);
|
|
136
|
+
expect(result.start.get("day")).toBe(10);
|
|
137
|
+
expect(result.start.get("hour")).toBe(22);
|
|
138
|
+
|
|
139
|
+
const resultDate = result.start.date();
|
|
140
|
+
const expectDate = new Date(2012, 7, 10, 22);
|
|
141
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
test("Test - Combined Expression", function () {
|
|
146
|
+
testSingleCase(chrono.zh.hant, "雞今日晏晝5點全部都係雞", new Date(2012, 7, 10, 12), (result) => {
|
|
147
|
+
expect(result.index).toBe(1);
|
|
148
|
+
expect(result.text).toBe("今日晏晝5點");
|
|
149
|
+
|
|
150
|
+
expect(result.start).not.toBeNull();
|
|
151
|
+
expect(result.start.get("year")).toBe(2012);
|
|
152
|
+
expect(result.start.get("month")).toBe(8);
|
|
153
|
+
expect(result.start.get("day")).toBe(10);
|
|
154
|
+
expect(result.start.get("hour")).toBe(17);
|
|
155
|
+
|
|
156
|
+
const resultDate = result.start.date();
|
|
157
|
+
const expectDate = new Date(2012, 7, 10, 17);
|
|
158
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
test("Test - Casual date range", function () {
|
|
163
|
+
testSingleCase(chrono.zh.hant, "雞今日 - 下禮拜五全部都係雞", new Date(2012, 7, 4, 12), (result) => {
|
|
164
|
+
expect(result.index).toBe(1);
|
|
165
|
+
expect(result.text).toBe("今日 - 下禮拜五");
|
|
166
|
+
|
|
167
|
+
expect(result.start).not.toBeNull();
|
|
168
|
+
expect(result.start.get("year")).toBe(2012);
|
|
169
|
+
expect(result.start.get("month")).toBe(8);
|
|
170
|
+
expect(result.start.get("day")).toBe(4);
|
|
171
|
+
expect(result.start.get("hour")).toBe(12);
|
|
172
|
+
|
|
173
|
+
const resultStartDate = result.start.date();
|
|
174
|
+
const expectStartDate = new Date(2012, 7, 4, 12);
|
|
175
|
+
expect(resultStartDate.getTime()).toBeCloseTo(expectStartDate.getTime());
|
|
176
|
+
|
|
177
|
+
expect(result.end).not.toBeNull();
|
|
178
|
+
expect(result.end.get("year")).toBe(2012);
|
|
179
|
+
expect(result.end.get("month")).toBe(8);
|
|
180
|
+
expect(result.end.get("day")).toBe(10);
|
|
181
|
+
expect(result.end.get("hour")).toBe(12);
|
|
182
|
+
|
|
183
|
+
const resultEndDate = result.end.date();
|
|
184
|
+
const expectEndDate = new Date(2012, 7, 10, 12);
|
|
185
|
+
expect(expectEndDate.getTime()).toBeCloseTo(resultEndDate.getTime());
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
testSingleCase(chrono.zh.hant, "雞今日 - 下禮拜五全部都係雞", new Date(2012, 7, 10, 12), (result) => {
|
|
189
|
+
expect(result.index).toBe(1);
|
|
190
|
+
expect(result.text).toBe("今日 - 下禮拜五");
|
|
191
|
+
|
|
192
|
+
expect(result.start).not.toBeNull();
|
|
193
|
+
expect(result.start.get("year")).toBe(2012);
|
|
194
|
+
expect(result.start.get("month")).toBe(8);
|
|
195
|
+
expect(result.start.get("day")).toBe(10);
|
|
196
|
+
expect(result.start.get("hour")).toBe(12);
|
|
197
|
+
|
|
198
|
+
const resultStartDate = result.start.date();
|
|
199
|
+
const expectStartDate = new Date(2012, 7, 10, 12);
|
|
200
|
+
expect(expectStartDate.getTime()).toBeCloseTo(resultStartDate.getTime());
|
|
201
|
+
|
|
202
|
+
expect(result.end).not.toBeNull();
|
|
203
|
+
expect(result.end.get("year")).toBe(2012);
|
|
204
|
+
expect(result.end.get("month")).toBe(8);
|
|
205
|
+
expect(result.end.get("day")).toBe(17);
|
|
206
|
+
expect(result.end.get("hour")).toBe(12);
|
|
207
|
+
|
|
208
|
+
const resultEndDate = result.end.date();
|
|
209
|
+
const expectEndDate = new Date(2012, 7, 17, 12);
|
|
210
|
+
expect(expectEndDate.getTime()).toBeCloseTo(resultEndDate.getTime());
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
test("Test - Random text", function () {
|
|
215
|
+
testSingleCase(chrono.zh.hant, "今日夜晚", new Date(2012, 1 - 1, 1, 12), (result) => {
|
|
216
|
+
expect(result.text).toBe("今日夜晚");
|
|
217
|
+
expect(result.start.get("year")).toBe(2012);
|
|
218
|
+
expect(result.start.get("month")).toBe(1);
|
|
219
|
+
expect(result.start.get("day")).toBe(1);
|
|
220
|
+
expect(result.start.get("hour")).toBe(22);
|
|
221
|
+
expect(result.start.get("meridiem")).toBe(1);
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
testSingleCase(chrono.zh.hant, "今晚8點正", new Date(2012, 1 - 1, 1, 12), (result) => {
|
|
225
|
+
expect(result.text).toBe("今晚8點正");
|
|
226
|
+
expect(result.start.get("hour")).toBe(20);
|
|
227
|
+
expect(result.start.get("year")).toBe(2012);
|
|
228
|
+
expect(result.start.get("month")).toBe(1);
|
|
229
|
+
expect(result.start.get("day")).toBe(1);
|
|
230
|
+
expect(result.start.get("meridiem")).toBe(1);
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
testSingleCase(chrono.zh.hant, "晚上8點", new Date(2012, 1 - 1, 1, 12), (result) => {
|
|
234
|
+
expect(result.text).toBe("晚上8點");
|
|
235
|
+
expect(result.start.get("hour")).toBe(20);
|
|
236
|
+
expect(result.start.get("year")).toBe(2012);
|
|
237
|
+
expect(result.start.get("month")).toBe(1);
|
|
238
|
+
expect(result.start.get("day")).toBe(1);
|
|
239
|
+
expect(result.start.get("meridiem")).toBe(1);
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
testSingleCase(chrono.zh.hant, "星期四", new Date(), (result) => {
|
|
243
|
+
expect(result.text).toBe("星期四");
|
|
244
|
+
expect(result.start.get("weekday")).toBe(4);
|
|
245
|
+
});
|
|
246
|
+
});
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import * as chrono from "../../src";
|
|
2
|
+
import { testSingleCase } from "../test_util";
|
|
3
|
+
|
|
4
|
+
test("Test - Single Expression", function () {
|
|
5
|
+
testSingleCase(chrono.zh.hant, "雞2016年9月3號全部都係雞", new Date(2012, 8 - 1, 10), (result) => {
|
|
6
|
+
expect(result.index).toBe(1);
|
|
7
|
+
expect(result.text).toBe("2016年9月3號");
|
|
8
|
+
|
|
9
|
+
expect(result.start).not.toBeNull();
|
|
10
|
+
expect(result.start.get("year")).toBe(2016);
|
|
11
|
+
expect(result.start.get("month")).toBe(9);
|
|
12
|
+
expect(result.start.get("day")).toBe(3);
|
|
13
|
+
|
|
14
|
+
const resultDate = result.start.date();
|
|
15
|
+
const expectDate = new Date(2016, 9 - 1, 3, 12);
|
|
16
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
testSingleCase(chrono.zh.hant, "雞二零一六年,九月三號全部都係雞", new Date(2012, 8 - 1, 10), (result) => {
|
|
20
|
+
expect(result.index).toBe(1);
|
|
21
|
+
expect(result.text).toBe("二零一六年,九月三號");
|
|
22
|
+
|
|
23
|
+
expect(result.start).not.toBeNull();
|
|
24
|
+
expect(result.start.get("year")).toBe(2016);
|
|
25
|
+
expect(result.start.get("month")).toBe(9);
|
|
26
|
+
expect(result.start.get("day")).toBe(3);
|
|
27
|
+
|
|
28
|
+
const resultDate = result.start.date();
|
|
29
|
+
const expectDate = new Date(2016, 9 - 1, 3, 12);
|
|
30
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
testSingleCase(chrono.zh.hant, "雞九月三號全部都係雞", new Date(2014, 8 - 1, 10), (result) => {
|
|
34
|
+
expect(result.index).toBe(1);
|
|
35
|
+
expect(result.text).toBe("九月三號");
|
|
36
|
+
|
|
37
|
+
expect(result.start).not.toBeNull();
|
|
38
|
+
expect(result.start.get("year")).toBe(2014);
|
|
39
|
+
expect(result.start.get("month")).toBe(9);
|
|
40
|
+
expect(result.start.get("day")).toBe(3);
|
|
41
|
+
|
|
42
|
+
const resultDate = result.start.date();
|
|
43
|
+
const expectDate = new Date(2014, 9 - 1, 3, 12);
|
|
44
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
test("Test - Range Expression", function () {
|
|
49
|
+
testSingleCase(chrono.zh.hant, "2016年9月3號-2017年10月24號", new Date(2012, 8 - 1, 10), (result) => {
|
|
50
|
+
expect(result.index).toBe(0);
|
|
51
|
+
console.log(result);
|
|
52
|
+
expect(result.text).toBe("2016年9月3號-2017年10月24號");
|
|
53
|
+
|
|
54
|
+
expect(result.start).not.toBeNull();
|
|
55
|
+
expect(result.start.get("year")).toBe(2016);
|
|
56
|
+
expect(result.start.get("month")).toBe(9);
|
|
57
|
+
expect(result.start.get("day")).toBe(3);
|
|
58
|
+
|
|
59
|
+
{
|
|
60
|
+
const resultDate = result.start.date();
|
|
61
|
+
const expectDate = new Date(2016, 9 - 1, 3, 12);
|
|
62
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
expect(result.end).not.toBeNull();
|
|
66
|
+
expect(result.end.get("year")).toBe(2017);
|
|
67
|
+
expect(result.end.get("month")).toBe(10);
|
|
68
|
+
expect(result.end.get("day")).toBe(24);
|
|
69
|
+
|
|
70
|
+
{
|
|
71
|
+
const resultDate = result.end.date();
|
|
72
|
+
const expectDate = new Date(2017, 10 - 1, 24, 12);
|
|
73
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
testSingleCase(chrono.zh.hant, "二零一六年九月三號ー2017年10月24號", new Date(2012, 8 - 1, 10), (result) => {
|
|
78
|
+
expect(result.index).toBe(0);
|
|
79
|
+
expect(result.text).toBe("二零一六年九月三號ー2017年10月24號");
|
|
80
|
+
|
|
81
|
+
expect(result.start).not.toBeNull();
|
|
82
|
+
expect(result.start.get("year")).toBe(2016);
|
|
83
|
+
expect(result.start.get("month")).toBe(9);
|
|
84
|
+
expect(result.start.get("day")).toBe(3);
|
|
85
|
+
|
|
86
|
+
{
|
|
87
|
+
const resultDate = result.start.date();
|
|
88
|
+
const expectDate = new Date(2016, 9 - 1, 3, 12);
|
|
89
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
expect(result.end).not.toBeNull();
|
|
93
|
+
expect(result.end.get("year")).toBe(2017);
|
|
94
|
+
expect(result.end.get("month")).toBe(10);
|
|
95
|
+
expect(result.end.get("day")).toBe(24);
|
|
96
|
+
|
|
97
|
+
{
|
|
98
|
+
const resultDate = result.end.date();
|
|
99
|
+
const expectDate = new Date(2017, 10 - 1, 24, 12);
|
|
100
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
});
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import * as chrono from "../../src";
|
|
2
|
+
import { testSingleCase } from "../test_util";
|
|
3
|
+
|
|
4
|
+
test("Test - Single Expression", function () {
|
|
5
|
+
testSingleCase(chrono.zh.hant, "五日內我地有d野做", new Date(2012, 7, 10), (result) => {
|
|
6
|
+
expect(result.index).toBe(0);
|
|
7
|
+
expect(result.text).toBe("五日內");
|
|
8
|
+
|
|
9
|
+
expect(result.start).not.toBeNull();
|
|
10
|
+
expect(result.start.get("year")).toBe(2012);
|
|
11
|
+
expect(result.start.get("month")).toBe(8);
|
|
12
|
+
expect(result.start.get("day")).toBe(15);
|
|
13
|
+
|
|
14
|
+
const resultDate = result.start.date();
|
|
15
|
+
const expectDate = new Date(2012, 8 - 1, 15, 12);
|
|
16
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
testSingleCase(chrono.zh.hant, "5日之內我地有d野做", new Date(2012, 7, 10), (result) => {
|
|
20
|
+
expect(result.index).toBe(0);
|
|
21
|
+
expect(result.text).toBe("5日之內");
|
|
22
|
+
|
|
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(15);
|
|
27
|
+
|
|
28
|
+
const resultDate = result.start.date();
|
|
29
|
+
const expectDate = new Date(2012, 8 - 1, 15, 12);
|
|
30
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
testSingleCase(chrono.zh.hant, "十日內我地有d野做", new Date(2012, 7, 10), (result) => {
|
|
34
|
+
expect(result.index).toBe(0);
|
|
35
|
+
expect(result.text).toBe("十日內");
|
|
36
|
+
|
|
37
|
+
expect(result.start).not.toBeNull();
|
|
38
|
+
expect(result.start.get("year")).toBe(2012);
|
|
39
|
+
expect(result.start.get("month")).toBe(8);
|
|
40
|
+
expect(result.start.get("day")).toBe(20);
|
|
41
|
+
|
|
42
|
+
const resultDate = result.start.date();
|
|
43
|
+
const expectDate = new Date(2012, 8 - 1, 20, 12);
|
|
44
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
testSingleCase(chrono.zh.hant, "五分鐘後", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
48
|
+
expect(result.index).toBe(0);
|
|
49
|
+
expect(result.text).toBe("五分鐘後");
|
|
50
|
+
|
|
51
|
+
const resultDate = result.start.date();
|
|
52
|
+
const expectDate = new Date(2012, 7, 10, 12, 19);
|
|
53
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
testSingleCase(chrono.zh.hant, "一個鐘之內", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
57
|
+
expect(result.index).toBe(0);
|
|
58
|
+
expect(result.text).toBe("一個鐘之內");
|
|
59
|
+
|
|
60
|
+
const resultDate = result.start.date();
|
|
61
|
+
const expectDate = new Date(2012, 7, 10, 13, 14);
|
|
62
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
testSingleCase(chrono.zh.hant, "5分鐘之後我就收皮", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
66
|
+
expect(result.index).toBe(0);
|
|
67
|
+
expect(result.text).toBe("5分鐘之後");
|
|
68
|
+
|
|
69
|
+
const resultDate = result.start.date();
|
|
70
|
+
const expectDate = new Date(2012, 7, 10, 12, 19);
|
|
71
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
testSingleCase(chrono.zh.hant, "係5秒之後你就會收皮", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
75
|
+
expect(result.index).toBe(1);
|
|
76
|
+
expect(result.text).toBe("5秒之後");
|
|
77
|
+
|
|
78
|
+
const resultDate = result.start.date();
|
|
79
|
+
const expectDate = new Date(2012, 7, 10, 12, 14, 5);
|
|
80
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
testSingleCase(chrono.zh.hant, "半小時之內", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
84
|
+
expect(result.index).toBe(0);
|
|
85
|
+
expect(result.text).toBe("半小時之內");
|
|
86
|
+
|
|
87
|
+
const resultDate = result.start.date();
|
|
88
|
+
const expectDate = new Date(2012, 7, 10, 12, 44);
|
|
89
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
testSingleCase(chrono.zh.hant, "兩個禮拜內答覆我", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
93
|
+
expect(result.index).toBe(0);
|
|
94
|
+
expect(result.text).toBe("兩個禮拜內");
|
|
95
|
+
|
|
96
|
+
const resultDate = result.start.date();
|
|
97
|
+
const expectDate = new Date(2012, 7, 24, 12);
|
|
98
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
testSingleCase(chrono.zh.hant, "1個月之內答覆我", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
102
|
+
expect(result.index).toBe(0);
|
|
103
|
+
expect(result.text).toBe("1個月之內");
|
|
104
|
+
|
|
105
|
+
const resultDate = result.start.date();
|
|
106
|
+
const expectDate = new Date(2012, 8, 10, 12);
|
|
107
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
testSingleCase(chrono.zh.hant, "幾個月之內答覆我", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
111
|
+
expect(result.index).toBe(0);
|
|
112
|
+
expect(result.text).toBe("幾個月之內");
|
|
113
|
+
|
|
114
|
+
const resultDate = result.start.date();
|
|
115
|
+
const expectDate = new Date(2012, 10, 10, 12);
|
|
116
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
testSingleCase(chrono.zh.hant, "一年內答覆我", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
120
|
+
expect(result.index).toBe(0);
|
|
121
|
+
expect(result.text).toBe("一年內");
|
|
122
|
+
|
|
123
|
+
const resultDate = result.start.date();
|
|
124
|
+
const expectDate = new Date(2013, 7, 10, 12);
|
|
125
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
testSingleCase(chrono.zh.hant, "1年之內答覆我", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
129
|
+
expect(result.index).toBe(0);
|
|
130
|
+
expect(result.text).toBe("1年之內");
|
|
131
|
+
|
|
132
|
+
const resultDate = result.start.date();
|
|
133
|
+
const expectDate = new Date(2013, 7, 10, 12);
|
|
134
|
+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
|
|
135
|
+
});
|
|
136
|
+
});
|