chrono-node 2.2.7 → 2.3.3

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 (98) hide show
  1. package/README.md +25 -9
  2. package/benchmark/benchmark.js +4 -0
  3. package/dist/bundle.js +5047 -0
  4. package/dist/chrono.d.ts +7 -6
  5. package/dist/chrono.js +6 -5
  6. package/dist/common/casualReferences.d.ts +6 -6
  7. package/dist/common/casualReferences.js +16 -15
  8. package/dist/common/refiners/ForwardDateRefiner.js +1 -1
  9. package/dist/index.d.ts +7 -3
  10. package/dist/locales/de/constants.js +1 -1
  11. package/dist/locales/de/parsers/DECasualDateParser.js +2 -2
  12. package/dist/locales/en/constants.d.ts +1 -1
  13. package/dist/locales/en/constants.js +5 -5
  14. package/dist/locales/en/parsers/ENCasualDateParser.js +5 -5
  15. package/dist/locales/en/parsers/ENCasualTimeParser.js +1 -1
  16. package/dist/locales/en/parsers/ENMonthNameLittleEndianParser.js +6 -8
  17. package/dist/locales/en/parsers/ENRelativeDateFormatParser.js +3 -3
  18. package/dist/locales/en/parsers/ENTimeUnitAgoFormatParser.js +3 -3
  19. package/dist/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js +1 -1
  20. package/dist/locales/en/parsers/ENTimeUnitLaterFormatParser.js +2 -2
  21. package/dist/locales/en/parsers/ENTimeUnitWithinFormatParser.js +1 -1
  22. package/dist/locales/fr/constants.js +1 -1
  23. package/dist/locales/fr/parsers/FRCasualDateParser.js +4 -4
  24. package/dist/locales/fr/parsers/FRTimeUnitAgoFormatParser.js +1 -1
  25. package/dist/locales/fr/parsers/FRTimeUnitRelativeFormatParser.js +1 -1
  26. package/dist/locales/fr/parsers/FRTimeUnitWithinFormatParser.js +1 -1
  27. package/dist/locales/ja/parsers/JPCasualDateParser.js +3 -3
  28. package/dist/locales/nl/constants.js +8 -5
  29. package/dist/locales/nl/index.js +12 -3
  30. package/dist/locales/nl/parsers/NLCasualDateParser.js +4 -4
  31. package/dist/locales/nl/parsers/NLRelativeDateFormatParser.d.ts +7 -0
  32. package/dist/locales/nl/parsers/NLRelativeDateFormatParser.js +57 -0
  33. package/dist/locales/nl/parsers/NLTimeExpressionParser.d.ts +1 -0
  34. package/dist/locales/nl/parsers/NLTimeExpressionParser.js +3 -0
  35. package/dist/locales/nl/parsers/NLTimeUnitAgoFormatParser.d.ts +9 -0
  36. package/dist/locales/nl/parsers/NLTimeUnitAgoFormatParser.js +23 -0
  37. package/dist/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.d.ts +7 -0
  38. package/dist/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.js +25 -0
  39. package/dist/locales/nl/parsers/NLTimeUnitLaterFormatParser.d.ts +9 -0
  40. package/dist/locales/nl/parsers/NLTimeUnitLaterFormatParser.js +22 -0
  41. package/dist/locales/nl/parsers/NLTimeUnitWithinFormatParser.js +1 -1
  42. package/dist/locales/pt/parsers/PTCasualDateParser.js +4 -4
  43. package/dist/main.js +1078 -0
  44. package/dist/results.d.ts +12 -5
  45. package/dist/results.js +40 -17
  46. package/dist/timezone.d.ts +194 -0
  47. package/dist/timezone.js +207 -0
  48. package/dist/utils/dayjs.js +0 -2
  49. package/dist/utils/pattern.js +1 -1
  50. package/package.json +3 -3
  51. package/src/chrono.ts +21 -8
  52. package/src/common/casualReferences.ts +17 -18
  53. package/src/common/refiners/ForwardDateRefiner.ts +1 -1
  54. package/src/index.ts +19 -3
  55. package/src/locales/de/constants.ts +1 -1
  56. package/src/locales/de/parsers/DECasualDateParser.ts +2 -2
  57. package/src/locales/en/constants.ts +5 -5
  58. package/src/locales/en/parsers/ENCasualDateParser.ts +5 -5
  59. package/src/locales/en/parsers/ENCasualTimeParser.ts +1 -1
  60. package/src/locales/en/parsers/ENMonthNameLittleEndianParser.ts +9 -10
  61. package/src/locales/en/parsers/ENRelativeDateFormatParser.ts +3 -3
  62. package/src/locales/en/parsers/ENTimeUnitAgoFormatParser.ts +3 -4
  63. package/src/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.ts +1 -1
  64. package/src/locales/en/parsers/ENTimeUnitLaterFormatParser.ts +2 -2
  65. package/src/locales/en/parsers/ENTimeUnitWithinFormatParser.ts +1 -1
  66. package/src/locales/fr/constants.ts +1 -1
  67. package/src/locales/fr/parsers/FRCasualDateParser.ts +4 -4
  68. package/src/locales/fr/parsers/FRTimeUnitAgoFormatParser.ts +1 -1
  69. package/src/locales/fr/parsers/FRTimeUnitRelativeFormatParser.ts +1 -1
  70. package/src/locales/fr/parsers/FRTimeUnitWithinFormatParser.ts +1 -1
  71. package/src/locales/ja/parsers/JPCasualDateParser.ts +3 -3
  72. package/src/locales/nl/constants.ts +11 -5
  73. package/src/locales/nl/index.ts +12 -3
  74. package/src/locales/nl/parsers/NLCasualDateParser.ts +4 -4
  75. package/src/locales/nl/parsers/NLRelativeDateFormatParser.ts +70 -0
  76. package/src/locales/nl/parsers/NLTimeExpressionParser.ts +4 -0
  77. package/src/locales/nl/parsers/NLTimeUnitAgoFormatParser.ts +26 -0
  78. package/src/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.ts +27 -0
  79. package/src/locales/nl/parsers/NLTimeUnitLaterFormatParser.ts +27 -0
  80. package/src/locales/nl/parsers/NLTimeUnitWithinFormatParser.ts +1 -1
  81. package/src/locales/pt/parsers/PTCasualDateParser.ts +4 -4
  82. package/src/results.ts +52 -18
  83. package/src/timezone.ts +205 -0
  84. package/src/utils/dayjs.ts +0 -2
  85. package/src/utils/pattern.ts +1 -1
  86. package/test/en/en_month_name_little_endian.test.ts +10 -0
  87. package/test/en/en_relative.test.ts +30 -0
  88. package/test/en/en_slash.test.ts +11 -0
  89. package/test/en/en_timezone_exp.test.ts +7 -4
  90. package/test/en/en_weekday.test.ts +69 -25
  91. package/test/en/negative_cases.test.ts +2 -0
  92. package/test/nl/nl_relative.test.ts +212 -0
  93. package/test/nl/nl_time_units_ago.test.ts +243 -0
  94. package/test/nl/nl_time_units_casual_relative.test.ts +130 -0
  95. package/test/nl/nl_time_units_later.test.ts +250 -0
  96. package/test/result.test.ts +32 -13
  97. package/test/system_timezone.test.ts +100 -0
  98. package/test/test_util.ts +10 -7
@@ -0,0 +1,212 @@
1
+ import * as chrono from "../../src";
2
+ import { testSingleCase } from "../test_util";
3
+ import { ParsingResult } from "../../src/results";
4
+
5
+ test("Test - 'This' expressions", () => {
6
+ // this week
7
+ testSingleCase(chrono.nl, "deze week", new Date(2017, 11 - 1, 19, 12), (result, text) => {
8
+ expect(result.text).toBe(text);
9
+ expect(result.start.get("year")).toBe(2017);
10
+ expect(result.start.get("month")).toBe(11);
11
+ expect(result.start.get("day")).toBe(19);
12
+ expect(result.start.get("hour")).toBe(12);
13
+ });
14
+
15
+ // this month
16
+ testSingleCase(chrono.nl, "deze maand", new Date(2017, 11 - 1, 19, 12), (result, text) => {
17
+ expect(result.text).toBe(text);
18
+ expect(result.start.get("year")).toBe(2017);
19
+ expect(result.start.get("month")).toBe(11);
20
+ expect(result.start.get("day")).toBe(1);
21
+ expect(result.start.get("hour")).toBe(12);
22
+ });
23
+
24
+ // this year
25
+ testSingleCase(chrono.nl, "dit jaar", new Date(2017, 11 - 1, 19, 12), (result, text) => {
26
+ expect(result.text).toBe(text);
27
+ expect(result.start.get("year")).toBe(2017);
28
+ expect(result.start.get("month")).toBe(1);
29
+ expect(result.start.get("day")).toBe(1);
30
+ expect(result.start.get("hour")).toBe(12);
31
+ });
32
+ });
33
+
34
+ test("Test - Past relative expressions", () => {
35
+ // last week
36
+ testSingleCase(chrono.nl, "afgelopen week", new Date(2016, 10 - 1, 1, 12), (result, text) => {
37
+ expect(result.text).toBe(text);
38
+ expect(result.start.get("year")).toBe(2016);
39
+ expect(result.start.get("month")).toBe(9);
40
+ expect(result.start.get("day")).toBe(24);
41
+ expect(result.start.get("hour")).toBe(12);
42
+ });
43
+
44
+ // last month
45
+ testSingleCase(chrono.nl, "afgelopen maand", new Date(2016, 10 - 1, 1, 12), (result, text) => {
46
+ expect(result.text).toBe(text);
47
+ expect(result.start.get("year")).toBe(2016);
48
+ expect(result.start.get("month")).toBe(9);
49
+ expect(result.start.get("day")).toBe(1);
50
+ expect(result.start.get("hour")).toBe(12);
51
+ });
52
+
53
+ // last day
54
+ testSingleCase(chrono.nl, "afgelopen dag", new Date(2016, 10 - 1, 1, 12), (result, text) => {
55
+ expect(result.text).toBe(text);
56
+ expect(result.start.get("year")).toBe(2016);
57
+ expect(result.start.get("month")).toBe(9);
58
+ expect(result.start.get("day")).toBe(30);
59
+ expect(result.start.get("hour")).toBe(12);
60
+ });
61
+
62
+ // past week
63
+ testSingleCase(chrono.nl, "vorige week", new Date(2016, 10 - 1, 1, 12), (result, text) => {
64
+ expect(result.text).toBe(text);
65
+ expect(result.start.get("year")).toBe(2016);
66
+ expect(result.start.get("month")).toBe(9);
67
+ expect(result.start.get("day")).toBe(24);
68
+ expect(result.start.get("hour")).toBe(12);
69
+ });
70
+ });
71
+
72
+ test("Test - Future relative expressions", () => {
73
+ // next hour
74
+ testSingleCase(chrono.nl, "komende uur", new Date(2016, 10 - 1, 1, 12), (result, text) => {
75
+ expect(result.text).toBe(text);
76
+ expect(result.start.get("year")).toBe(2016);
77
+ expect(result.start.get("month")).toBe(10);
78
+ expect(result.start.get("day")).toBe(1);
79
+ expect(result.start.get("hour")).toBe(13);
80
+ });
81
+
82
+ // next week
83
+ testSingleCase(chrono.nl, "volgende week", new Date(2016, 10 - 1, 1, 12), (result, text) => {
84
+ expect(result.text).toBe(text);
85
+ expect(result.start.get("year")).toBe(2016);
86
+ expect(result.start.get("month")).toBe(10);
87
+ expect(result.start.get("day")).toBe(8);
88
+ expect(result.start.get("hour")).toBe(12);
89
+ });
90
+
91
+ // next day
92
+ testSingleCase(chrono.nl, "volgende dag", new Date(2016, 10 - 1, 1, 12), (result, text) => {
93
+ expect(result.text).toBe(text);
94
+ expect(result.start.get("year")).toBe(2016);
95
+ expect(result.start.get("month")).toBe(10);
96
+ expect(result.start.get("day")).toBe(2);
97
+ expect(result.start.get("hour")).toBe(12);
98
+ });
99
+
100
+ // next month
101
+ testSingleCase(chrono.nl, "volgende maand", new Date(2016, 10 - 1, 1, 12), (result, text) => {
102
+ expect(result.text).toBe(text);
103
+ expect(result.start.get("year")).toBe(2016);
104
+ expect(result.start.get("month")).toBe(11);
105
+ expect(result.start.get("day")).toBe(1);
106
+ expect(result.start.get("hour")).toBe(12);
107
+
108
+ expect(result.start.isCertain("year")).toBe(true);
109
+ expect(result.start.isCertain("month")).toBe(true);
110
+ expect(result.start.isCertain("day")).toBe(false);
111
+ expect(result.start.isCertain("hour")).toBe(false);
112
+ });
113
+
114
+ // next year
115
+ testSingleCase(chrono.nl, "volgend jaar", new Date(2020, 11 - 1, 22, 12, 11, 32, 6), (result, text) => {
116
+ expect(result.text).toBe(text);
117
+ expect(result.start.get("year")).toBe(2021);
118
+ expect(result.start.get("month")).toBe(11);
119
+ expect(result.start.get("day")).toBe(22);
120
+ expect(result.start.get("hour")).toBe(12);
121
+ expect(result.start.get("minute")).toBe(11);
122
+ expect(result.start.get("second")).toBe(32);
123
+ expect(result.start.get("millisecond")).toBe(6);
124
+
125
+ expect(result.start.isCertain("year")).toBe(true);
126
+ expect(result.start.isCertain("month")).toBe(false);
127
+ expect(result.start.isCertain("day")).toBe(false);
128
+ expect(result.start.isCertain("hour")).toBe(false);
129
+ expect(result.start.isCertain("minute")).toBe(false);
130
+ expect(result.start.isCertain("second")).toBe(false);
131
+ expect(result.start.isCertain("millisecond")).toBe(false);
132
+ expect(result.start.isCertain("timezoneOffset")).toBe(false);
133
+ });
134
+ });
135
+
136
+ test("Test - Relative date components' certainty", () => {
137
+ const refDate = new Date(2016, 10 - 1, 7, 12);
138
+
139
+ // next hour
140
+ testSingleCase(chrono.nl, "komende uur", refDate, (result, text) => {
141
+ expect(result.text).toBe(text);
142
+ expect(result.start.get("year")).toBe(2016);
143
+ expect(result.start.get("month")).toBe(10);
144
+ expect(result.start.get("day")).toBe(7);
145
+ expect(result.start.get("hour")).toBe(13);
146
+ expect(result.start.get("timezoneOffset")).toBe(refDate.getTimezoneOffset() * -1);
147
+
148
+ expect(result.start.isCertain("year")).toBe(true);
149
+ expect(result.start.isCertain("month")).toBe(true);
150
+ expect(result.start.isCertain("day")).toBe(true);
151
+ expect(result.start.isCertain("hour")).toBe(true);
152
+ expect(result.start.isCertain("timezoneOffset")).toBe(true);
153
+ });
154
+
155
+ // next month
156
+ testSingleCase(chrono.nl, "volgende maand", refDate, (result, text) => {
157
+ const expectedDate = new Date(2016, 11, 7, 12);
158
+
159
+ expect(result.text).toBe(text);
160
+ expect(result.start.get("year")).toBe(2016);
161
+ expect(result.start.get("month")).toBe(11);
162
+ expect(result.start.get("day")).toBe(7);
163
+ expect(result.start.get("hour")).toBe(12);
164
+ expect(result.start.get("timezoneOffset")).toBe(-expectedDate.getTimezoneOffset());
165
+
166
+ expect(result.start.isCertain("year")).toBe(true);
167
+ expect(result.start.isCertain("month")).toBe(true);
168
+ expect(result.start.isCertain("day")).toBe(false);
169
+ expect(result.start.isCertain("hour")).toBe(false);
170
+ expect(result.start.isCertain("timezoneOffset")).toBe(false);
171
+ });
172
+ });
173
+
174
+ test("Test - Relative date components' certainty and imply timezone", () => {
175
+ const refDate = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
176
+
177
+ {
178
+ // now
179
+ const text = "nu";
180
+ const result = chrono.nl.parse(text, refDate)[0] as ParsingResult;
181
+
182
+ expect(result.text).toBe(text);
183
+ result.start.imply("timezoneOffset", 60);
184
+
185
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)"));
186
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 5:24:13 GMT+0100"));
187
+ }
188
+
189
+ {
190
+ // tomorrow at 5pm
191
+ const text = "morgen om 17 uur";
192
+ const result = chrono.nl.parse(text, refDate)[0] as ParsingResult;
193
+
194
+ expect(result.text).toBe(text);
195
+ result.start.imply("timezoneOffset", 60);
196
+
197
+ expect(result).toBeDate(new Date("Sun Dec 1 2020 1:00:00 GMT+0900 (Japan Standard Time)"));
198
+ expect(result).toBeDate(new Date("Sun Nov 30 2020 17:00:00 GMT+0100"));
199
+ }
200
+
201
+ {
202
+ // in 10 minutes
203
+ const text = "binnen 10 minuten";
204
+ const result = chrono.nl.parse(text, refDate)[0] as ParsingResult;
205
+
206
+ expect(result.text).toBe(text);
207
+ result.start.imply("timezoneOffset", 60);
208
+
209
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 13:34:13 GMT+0900 (Japan Standard Time)"));
210
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 5:34:13 GMT+0100"));
211
+ }
212
+ });
@@ -0,0 +1,243 @@
1
+ import * as chrono from "../../src/";
2
+ import { testSingleCase, testUnexpectedResult } from "../test_util";
3
+
4
+ test("Test - Single Expression", function () {
5
+ // 5 days ago, we did something
6
+ testSingleCase(chrono.nl, "5 dagen geleden, hebben we wat gedaan", new Date(2012, 7, 10), (result) => {
7
+ expect(result.start).not.toBeNull();
8
+ expect(result.start.get("year")).toBe(2012);
9
+ expect(result.start.get("month")).toBe(8);
10
+ expect(result.start.get("day")).toBe(5);
11
+
12
+ expect(result.index).toBe(0);
13
+ expect(result.text).toBe("5 dagen geleden");
14
+
15
+ expect(result.start).toBeDate(new Date(2012, 8 - 1, 5));
16
+ });
17
+
18
+ // 10 days ago, we did something
19
+ testSingleCase(chrono.nl, "10 dagen geleden, hebben we wat gedaan", new Date(2012, 7, 10), (result) => {
20
+ expect(result.start).not.toBeNull();
21
+ expect(result.start.get("year")).toBe(2012);
22
+ expect(result.start.get("month")).toBe(7);
23
+ expect(result.start.get("day")).toBe(31);
24
+
25
+ expect(result.index).toBe(0);
26
+ expect(result.text).toBe("10 dagen geleden");
27
+
28
+ expect(result.start).toBeDate(new Date(2012, 7 - 1, 31));
29
+ });
30
+
31
+ // 15 minute ago
32
+ testSingleCase(chrono.nl, "15 minuten geleden", new Date(2012, 7, 10, 12, 14), (result) => {
33
+ expect(result.index).toBe(0);
34
+ expect(result.text).toBe("15 minuten geleden");
35
+ expect(result.start.get("hour")).toBe(11);
36
+ expect(result.start.get("minute")).toBe(59);
37
+
38
+ expect(result.start).toBeDate(new Date(2012, 7, 10, 11, 59));
39
+ });
40
+
41
+ // 15 minute earlier
42
+ testSingleCase(chrono.nl, "15 minuten eerder", new Date(2012, 7, 10, 12, 14), (result) => {
43
+ expect(result.index).toBe(0);
44
+ expect(result.text).toBe("15 minuten eerder");
45
+ expect(result.start.get("hour")).toBe(11);
46
+ expect(result.start.get("minute")).toBe(59);
47
+
48
+ expect(result.start).toBeDate(new Date(2012, 7, 10, 11, 59));
49
+ });
50
+
51
+ // 15 minute before
52
+ testSingleCase(chrono.nl, "15 minuten voor", new Date(2012, 7, 10, 12, 14), (result) => {
53
+ expect(result.index).toBe(0);
54
+ expect(result.text).toBe("15 minuten voor");
55
+ expect(result.start.get("hour")).toBe(11);
56
+ expect(result.start.get("minute")).toBe(59);
57
+
58
+ expect(result.start).toBeDate(new Date(2012, 7, 10, 11, 59));
59
+ });
60
+
61
+ // 12 hours ago
62
+ testSingleCase(chrono.nl, " 12 uur geleden", new Date(2012, 7, 10, 12, 14), (result) => {
63
+ expect(result.index).toBe(3);
64
+ expect(result.text).toBe("12 uur geleden");
65
+ expect(result.start.get("hour")).toBe(0);
66
+ expect(result.start.get("minute")).toBe(14);
67
+
68
+ expect(result.start).toBeDate(new Date(2012, 7, 10, 0, 14));
69
+ });
70
+
71
+ // 1h ago
72
+ testSingleCase(chrono.nl, "1u geleden", new Date(2012, 7, 10, 12, 14), (result) => {
73
+ expect(result.index).toBe(0);
74
+ expect(result.text).toBe("1u geleden");
75
+ expect(result.start.get("hour")).toBe(11);
76
+ expect(result.start.get("minute")).toBe(14);
77
+ });
78
+
79
+ // half an hour ago
80
+ testSingleCase(chrono.nl, " half uur geleden", new Date(2012, 7, 10, 12, 14), (result) => {
81
+ expect(result.index).toBe(3);
82
+ expect(result.text).toBe("half uur geleden");
83
+ expect(result.start.get("hour")).toBe(11);
84
+ expect(result.start.get("minute")).toBe(44);
85
+
86
+ expect(result.start).toBeDate(new Date(2012, 7, 10, 11, 44));
87
+ });
88
+
89
+ // 12 hours ago I did something
90
+ testSingleCase(chrono.nl, "12 uur geleden deed ik iets", new Date(2012, 7, 10, 12, 14), (result) => {
91
+ expect(result.index).toBe(0);
92
+ expect(result.text).toBe("12 uur geleden");
93
+ expect(result.start.get("hour")).toBe(0);
94
+ expect(result.start.get("minute")).toBe(14);
95
+
96
+ expect(result.start).toBeDate(new Date(2012, 7, 10, 0, 14));
97
+ });
98
+
99
+ // 12 seconds ago I did something
100
+ testSingleCase(chrono.nl, "12 seconden geleden deed ik iets", new Date(2012, 7, 10, 12, 14), (result) => {
101
+ expect(result.index).toBe(0);
102
+ expect(result.text).toBe("12 seconden geleden");
103
+ expect(result.start.get("hour")).toBe(12);
104
+ expect(result.start.get("minute")).toBe(13);
105
+ expect(result.start.get("second")).toBe(48);
106
+
107
+ expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 13, 48));
108
+ });
109
+
110
+ // three seconds ago I did something
111
+ testSingleCase(chrono.nl, "drie seconden geleden deed ik iets", new Date(2012, 7, 10, 12, 14), (result) => {
112
+ expect(result.index).toBe(0);
113
+ expect(result.text).toBe("drie seconden geleden");
114
+ expect(result.start.get("hour")).toBe(12);
115
+ expect(result.start.get("minute")).toBe(13);
116
+ expect(result.start.get("second")).toBe(57);
117
+
118
+ expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 13, 57));
119
+ });
120
+
121
+ // 5 Days ago, we did something
122
+ testSingleCase(chrono.nl, "5 dagen geleden, hebben we iets gedaan", new Date(2012, 7, 10), (result) => {
123
+ expect(result.start).not.toBeNull();
124
+ expect(result.start.get("year")).toBe(2012);
125
+ expect(result.start.get("month")).toBe(8);
126
+ expect(result.start.get("day")).toBe(5);
127
+
128
+ expect(result.index).toBe(0);
129
+ expect(result.text).toBe("5 dagen geleden");
130
+
131
+ expect(result.start).toBeDate(new Date(2012, 8 - 1, 5));
132
+ });
133
+
134
+ // A days ago, we did something
135
+ testSingleCase(chrono.nl, "Een dag geleden, hebben we wat gedaan", new Date(2012, 7, 10), (result) => {
136
+ expect(result.start).not.toBeNull();
137
+ expect(result.start.get("year")).toBe(2012);
138
+ expect(result.start.get("month")).toBe(8);
139
+ expect(result.start.get("day")).toBe(9);
140
+
141
+ expect(result.index).toBe(0);
142
+ expect(result.text).toBe("Een dag geleden");
143
+
144
+ expect(result.start).toBeDate(new Date(2012, 8 - 1, 9));
145
+ });
146
+
147
+ // a min before
148
+ testSingleCase(chrono.nl, "een minuut geleden", new Date(2012, 7, 10, 12, 14), (result) => {
149
+ expect(result.index).toBe(0);
150
+ expect(result.text).toBe("een minuut geleden");
151
+ expect(result.start.get("hour")).toBe(12);
152
+ expect(result.start.get("minute")).toBe(13);
153
+
154
+ expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 13));
155
+ });
156
+ });
157
+
158
+ test("Test - Single Expression (Casual)", function () {
159
+ // 5 months ago, we did something
160
+ testSingleCase(chrono.nl, "5 maanden geleden, hebben we iets gedaan", new Date(2012, 8 - 1, 10), (result) => {
161
+ expect(result.start).not.toBeNull();
162
+ expect(result.start.get("year")).toBe(2012);
163
+ expect(result.start.get("month")).toBe(3);
164
+ expect(result.start.get("day")).toBe(10);
165
+
166
+ expect(result.index).toBe(0);
167
+ expect(result.text).toBe("5 maanden geleden");
168
+
169
+ expect(result.start).toBeDate(new Date(2012, 3 - 1, 10));
170
+ });
171
+
172
+ // 5 years ago, we did something
173
+ testSingleCase(chrono.nl, "5 jaar geleden, hebben we iets gedaan", new Date(2012, 8 - 1, 10), (result) => {
174
+ expect(result.start).not.toBeNull();
175
+ expect(result.start.get("year")).toBe(2007);
176
+ expect(result.start.get("month")).toBe(8);
177
+ expect(result.start.get("day")).toBe(10);
178
+
179
+ expect(result.index).toBe(0);
180
+ expect(result.text).toBe("5 jaar geleden");
181
+
182
+ expect(result.start).toBeDate(new Date(2007, 8 - 1, 10));
183
+ });
184
+
185
+ // a week ago, we did something
186
+ testSingleCase(chrono.nl, "een week geleden, hebben we iets gedaan", new Date(2012, 8 - 1, 3), (result) => {
187
+ expect(result.start).not.toBeNull();
188
+ expect(result.start.get("year")).toBe(2012);
189
+ expect(result.start.get("month")).toBe(7);
190
+ expect(result.start.get("day")).toBe(27);
191
+
192
+ expect(result.index).toBe(0);
193
+ expect(result.text).toBe("een week geleden");
194
+
195
+ expect(result.start).toBeDate(new Date(2012, 7 - 1, 27));
196
+ });
197
+
198
+ // a couple of days ago, we did something
199
+ testSingleCase(chrono.nl, "paar dagen geleden, hebben we iets gedaan", new Date(2012, 8 - 1, 2), (result) => {
200
+ expect(result.start).not.toBeNull();
201
+ expect(result.start.get("year")).toBe(2012);
202
+ expect(result.start.get("month")).toBe(7);
203
+ expect(result.start.get("day")).toBe(31);
204
+
205
+ expect(result.index).toBe(0);
206
+ expect(result.text).toBe("paar dagen geleden");
207
+
208
+ expect(result.start).toBeDate(new Date(2012, 7 - 1, 31));
209
+ });
210
+ });
211
+
212
+ test("Test - Nested time ago", function () {
213
+ // 15 hours 29 min ago
214
+ testSingleCase(chrono.nl, "15 uur 29 minuten geleden", new Date(2012, 7, 10, 22, 30), (result) => {
215
+ expect(result.text).toBe("15 uur 29 minuten geleden");
216
+ expect(result.start.get("day")).toBe(10);
217
+ expect(result.start.get("hour")).toBe(7);
218
+ expect(result.start.get("minute")).toBe(1);
219
+ });
220
+
221
+ // 1 day 21 hours ago
222
+ testSingleCase(chrono.nl, "1 dag 21 uur geleden ", new Date(2012, 7, 10, 22, 30), (result) => {
223
+ expect(result.text).toBe("1 dag 21 uur geleden");
224
+ expect(result.start.get("day")).toBe(9);
225
+ expect(result.start.get("hour")).toBe(1);
226
+ expect(result.start.get("minute")).toBe(30);
227
+ });
228
+
229
+ // 3 min 49 sec ago
230
+ testSingleCase(chrono.nl, "3 min 49 sec geleden ", new Date(2012, 7, 10, 22, 30), (result) => {
231
+ expect(result.text).toBe("3 min 49 sec geleden");
232
+ expect(result.start.get("day")).toBe(10);
233
+ expect(result.start.get("hour")).toBe(22);
234
+ expect(result.start.get("minute")).toBe(26);
235
+ expect(result.start.get("second")).toBe(11);
236
+ });
237
+ });
238
+
239
+ test("Test - Negative cases", function () {
240
+ testUnexpectedResult(chrono, "15 uur 29 min");
241
+ testUnexpectedResult(chrono, "een paar uur");
242
+ testUnexpectedResult(chrono, "5 dagen");
243
+ });
@@ -0,0 +1,130 @@
1
+ import * as chrono from "../../src";
2
+ import { testSingleCase } from "../test_util";
3
+
4
+ test("Test - Positive time units", () => {
5
+ // next 2 weeks
6
+ testSingleCase(chrono.nl, "komende 2 weken", new Date(2016, 10 - 1, 1, 12), (result, text) => {
7
+ expect(result.text).toBe(text);
8
+ expect(result.start.get("year")).toBe(2016);
9
+ expect(result.start.get("month")).toBe(10);
10
+ expect(result.start.get("day")).toBe(15);
11
+ });
12
+
13
+ // next 2 days
14
+ testSingleCase(chrono.nl, "komende 2 dagen", new Date(2016, 10 - 1, 1, 12), (result, text) => {
15
+ expect(result.text).toBe(text);
16
+ expect(result.start.get("year")).toBe(2016);
17
+ expect(result.start.get("month")).toBe(10);
18
+ expect(result.start.get("day")).toBe(3);
19
+ expect(result.start.get("hour")).toBe(12);
20
+ });
21
+
22
+ // next two years
23
+ testSingleCase(chrono.nl, "komende 2 jaar", new Date(2016, 10 - 1, 1, 12), (result, text) => {
24
+ expect(result.text).toBe(text);
25
+ expect(result.start.get("year")).toBe(2018);
26
+ expect(result.start.get("month")).toBe(10);
27
+ expect(result.start.get("day")).toBe(1);
28
+ expect(result.start.get("hour")).toBe(12);
29
+ });
30
+
31
+ // next 2 weeks 3 days
32
+ testSingleCase(chrono.nl, "komende 2 weken 3 dagen", new Date(2016, 10 - 1, 1, 12), (result, text) => {
33
+ expect(result.text).toBe(text);
34
+ expect(result.start.get("year")).toBe(2016);
35
+ expect(result.start.get("month")).toBe(10);
36
+ expect(result.start.get("day")).toBe(18);
37
+ expect(result.start.get("hour")).toBe(12);
38
+ });
39
+ });
40
+
41
+ test("Test - Negative time units", () => {
42
+ // last 2 weeks
43
+ testSingleCase(chrono.nl, "afgelopen 2 weken", new Date(2016, 10 - 1, 1, 12), (result, text) => {
44
+ expect(result.text).toBe(text);
45
+ expect(result.start.get("year")).toBe(2016);
46
+ expect(result.start.get("month")).toBe(9);
47
+ expect(result.start.get("day")).toBe(17);
48
+ expect(result.start.get("hour")).toBe(12);
49
+ });
50
+
51
+ // last two weeks
52
+ testSingleCase(chrono.nl, "afgelopen twee weken", new Date(2016, 10 - 1, 1, 12), (result, text) => {
53
+ expect(result.text).toBe(text);
54
+ expect(result.start.get("year")).toBe(2016);
55
+ expect(result.start.get("month")).toBe(9);
56
+ expect(result.start.get("day")).toBe(17);
57
+ expect(result.start.get("hour")).toBe(12);
58
+ });
59
+
60
+ // past 2 days
61
+ testSingleCase(chrono.nl, "afgelopen 2 dagen", new Date(2016, 10 - 1, 1, 12), (result, text) => {
62
+ expect(result.text).toBe(text);
63
+ expect(result.start.get("year")).toBe(2016);
64
+ expect(result.start.get("month")).toBe(9);
65
+ expect(result.start.get("day")).toBe(29);
66
+ expect(result.start.get("hour")).toBe(12);
67
+ });
68
+
69
+ // +2 months, 5 days
70
+ testSingleCase(chrono.nl, "+2 maanden 5 dagen", new Date(2016, 10 - 1, 1, 12), (result, text) => {
71
+ expect(result.text).toBe(text);
72
+ expect(result.start.get("year")).toBe(2016);
73
+ expect(result.start.get("month")).toBe(12);
74
+ expect(result.start.get("day")).toBe(6);
75
+ expect(result.start.get("hour")).toBe(12);
76
+ });
77
+ });
78
+
79
+ test("Test - Plus '+' sign", () => {
80
+ //+15 minutes
81
+ testSingleCase(chrono.nl.casual, "+15 minuten", new Date(2012, 7 - 1, 10, 12, 14), (result, text) => {
82
+ expect(result.text).toBe(text);
83
+ expect(result.start.get("hour")).toBe(12);
84
+ expect(result.start.get("minute")).toBe(29);
85
+
86
+ expect(result.start).toBeDate(new Date(2012, 7 - 1, 10, 12, 29));
87
+ });
88
+
89
+ testSingleCase(chrono.nl.casual, "+15min", new Date(2012, 7 - 1, 10, 12, 14), (result, text) => {
90
+ expect(result.text).toBe(text);
91
+ expect(result.start.get("hour")).toBe(12);
92
+ expect(result.start.get("minute")).toBe(29);
93
+
94
+ expect(result.start).toBeDate(new Date(2012, 7 - 1, 10, 12, 29));
95
+ });
96
+
97
+ // +1 day 2 hour
98
+ testSingleCase(chrono.nl.casual, "+1 dag 2 uur", new Date(2012, 7 - 1, 10, 12, 14), (result, text) => {
99
+ expect(result.text).toBe(text);
100
+ expect(result.start.get("day")).toBe(11);
101
+ expect(result.start.get("hour")).toBe(14);
102
+ expect(result.start.get("minute")).toBe(14);
103
+
104
+ expect(result.start).toBeDate(new Date(2012, 7 - 1, 11, 14, 14));
105
+ });
106
+ });
107
+
108
+ test("Test - Minus '-' sign", () => {
109
+ // -3y
110
+ testSingleCase(chrono.nl.casual, "-3jr", new Date(2015, 7 - 1, 10, 12, 14), (result, text) => {
111
+ expect(result.text).toBe(text);
112
+ expect(result.start.get("year")).toBe(2012);
113
+ expect(result.start.get("month")).toBe(7);
114
+ expect(result.start.get("day")).toBe(10);
115
+ expect(result.start.get("hour")).toBe(12);
116
+ expect(result.start.get("minute")).toBe(14);
117
+
118
+ expect(result.start).toBeDate(new Date(2012, 7 - 1, 10, 12, 14));
119
+ });
120
+
121
+ // -2hr5min
122
+ testSingleCase(chrono.nl, "-2u5min", new Date(2016, 10 - 1, 1, 12), (result, text) => {
123
+ expect(result.text).toBe(text);
124
+ expect(result.start.get("year")).toBe(2016);
125
+ expect(result.start.get("month")).toBe(10);
126
+ expect(result.start.get("day")).toBe(1);
127
+ expect(result.start.get("hour")).toBe(9);
128
+ expect(result.start.get("minute")).toBe(55);
129
+ });
130
+ });