chrono-node 2.3.5 → 2.3.8

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.
Files changed (95) hide show
  1. package/README.md +1 -1
  2. package/dist/common/refiners/ExtractTimezoneAbbrRefiner.js +6 -1
  3. package/dist/locales/de/constants.d.ts +3 -3
  4. package/dist/locales/de/constants.js +38 -20
  5. package/dist/locales/de/index.js +4 -0
  6. package/dist/locales/de/parsers/DESpecificTimeExpressionParser.d.ts +7 -0
  7. package/dist/locales/de/parsers/DESpecificTimeExpressionParser.js +114 -0
  8. package/dist/locales/de/parsers/DETimeExpressionParser.d.ts +0 -1
  9. package/dist/locales/de/parsers/DETimeExpressionParser.js +3 -21
  10. package/dist/locales/de/parsers/DETimeUnitRelativeFormatParser.d.ts +8 -0
  11. package/dist/locales/de/parsers/DETimeUnitRelativeFormatParser.js +34 -0
  12. package/dist/locales/en/constants.d.ts +2 -2
  13. package/dist/locales/en/constants.js +3 -0
  14. package/dist/locales/en/index.js +2 -1
  15. package/dist/locales/en/parsers/ENRelativeDateFormatParser.js +2 -2
  16. package/dist/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js +1 -1
  17. package/dist/locales/en/refiners/ENMergeRelativeDateRefiner.d.ts +7 -0
  18. package/dist/locales/en/refiners/ENMergeRelativeDateRefiner.js +35 -0
  19. package/dist/locales/zh/hans/constants.d.ts +27 -0
  20. package/dist/locales/zh/hans/constants.js +51 -0
  21. package/dist/locales/zh/hans/index.d.ts +9 -0
  22. package/dist/locales/zh/hans/index.js +49 -0
  23. package/dist/locales/zh/hans/parsers/ZHHansCasualDateParser.d.ts +7 -0
  24. package/dist/locales/zh/hans/parsers/ZHHansCasualDateParser.js +138 -0
  25. package/dist/locales/zh/hans/parsers/ZHHansDateParser.d.ts +6 -0
  26. package/dist/locales/zh/hans/parsers/ZHHansDateParser.js +72 -0
  27. package/dist/locales/zh/hans/parsers/ZHHansDeadlineFormatParser.d.ts +6 -0
  28. package/dist/locales/zh/hans/parsers/ZHHansDeadlineFormatParser.js +78 -0
  29. package/dist/locales/zh/hans/parsers/ZHHansRelationWeekdayParser.d.ts +7 -0
  30. package/dist/locales/zh/hans/parsers/ZHHansRelationWeekdayParser.js +70 -0
  31. package/dist/locales/zh/hans/parsers/ZHHansTimeExpressionParser.d.ts +6 -0
  32. package/dist/locales/zh/hans/parsers/ZHHansTimeExpressionParser.js +438 -0
  33. package/dist/locales/zh/hans/parsers/ZHHansWeekdayParser.d.ts +7 -0
  34. package/dist/locales/zh/hans/parsers/ZHHansWeekdayParser.js +46 -0
  35. package/dist/locales/zh/hans/refiners/ZHHansMergeDateRangeRefiner.d.ts +4 -0
  36. package/dist/locales/zh/hans/refiners/ZHHansMergeDateRangeRefiner.js +12 -0
  37. package/dist/locales/zh/hans/refiners/ZHHansMergeDateTimeRefiner.d.ts +4 -0
  38. package/dist/locales/zh/hans/refiners/ZHHansMergeDateTimeRefiner.js +12 -0
  39. package/dist/locales/zh/hant/index.d.ts +9 -0
  40. package/dist/locales/zh/hant/index.js +49 -0
  41. package/dist/locales/zh/index.d.ts +2 -9
  42. package/dist/locales/zh/index.js +13 -46
  43. package/dist/results.d.ts +1 -1
  44. package/dist/results.js +1 -2
  45. package/dist/timezone.d.ts +1 -1
  46. package/dist/timezone.js +3 -3
  47. package/package.json +1 -1
  48. package/src/common/refiners/ExtractTimezoneAbbrRefiner.ts +11 -1
  49. package/src/locales/de/constants.ts +42 -22
  50. package/src/locales/de/index.ts +4 -0
  51. package/src/locales/de/parsers/DESpecificTimeExpressionParser.ts +150 -0
  52. package/src/locales/de/parsers/DETimeExpressionParser.ts +4 -23
  53. package/src/locales/de/parsers/DETimeUnitRelativeFormatParser.ts +42 -0
  54. package/src/locales/en/constants.ts +5 -2
  55. package/src/locales/en/index.ts +2 -1
  56. package/src/locales/en/parsers/ENMonthNameLittleEndianParser.ts +0 -2
  57. package/src/locales/en/parsers/ENRelativeDateFormatParser.ts +2 -2
  58. package/src/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.ts +1 -1
  59. package/src/locales/en/refiners/ENMergeRelativeDateRefiner.ts +58 -0
  60. package/src/locales/zh/hans/constants.ts +52 -0
  61. package/src/locales/zh/hans/index.ts +62 -0
  62. package/src/locales/zh/hans/parsers/ZHHansCasualDateParser.ts +128 -0
  63. package/src/locales/zh/hans/parsers/ZHHansDateParser.ts +75 -0
  64. package/src/locales/zh/hans/parsers/ZHHansDeadlineFormatParser.ts +81 -0
  65. package/src/locales/zh/hans/parsers/ZHHansRelationWeekdayParser.ts +69 -0
  66. package/src/locales/zh/hans/parsers/ZHHansTimeExpressionParser.ts +424 -0
  67. package/src/locales/zh/hans/parsers/ZHHansWeekdayParser.ts +46 -0
  68. package/src/locales/zh/hans/refiners/ZHHansMergeDateRangeRefiner.ts +7 -0
  69. package/src/locales/zh/hans/refiners/ZHHansMergeDateTimeRefiner.ts +7 -0
  70. package/src/locales/zh/hant/index.ts +63 -0
  71. package/src/locales/zh/index.ts +2 -63
  72. package/src/results.ts +2 -3
  73. package/src/timezone.ts +4 -4
  74. package/test/de/de_month_name_little_endian.test.ts +12 -0
  75. package/test/de/de_time_exp.test.ts +59 -0
  76. package/test/de/de_time_units_casual_relative.test.ts +108 -0
  77. package/test/de/de_year.test.ts +147 -0
  78. package/test/en/en_merging_relative_dates.test.ts +51 -0
  79. package/test/en/en_month.test.ts +13 -0
  80. package/test/en/en_relative.test.ts +61 -2
  81. package/test/en/en_time_units_ago.test.ts +3 -3
  82. package/test/en/en_time_units_casual_relative.test.ts +16 -0
  83. package/test/en/en_time_units_within.test.ts +2 -2
  84. package/test/en/en_timezone_exp.test.ts +3 -3
  85. package/test/fr/fr_time_units_ago.test.ts +3 -3
  86. package/test/fr/fr_time_units_within.test.ts +2 -2
  87. package/test/nl/nl_relative.test.ts +2 -2
  88. package/test/nl/nl_time_units_ago.test.ts +3 -3
  89. package/test/system_timezone.test.ts +22 -0
  90. package/test/zh/zh_hans_casual.test.ts +228 -0
  91. package/test/zh/zh_hans_date.test.ts +102 -0
  92. package/test/zh/zh_hans_deadline.test.ts +136 -0
  93. package/test/zh/zh_hans_time_exp.test.ts +182 -0
  94. package/test/zh/zh_hans_weekday.test.ts +132 -0
  95. package/test/zh/zh_hant_date.test.ts +0 -1
@@ -16,6 +16,28 @@ test("Test - Timezone difference on reference example", function () {
16
16
  );
17
17
  });
18
18
 
19
+ test("Test - Timezone difference on default timezone", function () {
20
+ const INPUT = "Friday at 4pm";
21
+ const REF_INSTANT = new Date(2021, 6 - 1, 9, 7, 0, 0);
22
+ const EXPECTED_INSTANT = new Date(2021, 6 - 1, 11, 16, 0, 0);
23
+
24
+ testSingleCase(chrono, INPUT, REF_INSTANT, (result) => {
25
+ expect(result).toBeDate(EXPECTED_INSTANT);
26
+ });
27
+
28
+ testSingleCase(chrono, INPUT, { instant: REF_INSTANT }, (result) => {
29
+ expect(result).toBeDate(EXPECTED_INSTANT);
30
+ });
31
+
32
+ testSingleCase(chrono, INPUT, { instant: REF_INSTANT, timezone: null }, (result) => {
33
+ expect(result).toBeDate(EXPECTED_INSTANT);
34
+ });
35
+
36
+ testSingleCase(chrono, INPUT, { instant: REF_INSTANT, timezone: "" }, (result) => {
37
+ expect(result).toBeDate(EXPECTED_INSTANT);
38
+ });
39
+ });
40
+
19
41
  test("Test - Timezone difference on reference date", function () {
20
42
  // Sun Jun 06 2021 19:00:00 GMT+0900 (JST)
21
43
  // Sun Jun 06 2021 11:00:00 GMT+0100 (BST)
@@ -0,0 +1,228 @@
1
+ import * as chrono from "../../src";
2
+ import { testSingleCase } from "../test_util";
3
+
4
+ test("Test - Single Expression", function () {
5
+ testSingleCase(chrono.zh.hans, "我今天要打游戏", new Date(2012, 7, 10, 12), (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
+
14
+ const resultDate = result.start.date();
15
+ const expectDate = new Date(2012, 7, 10, 12);
16
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
17
+ });
18
+
19
+ testSingleCase(chrono.zh.hans, "我明日要打游戏", new Date(2012, 7, 10, 12), (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(2012);
25
+ expect(result.start.get("month")).toBe(8);
26
+ expect(result.start.get("day")).toBe(11);
27
+
28
+ const resultDate = result.start.date();
29
+ const expectDate = new Date(2012, 7, 11, 12);
30
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
31
+ });
32
+
33
+ testSingleCase(chrono.zh.hans, "我明天要打游戏", new Date(2012, 7, 10, 1), (result) => {
34
+ // Say.."Tomorrow" in the late night (1 AM)
35
+ const resultDate = result.start.date();
36
+ const expectDate = new Date(2012, 7, 10, 12);
37
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
38
+ });
39
+
40
+ testSingleCase(chrono.zh.hans, "我后天凌晨要打游戏", new Date(2012, 7, 10, 0, 0), (result) => {
41
+ const resultDate = result.start.date();
42
+ const expectDate = new Date(2012, 7, 12, 0, 0);
43
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
44
+ });
45
+
46
+ testSingleCase(chrono.zh.hans, "我大前天凌晨要打游戏", new Date(2012, 7, 10, 0, 0), (result) => {
47
+ const resultDate = result.start.date();
48
+ const expectDate = new Date(2012, 7, 7, 0, 0);
49
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
50
+ });
51
+
52
+ testSingleCase(chrono.zh.hans, "我昨日要打游戏", new Date(2012, 7, 10, 12), (result) => {
53
+ expect(result.index).toBe(1);
54
+ expect(result.text).toBe("昨日");
55
+
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(9);
60
+
61
+ const resultDate = result.start.date();
62
+ const expectDate = new Date(2012, 7, 9, 12);
63
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
64
+ });
65
+
66
+ testSingleCase(chrono.zh.hans, "我昨天晚上要打游戏", new Date(2012, 7, 10, 12), (result) => {
67
+ expect(result.index).toBe(1);
68
+ expect(result.text).toBe("昨天晚上");
69
+
70
+ expect(result.start).not.toBeNull();
71
+ expect(result.start.get("year")).toBe(2012);
72
+ expect(result.start.get("month")).toBe(8);
73
+ expect(result.start.get("day")).toBe(9);
74
+ expect(result.start.get("hour")).toBe(22);
75
+
76
+ const resultDate = result.start.date();
77
+ const expectDate = new Date(2012, 7, 9, 22);
78
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
79
+ });
80
+
81
+ testSingleCase(chrono.zh.hans, "我今天早上要打游戏", new Date(2012, 7, 10, 12), (result) => {
82
+ expect(result.index).toBe(1);
83
+ expect(result.text).toBe("今天早上");
84
+
85
+ expect(result.start).not.toBeNull();
86
+ expect(result.start.get("year")).toBe(2012);
87
+ expect(result.start.get("month")).toBe(8);
88
+ expect(result.start.get("day")).toBe(10);
89
+ expect(result.start.get("hour")).toBe(6);
90
+
91
+ const resultDate = result.start.date();
92
+ const expectDate = new Date(2012, 7, 10, 6);
93
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
94
+ });
95
+
96
+ testSingleCase(chrono.zh.hans, "我下午要打游戏", new Date(2012, 7, 10, 12), (result) => {
97
+ expect(result.index).toBe(1);
98
+ expect(result.text).toBe("下午");
99
+
100
+ expect(result.start).not.toBeNull();
101
+ expect(result.start.get("year")).toBe(2012);
102
+ expect(result.start.get("month")).toBe(8);
103
+ expect(result.start.get("day")).toBe(10);
104
+ expect(result.start.get("hour")).toBe(15);
105
+
106
+ const resultDate = result.start.date();
107
+ const expectDate = new Date(2012, 7, 10, 15);
108
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
109
+ });
110
+
111
+ testSingleCase(chrono.zh.hans, "我今晚要打游戏", new Date(2012, 7, 10, 12), (result) => {
112
+ expect(result.index).toBe(1);
113
+ expect(result.text).toBe("今晚");
114
+
115
+ expect(result.start).not.toBeNull();
116
+ expect(result.start.get("year")).toBe(2012);
117
+ expect(result.start.get("month")).toBe(8);
118
+ expect(result.start.get("day")).toBe(10);
119
+ expect(result.start.get("hour")).toBe(22);
120
+
121
+ const resultDate = result.start.date();
122
+ const expectDate = new Date(2012, 7, 10, 22);
123
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
124
+ });
125
+ });
126
+
127
+ test("Test - Combined Expression", function () {
128
+ testSingleCase(chrono.zh.hans, "我今天下午5点要打游戏", new Date(2012, 7, 10, 12), (result) => {
129
+ expect(result.index).toBe(1);
130
+ expect(result.text).toBe("今天下午5点");
131
+
132
+ expect(result.start).not.toBeNull();
133
+ expect(result.start.get("year")).toBe(2012);
134
+ expect(result.start.get("month")).toBe(8);
135
+ expect(result.start.get("day")).toBe(10);
136
+ expect(result.start.get("hour")).toBe(17);
137
+
138
+ const resultDate = result.start.date();
139
+ const expectDate = new Date(2012, 7, 10, 17);
140
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
141
+ });
142
+ });
143
+
144
+ test("Test - Casual date range", function () {
145
+ testSingleCase(chrono.zh.hans, "我今天 - 下周五要打游戏", new Date(2012, 7, 4, 12), (result) => {
146
+ expect(result.index).toBe(1);
147
+ expect(result.text).toBe("今天 - 下周五");
148
+
149
+ expect(result.start).not.toBeNull();
150
+ expect(result.start.get("year")).toBe(2012);
151
+ expect(result.start.get("month")).toBe(8);
152
+ expect(result.start.get("day")).toBe(4);
153
+ expect(result.start.get("hour")).toBe(12);
154
+
155
+ const resultStartDate = result.start.date();
156
+ const expectStartDate = new Date(2012, 7, 4, 12);
157
+ expect(resultStartDate.getTime()).toBeCloseTo(expectStartDate.getTime());
158
+
159
+ expect(result.end).not.toBeNull();
160
+ expect(result.end.get("year")).toBe(2012);
161
+ expect(result.end.get("month")).toBe(8);
162
+ expect(result.end.get("day")).toBe(10);
163
+ expect(result.end.get("hour")).toBe(12);
164
+
165
+ const resultEndDate = result.end.date();
166
+ const expectEndDate = new Date(2012, 7, 10, 12);
167
+ expect(expectEndDate.getTime()).toBeCloseTo(resultEndDate.getTime());
168
+ });
169
+
170
+ testSingleCase(chrono.zh.hans, "我今日 - 下周五要打游戏", new Date(2012, 7, 10, 12), (result) => {
171
+ expect(result.index).toBe(1);
172
+ expect(result.text).toBe("今日 - 下周五");
173
+
174
+ expect(result.start).not.toBeNull();
175
+ expect(result.start.get("year")).toBe(2012);
176
+ expect(result.start.get("month")).toBe(8);
177
+ expect(result.start.get("day")).toBe(10);
178
+ expect(result.start.get("hour")).toBe(12);
179
+
180
+ const resultStartDate = result.start.date();
181
+ const expectStartDate = new Date(2012, 7, 10, 12);
182
+ expect(expectStartDate.getTime()).toBeCloseTo(resultStartDate.getTime());
183
+
184
+ expect(result.end).not.toBeNull();
185
+ expect(result.end.get("year")).toBe(2012);
186
+ expect(result.end.get("month")).toBe(8);
187
+ expect(result.end.get("day")).toBe(17);
188
+ expect(result.end.get("hour")).toBe(12);
189
+
190
+ const resultEndDate = result.end.date();
191
+ const expectEndDate = new Date(2012, 7, 17, 12);
192
+ expect(expectEndDate.getTime()).toBeCloseTo(resultEndDate.getTime());
193
+ });
194
+ });
195
+
196
+ test("Test - Random text", function () {
197
+ testSingleCase(chrono.zh.hans, "今日夜晚", new Date(2012, 1 - 1, 1, 12), (result) => {
198
+ expect(result.text).toBe("今日夜晚");
199
+ expect(result.start.get("year")).toBe(2012);
200
+ expect(result.start.get("month")).toBe(1);
201
+ expect(result.start.get("day")).toBe(1);
202
+ expect(result.start.get("hour")).toBe(22);
203
+ expect(result.start.get("meridiem")).toBe(1);
204
+ });
205
+
206
+ testSingleCase(chrono.zh.hans, "今晚8点正", new Date(2012, 1 - 1, 1, 12), (result) => {
207
+ expect(result.text).toBe("今晚8点正");
208
+ expect(result.start.get("hour")).toBe(20);
209
+ expect(result.start.get("year")).toBe(2012);
210
+ expect(result.start.get("month")).toBe(1);
211
+ expect(result.start.get("day")).toBe(1);
212
+ expect(result.start.get("meridiem")).toBe(1);
213
+ });
214
+
215
+ testSingleCase(chrono.zh.hans, "晚上8点", new Date(2012, 1 - 1, 1, 12), (result) => {
216
+ expect(result.text).toBe("晚上8点");
217
+ expect(result.start.get("hour")).toBe(20);
218
+ expect(result.start.get("year")).toBe(2012);
219
+ expect(result.start.get("month")).toBe(1);
220
+ expect(result.start.get("day")).toBe(1);
221
+ expect(result.start.get("meridiem")).toBe(1);
222
+ });
223
+
224
+ testSingleCase(chrono.zh.hans, "星期四", new Date(), (result) => {
225
+ expect(result.text).toBe("星期四");
226
+ expect(result.start.get("weekday")).toBe(4);
227
+ });
228
+ });
@@ -0,0 +1,102 @@
1
+ import * as chrono from "../../src";
2
+ import { testSingleCase } from "../test_util";
3
+
4
+ test("Test - Single Expression", function () {
5
+ testSingleCase(chrono.zh.hans, "我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.hans, "我二零一六年,九月三号要打游戏", 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.hans, "我九月三号要打游戏", 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.hans, "2016年9月3号-2017年10月24号", new Date(2012, 8 - 1, 10), (result) => {
50
+ expect(result.index).toBe(0);
51
+ expect(result.text).toBe("2016年9月3号-2017年10月24号");
52
+
53
+ expect(result.start).not.toBeNull();
54
+ expect(result.start.get("year")).toBe(2016);
55
+ expect(result.start.get("month")).toBe(9);
56
+ expect(result.start.get("day")).toBe(3);
57
+
58
+ {
59
+ const resultDate = result.start.date();
60
+ const expectDate = new Date(2016, 9 - 1, 3, 12);
61
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
62
+ }
63
+
64
+ expect(result.end).not.toBeNull();
65
+ expect(result.end.get("year")).toBe(2017);
66
+ expect(result.end.get("month")).toBe(10);
67
+ expect(result.end.get("day")).toBe(24);
68
+
69
+ {
70
+ const resultDate = result.end.date();
71
+ const expectDate = new Date(2017, 10 - 1, 24, 12);
72
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
73
+ }
74
+ });
75
+
76
+ testSingleCase(chrono.zh.hans, "二零一六年九月三号ー2017年10月24号", new Date(2012, 8 - 1, 10), (result) => {
77
+ expect(result.index).toBe(0);
78
+ expect(result.text).toBe("二零一六年九月三号ー2017年10月24号");
79
+
80
+ expect(result.start).not.toBeNull();
81
+ expect(result.start.get("year")).toBe(2016);
82
+ expect(result.start.get("month")).toBe(9);
83
+ expect(result.start.get("day")).toBe(3);
84
+
85
+ {
86
+ const resultDate = result.start.date();
87
+ const expectDate = new Date(2016, 9 - 1, 3, 12);
88
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
89
+ }
90
+
91
+ expect(result.end).not.toBeNull();
92
+ expect(result.end.get("year")).toBe(2017);
93
+ expect(result.end.get("month")).toBe(10);
94
+ expect(result.end.get("day")).toBe(24);
95
+
96
+ {
97
+ const resultDate = result.end.date();
98
+ const expectDate = new Date(2017, 10 - 1, 24, 12);
99
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
100
+ }
101
+ });
102
+ });
@@ -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.hans, "五日内我要通关游戏", 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.hans, "5日之内我要通关游戏", 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.hans, "十日内我要通关游戏", 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.hans, "五分钟后", 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.hans, "一个钟之内", 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.hans, "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.hans, "我要5秒之后出门", new Date(2012, 7, 10, 12, 14), (result) => {
75
+ expect(result.index).toBe(2);
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.hans, "半小时之内", 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.hans, "两个礼拜内答复我", 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.hans, "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.hans, "几个月之内答复我", 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.hans, "一年内答复我", 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.hans, "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
+ });
@@ -0,0 +1,182 @@
1
+ import * as chrono from "../../src";
2
+ import { testSingleCase } from "../test_util";
3
+
4
+ test("Test - Single Expression", function () {
5
+ testSingleCase(chrono.zh.hans, "我上午6点13分打游戏", new Date(2012, 7, 10), (result) => {
6
+ expect(result.index).toBe(1);
7
+ expect(result.text).toBe("上午6点13分");
8
+
9
+ expect(result.start).not.toBeNull();
10
+ expect(result.start.get("hour")).toBe(6);
11
+ expect(result.start.get("minute")).toBe(13);
12
+
13
+ const resultDate = result.start.date();
14
+ const expectDate = new Date(2012, 7, 10, 6, 13);
15
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
16
+ });
17
+
18
+ testSingleCase(chrono.zh.hans, "我后天凌晨打游戏", new Date(2012, 7, 10, 0, 0), (result) => {
19
+ expect(result.index).toBe(1);
20
+ expect(result.text).toBe("后天凌晨");
21
+
22
+ const resultDate = result.start.date();
23
+ const expectDate = new Date(2012, 7, 12, 0, 0);
24
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
25
+ });
26
+
27
+ testSingleCase(chrono.zh.hans, "我大前天凌晨打游戏", new Date(2012, 7, 10, 0, 0), (result) => {
28
+ expect(result.index).toBe(1);
29
+ expect(result.text).toBe("大前天凌晨");
30
+
31
+ const resultDate = result.start.date();
32
+ const expectDate = new Date(2012, 7, 7, 0, 0);
33
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
34
+ });
35
+ });
36
+
37
+ test("Test - Range Expression", function () {
38
+ testSingleCase(chrono.zh.hans, "我从今早八点十分至下午11点32分打游戏", new Date(2012, 7, 10), (result) => {
39
+ expect(result.index).toBe(1);
40
+ expect(result.text).toBe("从今早八点十分至下午11点32分");
41
+
42
+ expect(result.start).not.toBeNull();
43
+ expect(result.start.get("hour")).toBe(8);
44
+ expect(result.start.get("minute")).toBe(10);
45
+
46
+ expect(result.start.isCertain("day")).toBe(true);
47
+ expect(result.start.isCertain("month")).toBe(true);
48
+ expect(result.start.isCertain("year")).toBe(true);
49
+ expect(result.start.isCertain("hour")).toBe(true);
50
+ expect(result.start.isCertain("minute")).toBe(true);
51
+ expect(result.start.isCertain("second")).toBe(false);
52
+ expect(result.start.isCertain("millisecond")).toBe(false);
53
+
54
+ let resultDate = result.start.date();
55
+ let expectDate = new Date(2012, 7, 10, 8, 10);
56
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
57
+
58
+ expect(result.end).not.toBeNull();
59
+ expect(result.end.get("hour")).toBe(23);
60
+ expect(result.end.get("minute")).toBe(32);
61
+
62
+ expect(result.end.isCertain("day")).toBe(false);
63
+ expect(result.end.isCertain("month")).toBe(false);
64
+ expect(result.end.isCertain("year")).toBe(false);
65
+ expect(result.end.isCertain("hour")).toBe(true);
66
+ expect(result.end.isCertain("minute")).toBe(true);
67
+ expect(result.end.isCertain("second")).toBe(false);
68
+ expect(result.end.isCertain("millisecond")).toBe(false);
69
+
70
+ resultDate = result.end.date();
71
+ expectDate = new Date(2012, 7, 10, 23, 32);
72
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
73
+ });
74
+
75
+ testSingleCase(chrono.zh.hans, "6点30pm-11点pm", new Date(2012, 7, 10), (result) => {
76
+ expect(result.index).toBe(0);
77
+ expect(result.text).toBe("6点30pm-11点pm");
78
+
79
+ expect(result.start).not.toBeNull();
80
+ expect(result.start.get("hour")).toBe(18);
81
+ expect(result.start.get("minute")).toBe(30);
82
+ expect(result.start.get("meridiem")).toBe(1);
83
+
84
+ let resultDate = result.start.date();
85
+ let expectDate = new Date(2012, 7, 10, 18, 30);
86
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
87
+
88
+ expect(result.end).not.toBeNull();
89
+ expect(result.end.get("hour")).toBe(23);
90
+ expect(result.end.get("minute")).toBe(0);
91
+ expect(result.end.get("meridiem")).toBe(1);
92
+
93
+ resultDate = result.end.date();
94
+ expectDate = new Date(2012, 7, 10, 23, 0);
95
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
96
+ });
97
+ });
98
+
99
+ test("Test - Date + Time Expression", function () {
100
+ testSingleCase(
101
+ chrono.zh.hans,
102
+ "我二零一八年十一月二十六日下午三点半五十九秒打游戏",
103
+ new Date(2012, 7, 10),
104
+ (result) => {
105
+ expect(result.index).toBe(1);
106
+ expect(result.text).toBe("二零一八年十一月二十六日下午三点半五十九秒");
107
+
108
+ expect(result.start.get("year")).toBe(2018);
109
+ expect(result.start.get("month")).toBe(11);
110
+ expect(result.start.get("day")).toBe(26);
111
+ expect(result.start.get("hour")).toBe(15);
112
+ expect(result.start.get("minute")).toBe(30);
113
+ expect(result.start.get("second")).toBe(59);
114
+ expect(result.start.get("millisecond")).toBe(0);
115
+ expect(result.start.isCertain("millisecond")).toBe(false);
116
+
117
+ const resultDate = result.start.date();
118
+ const expectDate = new Date(2018, 11 - 1, 26, 15, 30, 59);
119
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
120
+ }
121
+ );
122
+ });
123
+
124
+ test("Test - Time Expression's Meridiem imply", function () {
125
+ testSingleCase(chrono.zh.hans, "1点pm到3点", new Date(2012, 7, 10), (result) => {
126
+ expect(result.index).toBe(0);
127
+ expect(result.text).toBe("1点pm到3点");
128
+
129
+ expect(result.start.get("year")).toBe(2012);
130
+ expect(result.start.get("month")).toBe(8);
131
+ expect(result.start.get("day")).toBe(10);
132
+ expect(result.start.get("hour")).toBe(13);
133
+ expect(result.start.get("minute")).toBe(0);
134
+ expect(result.start.get("second")).toBe(0);
135
+ expect(result.start.get("millisecond")).toBe(0);
136
+ expect(result.start.get("meridiem")).toBe(1);
137
+ expect(result.start.isCertain("meridiem")).toBe(true);
138
+
139
+ expect(result.end.get("year")).toBe(2012);
140
+ expect(result.end.get("month")).toBe(8);
141
+ expect(result.end.get("day")).toBe(11);
142
+ expect(result.end.get("hour")).toBe(3);
143
+ expect(result.end.get("minute")).toBe(0);
144
+ expect(result.end.get("second")).toBe(0);
145
+ expect(result.end.get("millisecond")).toBe(0);
146
+ expect(result.end.isCertain("meridiem")).toBe(false);
147
+ });
148
+ });
149
+
150
+ test("Test - Random date + time expression", function () {
151
+ testSingleCase(chrono.zh.hans, "2014年, 3月5日早上 6 点至 7 点", new Date(2012, 7, 10), (result) => {
152
+ expect(result.text).toBe("2014年, 3月5日早上 6 点至 7 点");
153
+ });
154
+
155
+ testSingleCase(chrono.zh.hans, "下星期六凌晨1点30分二十九秒", new Date(2012, 7, 10), (result) => {
156
+ expect(result.text).toBe("下星期六凌晨1点30分二十九秒");
157
+ });
158
+
159
+ testSingleCase(chrono.zh.hans, "昨天早上六点正", new Date(2012, 7, 10), (result) => {
160
+ expect(result.text).toBe("昨天早上六点正");
161
+ });
162
+
163
+ testSingleCase(chrono.zh.hans, "六月四日3:00am", new Date(2012, 7, 10), (result) => {
164
+ expect(result.text).toBe("六月四日3:00am");
165
+ });
166
+
167
+ testSingleCase(chrono.zh.hans, "上个礼拜五16时", new Date(2012, 7, 10), (result) => {
168
+ expect(result.text).toBe("上个礼拜五16时");
169
+ });
170
+
171
+ testSingleCase(chrono.zh.hans, "3月17日 20点15", new Date(2012, 7, 10), (result) => {
172
+ expect(result.text).toBe("3月17日 20点15");
173
+ });
174
+
175
+ testSingleCase(chrono.zh.hans, "10点", new Date(2012, 7, 10), (result) => {
176
+ expect(result.text).toBe("10点");
177
+ });
178
+
179
+ testSingleCase(chrono.zh.hans, "中午12点", new Date(2012, 7, 10), (result) => {
180
+ expect(result.start.get("hour")).toBe(12);
181
+ });
182
+ });