chrono-node 2.3.3 → 2.3.7

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 (109) hide show
  1. package/README.md +2 -2
  2. package/dist/common/casualReferences.js +3 -1
  3. package/dist/common/parsers/AbstractParserWithWordBoundary.js +2 -1
  4. package/dist/common/refiners/ExtractTimezoneAbbrRefiner.js +5 -0
  5. package/dist/index.d.ts +2 -1
  6. package/dist/index.js +3 -1
  7. package/dist/locales/en/index.js +2 -1
  8. package/dist/locales/en/parsers/ENRelativeDateFormatParser.js +2 -2
  9. package/dist/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js +1 -1
  10. package/dist/locales/en/refiners/ENMergeRelativeDateRefiner.d.ts +7 -0
  11. package/dist/locales/en/refiners/ENMergeRelativeDateRefiner.js +35 -0
  12. package/dist/locales/zh/hans/constants.d.ts +27 -0
  13. package/dist/locales/zh/hans/constants.js +51 -0
  14. package/dist/locales/zh/hans/index.d.ts +9 -0
  15. package/dist/locales/zh/hans/index.js +49 -0
  16. package/dist/locales/zh/hans/parsers/ZHHansCasualDateParser.d.ts +7 -0
  17. package/dist/locales/zh/hans/parsers/ZHHansCasualDateParser.js +138 -0
  18. package/dist/locales/zh/hans/parsers/ZHHansDateParser.d.ts +6 -0
  19. package/dist/locales/zh/hans/parsers/ZHHansDateParser.js +72 -0
  20. package/dist/locales/zh/hans/parsers/ZHHansDeadlineFormatParser.d.ts +6 -0
  21. package/dist/locales/zh/hans/parsers/ZHHansDeadlineFormatParser.js +78 -0
  22. package/dist/locales/zh/hans/parsers/ZHHansRelationWeekdayParser.d.ts +7 -0
  23. package/dist/locales/zh/hans/parsers/ZHHansRelationWeekdayParser.js +70 -0
  24. package/dist/locales/zh/hans/parsers/ZHHansTimeExpressionParser.d.ts +6 -0
  25. package/dist/locales/zh/hans/parsers/ZHHansTimeExpressionParser.js +438 -0
  26. package/dist/locales/zh/hans/parsers/ZHHansWeekdayParser.d.ts +7 -0
  27. package/dist/locales/zh/hans/parsers/ZHHansWeekdayParser.js +46 -0
  28. package/dist/locales/zh/hans/refiners/ZHHansMergeDateRangeRefiner.d.ts +4 -0
  29. package/dist/locales/zh/hans/refiners/ZHHansMergeDateRangeRefiner.js +12 -0
  30. package/dist/locales/zh/hans/refiners/ZHHansMergeDateTimeRefiner.d.ts +4 -0
  31. package/dist/locales/zh/hans/refiners/ZHHansMergeDateTimeRefiner.js +12 -0
  32. package/dist/locales/zh/hant/constants.d.ts +28 -0
  33. package/dist/locales/zh/hant/constants.js +52 -0
  34. package/dist/locales/zh/hant/index.d.ts +9 -0
  35. package/dist/locales/zh/hant/index.js +49 -0
  36. package/dist/locales/zh/hant/parsers/ZHHantCasualDateParser.d.ts +7 -0
  37. package/dist/locales/zh/hant/parsers/ZHHantCasualDateParser.js +138 -0
  38. package/dist/locales/zh/hant/parsers/ZHHantDateParser.d.ts +6 -0
  39. package/dist/locales/zh/hant/parsers/ZHHantDateParser.js +64 -0
  40. package/dist/locales/zh/hant/parsers/ZHHantDeadlineFormatParser.d.ts +6 -0
  41. package/dist/locales/zh/hant/parsers/ZHHantDeadlineFormatParser.js +78 -0
  42. package/dist/locales/zh/hant/parsers/ZHHantRelationWeekdayParser.d.ts +7 -0
  43. package/dist/locales/zh/hant/parsers/ZHHantRelationWeekdayParser.js +70 -0
  44. package/dist/locales/zh/hant/parsers/ZHHantTimeExpressionParser.d.ts +6 -0
  45. package/dist/locales/zh/hant/parsers/ZHHantTimeExpressionParser.js +438 -0
  46. package/dist/locales/zh/hant/parsers/ZHHantWeekdayParser.d.ts +7 -0
  47. package/dist/locales/zh/hant/parsers/ZHHantWeekdayParser.js +46 -0
  48. package/dist/locales/zh/hant/refiners/ZHHantMergeDateRangeRefiner.d.ts +4 -0
  49. package/dist/locales/zh/hant/refiners/ZHHantMergeDateRangeRefiner.js +12 -0
  50. package/dist/locales/zh/hant/refiners/ZHHantMergeDateTimeRefiner.d.ts +4 -0
  51. package/dist/locales/zh/hant/refiners/ZHHantMergeDateTimeRefiner.js +12 -0
  52. package/dist/locales/zh/index.d.ts +2 -0
  53. package/dist/locales/zh/index.js +16 -0
  54. package/dist/results.js +8 -5
  55. package/dist/timezone.js +1 -1
  56. package/dist/utils/dayjs.js +7 -0
  57. package/package.json +1 -1
  58. package/src/common/casualReferences.ts +3 -1
  59. package/src/common/parsers/AbstractParserWithWordBoundary.ts +1 -1
  60. package/src/common/refiners/ExtractTimezoneAbbrRefiner.ts +8 -0
  61. package/src/index.ts +2 -1
  62. package/src/locales/en/index.ts +2 -1
  63. package/src/locales/en/parsers/ENMonthNameLittleEndianParser.ts +0 -2
  64. package/src/locales/en/parsers/ENRelativeDateFormatParser.ts +2 -2
  65. package/src/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.ts +1 -1
  66. package/src/locales/en/refiners/ENMergeRelativeDateRefiner.ts +58 -0
  67. package/src/locales/zh/hans/constants.ts +52 -0
  68. package/src/locales/zh/hans/index.ts +62 -0
  69. package/src/locales/zh/hans/parsers/ZHHansCasualDateParser.ts +128 -0
  70. package/src/locales/zh/hans/parsers/ZHHansDateParser.ts +75 -0
  71. package/src/locales/zh/hans/parsers/ZHHansDeadlineFormatParser.ts +81 -0
  72. package/src/locales/zh/hans/parsers/ZHHansRelationWeekdayParser.ts +69 -0
  73. package/src/locales/zh/hans/parsers/ZHHansTimeExpressionParser.ts +424 -0
  74. package/src/locales/zh/hans/parsers/ZHHansWeekdayParser.ts +46 -0
  75. package/src/locales/zh/hans/refiners/ZHHansMergeDateRangeRefiner.ts +7 -0
  76. package/src/locales/zh/hans/refiners/ZHHansMergeDateTimeRefiner.ts +7 -0
  77. package/src/locales/zh/hant/constants.ts +53 -0
  78. package/src/locales/zh/hant/index.ts +63 -0
  79. package/src/locales/zh/hant/parsers/ZHHantCasualDateParser.ts +128 -0
  80. package/src/locales/zh/hant/parsers/ZHHantDateParser.ts +68 -0
  81. package/src/locales/zh/hant/parsers/ZHHantDeadlineFormatParser.ts +81 -0
  82. package/src/locales/zh/hant/parsers/ZHHantRelationWeekdayParser.ts +69 -0
  83. package/src/locales/zh/hant/parsers/ZHHantTimeExpressionParser.ts +424 -0
  84. package/src/locales/zh/hant/parsers/ZHHantWeekdayParser.ts +46 -0
  85. package/src/locales/zh/hant/refiners/ZHHantMergeDateRangeRefiner.ts +7 -0
  86. package/src/locales/zh/hant/refiners/ZHHantMergeDateTimeRefiner.ts +7 -0
  87. package/src/locales/zh/index.ts +2 -0
  88. package/src/results.ts +11 -4
  89. package/src/timezone.ts +1 -1
  90. package/src/utils/dayjs.ts +6 -0
  91. package/test/en/en_casual.test.ts +11 -0
  92. package/test/en/en_merging_relative_dates.test.ts +51 -0
  93. package/test/en/en_month.test.ts +13 -0
  94. package/test/en/en_relative.test.ts +20 -0
  95. package/test/en/en_time_units_ago.test.ts +16 -0
  96. package/test/en/en_time_units_casual_relative.test.ts +16 -0
  97. package/test/en/en_time_units_later.test.ts +6 -0
  98. package/test/en/en_timezone_exp.test.ts +85 -10
  99. package/test/zh/zh.test.ts +18 -0
  100. package/test/zh/zh_hans_casual.test.ts +228 -0
  101. package/test/zh/zh_hans_date.test.ts +102 -0
  102. package/test/zh/zh_hans_deadline.test.ts +136 -0
  103. package/test/zh/zh_hans_time_exp.test.ts +182 -0
  104. package/test/zh/zh_hans_weekday.test.ts +132 -0
  105. package/test/zh/zh_hant_casual.test.ts +246 -0
  106. package/test/zh/zh_hant_date.test.ts +102 -0
  107. package/test/zh/zh_hant_deadline.test.ts +136 -0
  108. package/test/zh/zh_hant_time_exp.test.ts +182 -0
  109. 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
 
@@ -32,6 +32,22 @@ test("Test - Positive time units", () => {
32
32
  expect(result.start.get("day")).toBe(18);
33
33
  expect(result.start.get("hour")).toBe(12);
34
34
  });
35
+
36
+ testSingleCase(chrono, "after a year", new Date(2016, 10 - 1, 1, 12), (result, text) => {
37
+ expect(result.text).toBe(text);
38
+ expect(result.start.get("year")).toBe(2017);
39
+ expect(result.start.get("month")).toBe(10);
40
+ expect(result.start.get("day")).toBe(1);
41
+ expect(result.start.get("hour")).toBe(12);
42
+ });
43
+
44
+ testSingleCase(chrono, "after an hour", new Date(2016, 10 - 1, 1, 15), (result, text) => {
45
+ expect(result.text).toBe(text);
46
+ expect(result.start.get("year")).toBe(2016);
47
+ expect(result.start.get("month")).toBe(10);
48
+ expect(result.start.get("day")).toBe(1);
49
+ expect(result.start.get("hour")).toBe(16);
50
+ });
35
51
  });
36
52
 
37
53
  test("Test - Negative time units", () => {
@@ -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
  });
@@ -81,20 +81,95 @@ test("Test - Parsing date with timezone abbreviation", function () {
81
81
  });
82
82
 
83
83
  test("Test - Not parsing timezone from relative time", function () {
84
- const refDate = new Date(2020, 11 - 1, 14, 13, 48, 22);
84
+ {
85
+ const refInstant = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
86
+ const expectedInstant = new Date("Sun Nov 29 2020 14:24:13 GMT+0900 (Japan Standard Time)");
87
+
88
+ testSingleCase(chrono, "in 1 hour get eggs and milk", refInstant, (result, text) => {
89
+ expect(result.text).toBe("in 1 hour");
90
+ expect(result.start.get("timezoneOffset")).toBe(-refInstant.getTimezoneOffset());
91
+ expect(result.start).toBeDate(expectedInstant);
92
+ });
93
+ }
94
+
95
+ {
96
+ const refInstant = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
97
+ const expectedInstant = new Date("Sun Nov 29 2020 14:24:13 GMT+0900 (Japan Standard Time)");
98
+
99
+ testSingleCase(chrono, "in 1 hour GMT", refInstant, (result, text) => {
100
+ expect(result.text).toBe("in 1 hour");
101
+ expect(result.start).toBeDate(expectedInstant);
102
+ });
103
+ }
104
+
105
+ {
106
+ const refInstant = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
107
+ const expectedInstant = new Date("Sun Nov 29 2020 14:24:13 GMT+0900 (Japan Standard Time)");
108
+
109
+ testSingleCase(chrono, "in 1 hour GMT", { instant: refInstant, timezone: "JST" }, (result, text) => {
110
+ expect(result.text).toBe("in 1 hour");
111
+ expect(result.start).toBeDate(expectedInstant);
112
+ });
113
+ }
114
+
115
+ {
116
+ const refInstant = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
117
+ const expectedInstant = new Date("Sun Nov 29 2020 14:24:13 GMT+0900 (Japan Standard Time)");
118
+
119
+ testSingleCase(chrono, "in 1 hour GMT", { instant: refInstant, timezone: "BST" }, (result, text) => {
120
+ expect(result.text).toBe("in 1 hour");
121
+ expect(result.start).toBeDate(expectedInstant);
122
+ });
123
+ }
124
+ });
85
125
 
86
- testSingleCase(chrono, "in 1 hour get eggs and milk", refDate, (result, text) => {
87
- expect(result.text).toBe("in 1 hour");
88
- expect(result.start.get("timezoneOffset")).toBe(-refDate.getTimezoneOffset());
126
+ test("Test - Relative time (Now) is not effected by timezone setting", function () {
127
+ const refInstant = new Date(1637674343000);
128
+
129
+ testSingleCase(chrono, "now", { instant: refInstant }, (result) => {
130
+ expect(result.text).toBe("now");
131
+ expect(result.start).toBeDate(refInstant);
132
+ });
133
+
134
+ testSingleCase(chrono, "now", { instant: refInstant, timezone: null }, (result) => {
135
+ expect(result.text).toBe("now");
136
+ expect(result.start).toBeDate(refInstant);
137
+ });
138
+
139
+ testSingleCase(chrono, "now", { instant: refInstant, timezone: "BST" }, (result) => {
140
+ expect(result.text).toBe("now");
141
+ expect(result.start).toBeDate(refInstant);
142
+ });
143
+
144
+ testSingleCase(chrono, "now", { instant: refInstant, timezone: "JST" }, (result) => {
145
+ expect(result.text).toBe("now");
146
+ expect(result.start).toBeDate(refInstant);
89
147
  });
148
+ });
90
149
 
91
- // This test fail when the system/assume timezone is exactly similar to the mentioned timezone
92
- // Temporary disable this test
150
+ test("Test - Relative time (2 hour later) is not effected by timezone setting", function () {
151
+ const refInstant = new Date(1637674343000);
152
+ const expectedInstant = new Date(1637674343000 + 2 * 60 * 60 * 1000);
93
153
 
94
- // testSingleCase(chrono, "in 3 hours GMT", refDate, (result, text) => {
95
- // expect(result.text).toBe("in 3 hours");
96
- // expect(result.start.get("timezoneOffset")).toBe(-refDate.getTimezoneOffset());
97
- // });
154
+ testSingleCase(chrono, "2 hour later", { instant: refInstant }, (result) => {
155
+ expect(result.text).toBe("2 hour later");
156
+ expect(result.start).toBeDate(expectedInstant);
157
+ });
158
+
159
+ testSingleCase(chrono, "2 hour later", { instant: refInstant, timezone: null }, (result) => {
160
+ expect(result.text).toBe("2 hour later");
161
+ expect(result.start).toBeDate(expectedInstant);
162
+ });
163
+
164
+ testSingleCase(chrono, "2 hour later", { instant: refInstant, timezone: "BST" }, (result) => {
165
+ expect(result.text).toBe("2 hour later");
166
+ expect(result.start).toBeDate(expectedInstant);
167
+ });
168
+
169
+ testSingleCase(chrono, "2 hour later", { instant: refInstant, timezone: "JST" }, (result) => {
170
+ expect(result.text).toBe("2 hour later");
171
+ expect(result.start).toBeDate(expectedInstant);
172
+ });
98
173
  });
99
174
 
100
175
  test("Test - Parsing timezone from relative date when valid", function () {
@@ -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,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
+ });