chrono-node 2.9.2 → 2.10.0

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 (142) hide show
  1. package/dist/cjs/results.js +15 -9
  2. package/dist/cjs/results.js.map +1 -1
  3. package/dist/esm/results.js +14 -9
  4. package/dist/esm/results.js.map +1 -1
  5. package/package.json +5 -1
  6. package/src/results.ts +40 -9
  7. package/test/calculation_duration.test.ts +0 -165
  8. package/test/calculation_weekdays.test.ts +0 -133
  9. package/test/de/de_casual.test.ts +0 -336
  10. package/test/de/de_dash.test.ts +0 -32
  11. package/test/de/de_month_name_little_endian.test.ts +0 -273
  12. package/test/de/de_time_exp.test.ts +0 -223
  13. package/test/de/de_time_units_casual_relative.test.ts +0 -120
  14. package/test/de/de_time_units_within.test.ts +0 -119
  15. package/test/de/de_weekday.test.ts +0 -158
  16. package/test/de/de_year.test.ts +0 -147
  17. package/test/debugging.test.ts +0 -17
  18. package/test/en/en.test.ts +0 -191
  19. package/test/en/en_casual.test.ts +0 -425
  20. package/test/en/en_inter_std.test.ts +0 -118
  21. package/test/en/en_merging_relative_dates.test.ts +0 -50
  22. package/test/en/en_month.test.ts +0 -339
  23. package/test/en/en_month_name_little_endian.test.ts +0 -448
  24. package/test/en/en_month_name_middle_endian.test.ts +0 -386
  25. package/test/en/en_performance.test.ts +0 -26
  26. package/test/en/en_relative.test.ts +0 -393
  27. package/test/en/en_slash.test.ts +0 -284
  28. package/test/en/en_time_exp.test.ts +0 -535
  29. package/test/en/en_time_units_ago.test.ts +0 -357
  30. package/test/en/en_time_units_casual_relative.test.ts +0 -186
  31. package/test/en/en_time_units_later.test.ts +0 -361
  32. package/test/en/en_time_units_within.test.ts +0 -417
  33. package/test/en/en_timezone_exp.test.ts +0 -410
  34. package/test/en/en_weekday.test.ts +0 -573
  35. package/test/en/en_year.test.ts +0 -138
  36. package/test/en/en_year_month_day.test.ts +0 -101
  37. package/test/en/negative_cases.test.ts +0 -99
  38. package/test/es/es_casual.test.ts +0 -175
  39. package/test/es/es_month_name_little_endian.test.ts +0 -217
  40. package/test/es/es_slash.test.ts +0 -26
  41. package/test/es/es_time_exp.test.ts +0 -175
  42. package/test/es/es_time_units_within.test.ts +0 -119
  43. package/test/fi/fi_casual.test.ts +0 -99
  44. package/test/fi/fi_casual_time.test.ts +0 -56
  45. package/test/fi/fi_month_name_little_endian.test.ts +0 -50
  46. package/test/fi/fi_time_exp.test.ts +0 -39
  47. package/test/fi/fi_time_units_ago.test.ts +0 -93
  48. package/test/fi/fi_time_units_casual_relative.test.ts +0 -117
  49. package/test/fi/fi_time_units_within.test.ts +0 -74
  50. package/test/fi/fi_weekday.test.ts +0 -90
  51. package/test/fr/fr_casual.test.ts +0 -314
  52. package/test/fr/fr_little_endian.test.ts +0 -320
  53. package/test/fr/fr_slash.test.ts +0 -49
  54. package/test/fr/fr_time_exp.test.ts +0 -588
  55. package/test/fr/fr_time_units_ago.test.ts +0 -103
  56. package/test/fr/fr_time_units_casual_relative.test.ts +0 -114
  57. package/test/fr/fr_time_units_within.test.ts +0 -129
  58. package/test/fr/fr_weekday.test.ts +0 -130
  59. package/test/it/it_casual.test.ts +0 -81
  60. package/test/it/it_month_name_little_endian.test.ts +0 -28
  61. package/test/it/it_month_name_middle_endian.test.ts +0 -39
  62. package/test/it/it_time_exp.test.ts +0 -84
  63. package/test/it/it_weekday.test.ts +0 -37
  64. package/test/it/it_year_month_day.test.ts +0 -41
  65. package/test/ja/ja_casual.test.ts +0 -73
  66. package/test/ja/ja_slash_date_format.test.ts +0 -60
  67. package/test/ja/ja_standard.test.ts +0 -235
  68. package/test/ja/ja_time_exp.test.ts +0 -305
  69. package/test/ja/ja_weekday.test.ts +0 -183
  70. package/test/nl/nl_casual.test.ts +0 -408
  71. package/test/nl/nl_month.test.ts +0 -205
  72. package/test/nl/nl_month_name_little_endian.test.ts +0 -358
  73. package/test/nl/nl_relative.test.ts +0 -242
  74. package/test/nl/nl_slash.test.ts +0 -206
  75. package/test/nl/nl_time_exp.test.ts +0 -79
  76. package/test/nl/nl_time_units_ago.test.ts +0 -243
  77. package/test/nl/nl_time_units_casual_relative.test.ts +0 -130
  78. package/test/nl/nl_time_units_later.test.ts +0 -250
  79. package/test/nl/nl_time_units_within.test.ts +0 -225
  80. package/test/nl/nl_weekday.test.ts +0 -216
  81. package/test/pt/pt_casual.test.ts +0 -175
  82. package/test/pt/pt_month_name_little_endian.test.ts +0 -217
  83. package/test/pt/pt_slash.test.ts +0 -26
  84. package/test/pt/pt_time_exp.test.ts +0 -175
  85. package/test/result.test.ts +0 -283
  86. package/test/ru/ru_casual.test.ts +0 -159
  87. package/test/ru/ru_month.test.ts +0 -70
  88. package/test/ru/ru_month_name_little_endian.test.ts +0 -145
  89. package/test/ru/ru_relative.test.ts +0 -107
  90. package/test/ru/ru_time_exp.test.ts +0 -111
  91. package/test/ru/ru_time_units_ago.test.ts +0 -48
  92. package/test/ru/ru_time_units_casual_relative.test.ts +0 -190
  93. package/test/ru/ru_time_units_within.test.ts +0 -16
  94. package/test/ru/ru_weekday.test.ts +0 -52
  95. package/test/sv/sv_casual.test.ts +0 -87
  96. package/test/sv/sv_month_name_little_endian.test.ts +0 -48
  97. package/test/sv/sv_time_units_casual_relative.test.ts +0 -143
  98. package/test/sv/sv_weekday.test.ts +0 -68
  99. package/test/system.test.ts +0 -247
  100. package/test/system_timezone.test.ts +0 -284
  101. package/test/test_util.ts +0 -135
  102. package/test/uk/uk_casual.test.ts +0 -153
  103. package/test/uk/uk_month.test.ts +0 -70
  104. package/test/uk/uk_month_name_little_endian.test.ts +0 -148
  105. package/test/uk/uk_relative.test.ts +0 -107
  106. package/test/uk/uk_time_exp.test.ts +0 -111
  107. package/test/uk/uk_time_units_ago.test.ts +0 -48
  108. package/test/uk/uk_time_units_casual_relative.test.ts +0 -142
  109. package/test/uk/uk_time_units_within.test.ts +0 -23
  110. package/test/uk/uk_weekday.test.ts +0 -52
  111. package/test/vi/vi_casual.test.ts +0 -84
  112. package/test/vi/vi_casual_time.test.ts +0 -77
  113. package/test/vi/vi_date_range.test.ts +0 -61
  114. package/test/vi/vi_forward_date.test.ts +0 -45
  115. package/test/vi/vi_month_year.test.ts +0 -40
  116. package/test/vi/vi_negative_cases.test.ts +0 -60
  117. package/test/vi/vi_slash.test.ts +0 -36
  118. package/test/vi/vi_standard.test.ts +0 -86
  119. package/test/vi/vi_strict.test.ts +0 -67
  120. package/test/vi/vi_time_exp.test.ts +0 -99
  121. package/test/vi/vi_time_units_ago.test.ts +0 -56
  122. package/test/vi/vi_time_units_casual_relative.test.ts +0 -56
  123. package/test/vi/vi_time_units_later.test.ts +0 -43
  124. package/test/vi/vi_time_units_within.test.ts +0 -24
  125. package/test/vi/vi_weekday.test.ts +0 -77
  126. package/test/vi/vi_year.test.ts +0 -42
  127. package/test/zh/hans/zh_hans_ago.test.ts +0 -58
  128. package/test/zh/hans/zh_hans_casual.test.ts +0 -242
  129. package/test/zh/hans/zh_hans_date.test.ts +0 -116
  130. package/test/zh/hans/zh_hans_deadline.test.ts +0 -175
  131. package/test/zh/hans/zh_hans_time_exp.test.ts +0 -508
  132. package/test/zh/hans/zh_hans_weekday.test.ts +0 -219
  133. package/test/zh/hant/zh_hant_ago.test.ts +0 -58
  134. package/test/zh/hant/zh_hant_casual.test.ts +0 -260
  135. package/test/zh/hant/zh_hant_date.test.ts +0 -116
  136. package/test/zh/hant/zh_hant_deadline.test.ts +0 -136
  137. package/test/zh/hant/zh_hant_time_exp.test.ts +0 -226
  138. package/test/zh/hant/zh_hant_weekday.test.ts +0 -175
  139. package/test/zh/zh.test.ts +0 -36
  140. package/tsconfig.build.esm.json +0 -8
  141. package/tsconfig.build.json +0 -10
  142. package/tsconfig.json +0 -29
@@ -1,84 +0,0 @@
1
- import * as chrono from "../../src/";
2
- import { testSingleCase } from "../test_util";
3
-
4
- test("Test - h\u00f4m nay (today)", () => {
5
- testSingleCase(chrono.vi, "Cu\u1ed9c h\u1ecdn h\u00f4m nay.", new Date(2012, 7, 10, 12), (r) => {
6
- expect(r.index).toBe(9);
7
- expect(r.text).toBe("h\u00f4m nay");
8
- expect(r.start.get("year")).toBe(2012);
9
- expect(r.start.get("month")).toBe(8);
10
- expect(r.start.get("day")).toBe(10);
11
- expect(r.start).toBeDate(new Date(2012, 7, 10, 12));
12
- });
13
- });
14
-
15
- test("Test - h\u00f4m qua (yesterday)", () => {
16
- testSingleCase(chrono.vi, "H\u1ed9i ngh\u1ecb h\u00f4m qua.", new Date(2012, 7, 10, 12), (r) => {
17
- expect(r.index).toBe(9);
18
- expect(r.text).toBe("h\u00f4m qua");
19
- expect(r.start.get("year")).toBe(2012);
20
- expect(r.start.get("month")).toBe(8);
21
- expect(r.start.get("day")).toBe(9);
22
- expect(r.start).toBeDate(new Date(2012, 7, 9, 12));
23
- });
24
-
25
- testSingleCase(chrono.vi, "h\u00f4m qua", new Date(2012, 7, 1, 12), (r) => {
26
- expect(r.start.get("month")).toBe(7); // July — crosses month boundary
27
- expect(r.start.get("day")).toBe(31);
28
- });
29
- });
30
-
31
- test("Test - ng\u00e0y mai (tomorrow)", () => {
32
- testSingleCase(chrono.vi, "L\u1ecbch ng\u00e0y mai.", new Date(2012, 7, 10, 12), (r) => {
33
- expect(r.index).toBe(5);
34
- expect(r.text).toBe("ng\u00e0y mai");
35
- expect(r.start.get("day")).toBe(11);
36
- expect(r.start.get("month")).toBe(8);
37
- expect(r.start).toBeDate(new Date(2012, 7, 11, 12));
38
- });
39
-
40
- testSingleCase(chrono.vi, "ng\u00e0y mai", new Date(2012, 7, 31, 12), (r) => {
41
- expect(r.start.get("month")).toBe(9); // Sept — crosses month boundary
42
- expect(r.start.get("day")).toBe(1);
43
- });
44
- });
45
-
46
- test("Test - ng\u00e0y kia (day after tomorrow)", () => {
47
- testSingleCase(chrono.vi, "ng\u00e0y kia", new Date(2012, 7, 10, 12), (r) => {
48
- expect(r.text).toBe("ng\u00e0y kia");
49
- expect(r.start.get("day")).toBe(12);
50
- });
51
- });
52
-
53
- test("Test - b\u00e2y gi\u1edd / l\u00fac n\u00e0y (now)", () => {
54
- testSingleCase(chrono.vi, "b\u00e2y gi\u1edd", new Date(2012, 7, 10, 8, 9, 10, 11), (r) => {
55
- expect(r.start.get("year")).toBe(2012);
56
- expect(r.start.get("month")).toBe(8);
57
- expect(r.start.get("day")).toBe(10);
58
- expect(r.start.get("hour")).toBe(8);
59
- expect(r.start.get("minute")).toBe(9);
60
- expect(r.start.get("second")).toBe(10);
61
- expect(r.start).toBeDate(new Date(2012, 7, 10, 8, 9, 10, 11));
62
- });
63
-
64
- testSingleCase(chrono.vi, "l\u00fac n\u00e0y", new Date(2012, 7, 10, 8, 9, 10, 11), (r) => {
65
- expect(r.start.get("hour")).toBe(8);
66
- });
67
- });
68
-
69
- test("Test - hôm kia (day before yesterday, -2)", () => {
70
- testSingleCase(chrono.vi, "hôm kia", new Date(2012, 7, 10, 12), (r) => {
71
- expect(r.start.get("year")).toBe(2012);
72
- expect(r.start.get("month")).toBe(8);
73
- expect(r.start.get("day")).toBe(8); // 10 - 2
74
- });
75
- });
76
-
77
- test("Test - isCertain: casual date sets day/month/year certain, hour not", () => {
78
- testSingleCase(chrono.vi, "hôm nay", new Date(2012, 7, 10, 12), (r) => {
79
- expect(r.start.isCertain("day")).toBe(true);
80
- expect(r.start.isCertain("month")).toBe(true);
81
- expect(r.start.isCertain("year")).toBe(true);
82
- expect(r.start.isCertain("hour")).toBe(false);
83
- });
84
- });
@@ -1,77 +0,0 @@
1
- import * as chrono from "../../src/";
2
- import { testSingleCase } from "../test_util";
3
-
4
- const REF = new Date(2012, 7, 10, 12); // 2012-08-10 noon
5
-
6
- test("Test - sáng (morning, AM)", () => {
7
- // "buổi sáng" is a time-of-day modifier; test it with an explicit time expression
8
- testSingleCase(chrono.vi, "7 giờ sáng", REF, (r) => {
9
- expect(r.start.get("hour")).toBe(7);
10
- expect(r.start.get("meridiem")).toBe(0); // AM
11
- });
12
- // standalone "sáng" sets implied hour=9, AM
13
- testSingleCase(chrono.vi, "hôm nay buổi sáng", new Date(2012, 7, 10, 6), (r) => {
14
- expect(r.start.get("hour")).toBe(9);
15
- expect(r.start.get("meridiem")).toBe(0); // AM
16
- });
17
- });
18
-
19
- test("Test - trưa (noon, PM)", () => {
20
- testSingleCase(chrono.vi, "buổi trưa", REF, (r) => {
21
- expect(r.start.get("hour")).toBe(12);
22
- expect(r.start.get("meridiem")).toBe(1); // PM — noon is 12:00 PM
23
- });
24
- });
25
-
26
- test("Test - chiều (afternoon, PM)", () => {
27
- testSingleCase(chrono.vi, "buổi chiều", REF, (r) => {
28
- expect(r.start.get("hour")).toBe(15);
29
- expect(r.start.get("meridiem")).toBe(1); // PM
30
- });
31
- });
32
-
33
- test("Test - tối (evening, PM)", () => {
34
- testSingleCase(chrono.vi, "buổi tối", REF, (r) => {
35
- expect(r.start.get("hour")).toBe(19);
36
- expect(r.start.get("meridiem")).toBe(1); // PM
37
- });
38
- });
39
-
40
- test("Test - đêm (late night, PM)", () => {
41
- testSingleCase(chrono.vi, "buổi đêm", REF, (r) => {
42
- expect(r.start.get("hour")).toBe(22);
43
- expect(r.start.get("meridiem")).toBe(1); // PM
44
- });
45
-
46
- // Standalone "đêm" without "buổi" prefix — works after removing \b from pattern
47
- testSingleCase(chrono.vi, "đêm", REF, (r) => {
48
- expect(r.start.get("hour")).toBe(22);
49
- expect(r.start.get("meridiem")).toBe(1); // PM
50
- });
51
- });
52
-
53
- test("Test - nửa đêm (midnight, AM)", () => {
54
- testSingleCase(chrono.vi, "nửa đêm", REF, (r) => {
55
- expect(r.start.get("hour")).toBe(0);
56
- expect(r.start.get("meridiem")).toBe(0); // AM
57
- });
58
- });
59
-
60
- test("Test - bình minh / sáng sớm (dawn)", () => {
61
- testSingleCase(chrono.vi, "bình minh", REF, (r) => {
62
- expect(r.start.get("hour")).toBe(6);
63
- expect(r.start.get("meridiem")).toBe(0); // AM
64
- });
65
-
66
- testSingleCase(chrono.vi, "sáng sớm", REF, (r) => {
67
- expect(r.start.get("hour")).toBe(6);
68
- expect(r.start.get("meridiem")).toBe(0); // AM
69
- });
70
- });
71
-
72
- test("Test - time keyword merges with date", () => {
73
- testSingleCase(chrono.vi, "hôm nay buổi chiều", REF, (r) => {
74
- expect(r.start.get("day")).toBe(10);
75
- expect(r.start.get("hour")).toBe(15);
76
- });
77
- });
@@ -1,61 +0,0 @@
1
- import * as chrono from "../../src/";
2
- import { testSingleCase } from "../test_util";
3
-
4
- const REF = new Date(2012, 7, 10, 12); // 2012-08-10 noon
5
-
6
- test("Test - từ ngày X đến ngày Y (đến connector)", () => {
7
- testSingleCase(chrono.vi, "từ ngày 5 tháng 8 đến ngày 10 tháng 8 năm 2012", REF, (r) => {
8
- expect(r.start.get("day")).toBe(5);
9
- expect(r.start.get("month")).toBe(8);
10
- expect(r.start.get("year")).toBe(2012);
11
-
12
- expect(r.end).not.toBeNull();
13
- expect(r.end.get("day")).toBe(10);
14
- expect(r.end.get("month")).toBe(8);
15
- expect(r.end.get("year")).toBe(2012);
16
- });
17
- });
18
-
19
- test("Test - em dash separator (–)", () => {
20
- testSingleCase(chrono.vi, "ngày 1 tháng 4 – ngày 30 tháng 4 năm 2000", REF, (r) => {
21
- expect(r.start.get("day")).toBe(1);
22
- expect(r.start.get("month")).toBe(4);
23
-
24
- expect(r.end).not.toBeNull();
25
- expect(r.end.get("day")).toBe(30);
26
- expect(r.end.get("month")).toBe(4);
27
- expect(r.end.get("year")).toBe(2000);
28
- });
29
- });
30
-
31
- test("Test - hyphen separator (-)", () => {
32
- testSingleCase(chrono.vi, "ngày 3 tháng 9 - ngày 5 tháng 9 năm 1945", REF, (r) => {
33
- expect(r.start.get("day")).toBe(3);
34
- expect(r.start.get("month")).toBe(9);
35
- expect(r.start.get("year")).toBe(1945);
36
-
37
- expect(r.end).not.toBeNull();
38
- expect(r.end.get("day")).toBe(5);
39
- expect(r.end.get("month")).toBe(9);
40
- expect(r.end.get("year")).toBe(1945);
41
- });
42
- });
43
-
44
- test("Test - tới connector", () => {
45
- testSingleCase(chrono.vi, "tháng 3 tới tháng 5 năm 1975", REF, (r) => {
46
- expect(r.start.get("month")).toBe(3);
47
-
48
- expect(r.end).not.toBeNull();
49
- expect(r.end.get("month")).toBe(5);
50
- expect(r.end.get("year")).toBe(1975);
51
- });
52
- });
53
-
54
- test("Test - start is before end", () => {
55
- testSingleCase(chrono.vi, "ngày 1 tháng 1 đến ngày 31 tháng 12 năm 2020", REF, (r) => {
56
- expect(r.end).not.toBeNull();
57
- const startDate = r.start.date();
58
- const endDate = r.end.date();
59
- expect(startDate.getTime()).toBeLessThan(endDate.getTime());
60
- });
61
- });
@@ -1,45 +0,0 @@
1
- import * as chrono from "../../src/";
2
- import { testSingleCase } from "../test_util";
3
-
4
- test("Test - forwardDate: time-only rolls to next day when ref is past", () => {
5
- // "7 gi\u1edd s\u00e1ng" = 7:00 AM; ref is 8:00 AM same day \u2192 next day
6
- testSingleCase(chrono.vi, "7 gi\u1edd s\u00e1ng", new Date(2012, 7, 10, 8, 0), { forwardDate: true }, (r) => {
7
- expect(r.start.get("day")).toBe(11);
8
- expect(r.start.get("hour")).toBe(7);
9
- });
10
- });
11
-
12
- test("Test - forwardDate: weekday rolls to next occurrence", () => {
13
- // REF = Tuesday Aug 14, 2012; "th\u1ee9 hai" (Monday) last was Aug 13 \u2192 next Monday = Aug 20
14
- testSingleCase(chrono.vi, "th\u1ee9 hai", new Date(2012, 7, 14, 12), { forwardDate: true }, (r) => {
15
- expect(r.start.get("weekday")).toBe(1);
16
- expect(r.start.get("day")).toBe(20);
17
- expect(r.start.get("month")).toBe(8);
18
- });
19
- });
20
-
21
- test("Test - forwardDate: slash date without year rolls to next year", () => {
22
- // "15/3" = March 15; ref is Aug 10 (past March) \u2192 year 2013
23
- testSingleCase(chrono.vi, "15/3", new Date(2012, 7, 10, 12), { forwardDate: true }, (r) => {
24
- expect(r.start.get("day")).toBe(15);
25
- expect(r.start.get("month")).toBe(3);
26
- expect(r.start.get("year")).toBe(2013);
27
- });
28
- });
29
-
30
- test("Test - forwardDate: same weekday as ref stays on same day", () => {
31
- // REF = Thursday Aug 9, 2012; "thứ năm" (Thursday) = same day → stays on Aug 9 (not past)
32
- testSingleCase(chrono.vi, "th\u1ee9 n\u0103m", new Date(2012, 7, 9, 12), { forwardDate: true }, (r) => {
33
- expect(r.start.get("weekday")).toBe(4);
34
- expect(r.start.get("day")).toBe(9);
35
- expect(r.start.get("month")).toBe(8);
36
- });
37
- });
38
-
39
- test("Test - forwardDate: month without year rolls to next year", () => {
40
- // "th\u00e1ng 3" = March; ref is Aug 10 \u2192 next March = 2013
41
- testSingleCase(chrono.vi, "th\u00e1ng 3", new Date(2012, 7, 10, 12), { forwardDate: true }, (r) => {
42
- expect(r.start.get("month")).toBe(3);
43
- expect(r.start.get("year")).toBe(2013);
44
- });
45
- });
@@ -1,40 +0,0 @@
1
- import * as chrono from "../../src/";
2
- import { testSingleCase, testUnexpectedResult } from "../test_util";
3
-
4
- const REF = new Date(2012, 7, 10, 12); // 2012-08-10
5
-
6
- test("Test - tháng M năm YYYY", () => {
7
- testSingleCase(chrono.vi, "tháng 4 năm 1975", REF, (r) => {
8
- expect(r.text).toBe("tháng 4 năm 1975");
9
- expect(r.start.get("month")).toBe(4);
10
- expect(r.start.get("year")).toBe(1975);
11
- expect(r.start.isCertain("month")).toBe(true);
12
- expect(r.start.isCertain("year")).toBe(true);
13
- expect(r.start.isCertain("day")).toBe(false); // day is implied
14
- });
15
-
16
- testSingleCase(chrono.vi, "tháng 1 năm 1863", REF, (r) => {
17
- expect(r.start.get("month")).toBe(1);
18
- expect(r.start.get("year")).toBe(1863);
19
- });
20
- });
21
-
22
- test("Test - tháng M/YYYY (slash separator)", () => {
23
- testSingleCase(chrono.vi, "tháng 3/1975", REF, (r) => {
24
- expect(r.start.get("month")).toBe(3);
25
- expect(r.start.get("year")).toBe(1975);
26
- });
27
- });
28
-
29
- test("Test - tháng M only (implies current year)", () => {
30
- testSingleCase(chrono.vi, "tháng 3", REF, (r) => {
31
- expect(r.start.get("month")).toBe(3);
32
- expect(r.start.isCertain("year")).toBe(false); // year implied from reference
33
- expect(r.start.get("year")).toBe(2012);
34
- });
35
- });
36
-
37
- test("Test - negative: month > 12 rejected", () => {
38
- testUnexpectedResult(chrono.vi, "tháng 13", REF);
39
- testUnexpectedResult(chrono.vi, "tháng 0", REF);
40
- });
@@ -1,60 +0,0 @@
1
- import * as chrono from "../../src/";
2
- import { testUnexpectedResult } from "../test_util";
3
-
4
- const REF = new Date(2012, 7, 10, 12); // 2012-08-10
5
-
6
- test("Test - invalid day rejected", () => {
7
- testUnexpectedResult(chrono.vi, "ngày 0 tháng 4 năm 2000", REF);
8
- // "ngày 32 tháng 4" — VIStandardParser skips "ngày 3" and sub-matches "2 tháng 4"
9
- // (day bounds are not pre-validated in the regex). This is known parser behaviour.
10
- });
11
-
12
- test("Test - invalid month rejected", () => {
13
- testUnexpectedResult(chrono.vi, "tháng 0", REF);
14
- testUnexpectedResult(chrono.vi, "tháng 13", REF);
15
- testUnexpectedResult(chrono.vi, "ngày 1 tháng 13", REF);
16
- });
17
-
18
- test("Test - invalid slash date rejected", () => {
19
- testUnexpectedResult(chrono.vi, "32/13/2020", REF);
20
- });
21
-
22
- test("Test - bare 4-digit number without năm prefix is not a year", () => {
23
- testUnexpectedResult(chrono.vi, "Có 1975 người tham gia.", REF);
24
- });
25
-
26
- test("Test - phone number not parsed as date", () => {
27
- testUnexpectedResult(chrono.vi, "0912345678", REF);
28
- });
29
-
30
- test("Test - bare numbers not parsed as dates", () => {
31
- testUnexpectedResult(chrono.vi, "3", REF);
32
- testUnexpectedResult(chrono.vi, "11", REF);
33
- testUnexpectedResult(chrono.vi, "0.5", REF);
34
- testUnexpectedResult(chrono.vi, "35.49", REF);
35
- testUnexpectedResult(chrono.vi, "12.53%", REF);
36
- });
37
-
38
- test("Test - currency and measurement not parsed as dates", () => {
39
- testUnexpectedResult(chrono.vi, "$1,194.09", REF);
40
- testUnexpectedResult(chrono.vi, "at 6.5 kilograms", REF);
41
- });
42
-
43
- test("Test - version numbers not parsed as dates", () => {
44
- testUnexpectedResult(chrono.vi, "1.1.3", REF);
45
- testUnexpectedResult(chrono.vi, "1.10.30", REF);
46
- });
47
-
48
- test("Test - hyphenated number ranges not parsed as dates", () => {
49
- testUnexpectedResult(chrono.vi, "1-2", REF);
50
- testUnexpectedResult(chrono.vi, "1-2-3", REF);
51
- });
52
-
53
- test("Test - URL-encoded strings not parsed as dates", () => {
54
- testUnexpectedResult(chrono.vi, "%e7%b7%8a", REF);
55
- });
56
-
57
- test("Test - impossible minute rejected", () => {
58
- testUnexpectedResult(chrono.vi, "7 giờ 61 phút", REF);
59
- testUnexpectedResult(chrono.vi, "7 giờ 99 phút", REF);
60
- });
@@ -1,36 +0,0 @@
1
- import * as chrono from "../../src/";
2
- import { testSingleCase } from "../test_util";
3
-
4
- const REF = new Date(2012, 7, 10, 12);
5
-
6
- test("Test - DD/MM/YYYY (little-endian)", () => {
7
- testSingleCase(chrono.vi, "Ng\u00e0y 30/04/1975.", REF, (r) => {
8
- expect(r.index).toBe(5);
9
- expect(r.start.get("day")).toBe(30);
10
- expect(r.start.get("month")).toBe(4);
11
- expect(r.start.get("year")).toBe(1975);
12
- });
13
-
14
- testSingleCase(chrono.vi, "H\u1ed9i ngh\u1ecb 01/01/1954", REF, (r) => {
15
- expect(r.index).toBe(9);
16
- expect(r.start.get("day")).toBe(1);
17
- expect(r.start.get("month")).toBe(1);
18
- expect(r.start.get("year")).toBe(1954);
19
- });
20
- });
21
-
22
- test("Test - D/M/YYYY (no zero padding)", () => {
23
- testSingleCase(chrono.vi, "3/5/1968", REF, (r) => {
24
- expect(r.start.get("day")).toBe(3);
25
- expect(r.start.get("month")).toBe(5);
26
- expect(r.start.get("year")).toBe(1968);
27
- });
28
- });
29
-
30
- test("Test - ISO 2024-03-15 also parses", () => {
31
- testSingleCase(chrono.vi, "Ng\u00e0y 2024-03-15 l\u00e0 quan tr\u1ecdng.", REF, (r) => {
32
- expect(r.start.get("year")).toBe(2024);
33
- expect(r.start.get("month")).toBe(3);
34
- expect(r.start.get("day")).toBe(15);
35
- });
36
- });
@@ -1,86 +0,0 @@
1
- import * as chrono from "../../src/";
2
- import { testSingleCase, testUnexpectedResult } from "../test_util";
3
-
4
- const REF = new Date(2012, 7, 10, 12, 0, 0); // 2012-08-10
5
-
6
- test("Test - ng\u00e0y D th\u00e1ng M n\u0103m YYYY (full with ng\u00e0y prefix)", () => {
7
- testSingleCase(
8
- chrono.vi,
9
- "Ng\u00e0y 30 th\u00e1ng 4 n\u0103m 1975 l\u00e0 ng\u00e0y gi\u1ea3i ph\u00f3ng.",
10
- REF,
11
- (r) => {
12
- expect(r.start.get("year")).toBe(1975);
13
- expect(r.start.get("month")).toBe(4);
14
- expect(r.start.get("day")).toBe(30);
15
- expect(r.start.isCertain("year")).toBe(true);
16
- expect(r.start.isCertain("month")).toBe(true);
17
- expect(r.start.isCertain("day")).toBe(true);
18
- }
19
- );
20
-
21
- testSingleCase(
22
- chrono.vi,
23
- "Hi\u1ec7p \u0111\u1ecbnh \u0111\u01b0\u1ee3c k\u00fd ng\u00e0y 27 th\u00e1ng 1 n\u0103m 1973.",
24
- REF,
25
- (r) => {
26
- expect(r.text).toBe("ng\u00e0y 27 th\u00e1ng 1 n\u0103m 1973");
27
- expect(r.start.get("year")).toBe(1973);
28
- expect(r.start.get("month")).toBe(1);
29
- expect(r.start.get("day")).toBe(27);
30
- }
31
- );
32
-
33
- testSingleCase(chrono.vi, "ng\u00e0y 2 th\u00e1ng 9 n\u0103m 1945", REF, (r) => {
34
- expect(r.start.get("year")).toBe(1945);
35
- expect(r.start.get("month")).toBe(9);
36
- expect(r.start.get("day")).toBe(2);
37
- });
38
- });
39
-
40
- test("Test - D th\u00e1ng M n\u0103m YYYY (no ng\u00e0y prefix)", () => {
41
- testSingleCase(
42
- chrono.vi,
43
- "7 th\u00e1ng 5 n\u0103m 1954 l\u00e0 ng\u00e0y ch\u1ea5m d\u1ee9t tr\u1eadn \u0110i\u1ec7n Bi\u00ean Ph\u1ee7.",
44
- REF,
45
- (r) => {
46
- expect(r.start.get("day")).toBe(7);
47
- expect(r.start.get("month")).toBe(5);
48
- expect(r.start.get("year")).toBe(1954);
49
- }
50
- );
51
-
52
- testSingleCase(chrono.vi, "1 th\u00e1ng 1 n\u0103m 1863", REF, (r) => {
53
- expect(r.start.get("day")).toBe(1);
54
- expect(r.start.get("month")).toBe(1);
55
- expect(r.start.get("year")).toBe(1863);
56
- });
57
- });
58
-
59
- test("Test - Date without year implies closest year", () => {
60
- testSingleCase(chrono.vi, "ng\u00e0y 15 th\u00e1ng 3", REF, (r) => {
61
- expect(r.start.get("day")).toBe(15);
62
- expect(r.start.get("month")).toBe(3);
63
- expect(r.start.isCertain("year")).toBe(false);
64
- expect(r.start.isCertain("day")).toBe(true);
65
- expect(r.start.isCertain("month")).toBe(true);
66
- });
67
- });
68
-
69
- test("Test - index position is correct", () => {
70
- testSingleCase(
71
- chrono.vi,
72
- "S\u1ef1 ki\u1ec7n ng\u00e0y 30 th\u00e1ng 4 n\u0103m 1975 quan tr\u1ecdng.",
73
- REF,
74
- (r) => {
75
- expect(r.index).toBe(8);
76
- expect(r.text).toBe("ng\u00e0y 30 th\u00e1ng 4 n\u0103m 1975");
77
- expect(r.start.get("year")).toBe(1975);
78
- }
79
- );
80
- });
81
-
82
- test("Test - negative: invalid month rejected", () => {
83
- // tháng 13 is rejected; without a year, no other parser fires
84
- testUnexpectedResult(chrono.vi, "ngày 1 tháng 13", REF);
85
- // "ngày 32 tháng 4" partially matches as "2 tháng 4" — day bounds enforced by VIStandardParser (day > 31)
86
- });
@@ -1,67 +0,0 @@
1
- import * as chrono from "../../src/";
2
- import { testSingleCase, testUnexpectedResult } from "../test_util";
3
-
4
- const REF = new Date(2012, 7, 10, 12); // 2012-08-10
5
-
6
- test("Test - Strict rejects casual date expressions", () => {
7
- testUnexpectedResult(chrono.vi.strict, "h\u00f4m nay", REF);
8
- testUnexpectedResult(chrono.vi.strict, "h\u00f4m qua", REF);
9
- testUnexpectedResult(chrono.vi.strict, "ng\u00e0y mai", REF);
10
- testUnexpectedResult(chrono.vi.strict, "ng\u00e0y kia", REF);
11
- });
12
-
13
- test("Test - Strict rejects casual time-of-day expressions", () => {
14
- testUnexpectedResult(chrono.vi.strict, "bu\u1ed5i s\u00e1ng", REF);
15
- testUnexpectedResult(chrono.vi.strict, "bu\u1ed5i tr\u01b0a", REF);
16
- testUnexpectedResult(chrono.vi.strict, "bu\u1ed5i chi\u1ec1u", REF);
17
- testUnexpectedResult(chrono.vi.strict, "bu\u1ed5i t\u1ed1i", REF);
18
- });
19
-
20
- test("Test - Strict rejects casual relative expressions", () => {
21
- testUnexpectedResult(chrono.vi.strict, "tu\u1ea7n n\u00e0y", REF);
22
- testUnexpectedResult(chrono.vi.strict, "th\u00e1ng tr\u01b0\u1edbc", REF);
23
- testUnexpectedResult(chrono.vi.strict, "n\u0103m sau", REF);
24
- });
25
-
26
- test("Test - Strict rejects weekday-only expressions", () => {
27
- testUnexpectedResult(chrono.vi.strict, "th\u1ee9 hai", REF);
28
- testUnexpectedResult(chrono.vi.strict, "ch\u1ee7 nh\u1eadt", REF);
29
- });
30
-
31
- test("Test - Strict accepts standard full dates and times", () => {
32
- testSingleCase(chrono.vi.strict, "ng\u00e0y 30 th\u00e1ng 4 n\u0103m 1975", REF, (r) => {
33
- expect(r.start.get("year")).toBe(1975);
34
- expect(r.start.get("month")).toBe(4);
35
- expect(r.start.get("day")).toBe(30);
36
- });
37
-
38
- testSingleCase(chrono.vi.strict, "l\u00fac 7 gi\u1edd 30 ph\u00fat", REF, (r) => {
39
- expect(r.start.get("hour")).toBe(7);
40
- expect(r.start.get("minute")).toBe(30);
41
- });
42
- });
43
-
44
- test("Test - Strict accepts slash dates", () => {
45
- testSingleCase(chrono.vi.strict, "30/4/1975", REF, (r) => {
46
- expect(r.start.get("day")).toBe(30);
47
- expect(r.start.get("month")).toBe(4);
48
- expect(r.start.get("year")).toBe(1975);
49
- });
50
-
51
- testSingleCase(chrono.vi.strict, "15/3", REF, (r) => {
52
- expect(r.start.get("day")).toBe(15);
53
- expect(r.start.get("month")).toBe(3);
54
- });
55
- });
56
-
57
- test("Test - Strict accepts explicit time unit expressions", () => {
58
- testSingleCase(chrono.vi.strict, "3 ng\u00e0y tr\u01b0\u1edbc", REF, (r) => {
59
- expect(r.start.get("day")).toBe(7);
60
- expect(r.start.get("month")).toBe(8);
61
- });
62
-
63
- testSingleCase(chrono.vi.strict, "2 tu\u1ea7n sau", REF, (r) => {
64
- expect(r.start.get("day")).toBe(24);
65
- expect(r.start.get("month")).toBe(8);
66
- });
67
- });
@@ -1,99 +0,0 @@
1
- import * as chrono from "../../src/";
2
- import { testSingleCase } from "../test_util";
3
-
4
- const REF = new Date(2012, 7, 10, 12);
5
-
6
- test("Test - X gi\u1edd", () => {
7
- testSingleCase(chrono.vi, "Cu\u1ed9c h\u1ecdn l\u00fac 7 gi\u1edd.", REF, (r) => {
8
- expect(r.index).toBe(9);
9
- expect(r.text).toBe("l\u00fac 7 gi\u1edd");
10
- expect(r.start.get("hour")).toBe(7);
11
- expect(r.start.get("minute")).toBe(0);
12
- });
13
-
14
- testSingleCase(chrono.vi, "7 gi\u1edd s\u00e1ng", REF, (r) => {
15
- expect(r.start.get("hour")).toBe(7);
16
- expect(r.start.get("meridiem")).toBe(0); // AM
17
- });
18
-
19
- testSingleCase(chrono.vi, "7 gi\u1edd t\u1ed1i", REF, (r) => {
20
- expect(r.start.get("hour")).toBe(19);
21
- });
22
- });
23
-
24
- test("Test - X gi\u1edd Y ph\u00fat", () => {
25
- testSingleCase(chrono.vi, "l\u00fac 7 gi\u1edd 30 ph\u00fat", REF, (r) => {
26
- expect(r.start.get("hour")).toBe(7);
27
- expect(r.start.get("minute")).toBe(30);
28
- });
29
-
30
- testSingleCase(chrono.vi, "v\u00e0o 15 gi\u1edd 45 ph\u00fat", REF, (r) => {
31
- expect(r.start.get("hour")).toBe(15);
32
- expect(r.start.get("minute")).toBe(45);
33
- });
34
- });
35
-
36
- test("Test - colon format HH:MM", () => {
37
- testSingleCase(chrono.vi, "H\u1ecdn l\u00fac 15:30.", REF, (r) => {
38
- expect(r.start.get("hour")).toBe(15);
39
- expect(r.start.get("minute")).toBe(30);
40
- });
41
- });
42
-
43
- test("Test - date + time combined", () => {
44
- testSingleCase(chrono.vi, "ng\u00e0y 30 th\u00e1ng 4 n\u0103m 1975 l\u00fac 11 gi\u1edd", REF, (r) => {
45
- expect(r.start.get("day")).toBe(30);
46
- expect(r.start.get("month")).toBe(4);
47
- expect(r.start.get("year")).toBe(1975);
48
- expect(r.start.get("hour")).toBe(11);
49
- });
50
- });
51
-
52
- test("Test - meridiem: s\u00e1ng/chi\u1ec1u/t\u1ed1i/\u0111\u00eam", () => {
53
- testSingleCase(chrono.vi, "9 gi\u1edd s\u00e1ng", REF, (r) => {
54
- expect(r.start.get("hour")).toBe(9);
55
- expect(r.start.get("meridiem")).toBe(0); // AM
56
- });
57
- testSingleCase(chrono.vi, "3 gi\u1edd chi\u1ec1u", REF, (r) => {
58
- expect(r.start.get("hour")).toBe(15);
59
- });
60
- testSingleCase(chrono.vi, "10 gi\u1edd \u0111\u00eam", REF, (r) => {
61
- expect(r.start.get("hour")).toBe(22);
62
- });
63
- });
64
-
65
- test("Test - trưa meridiem: X giờ trưa → PM (hour + 12)", () => {
66
- // trưa = noon/midday — times expressed with trưa are PM
67
- testSingleCase(chrono.vi, "1 giờ trưa", REF, (r) => {
68
- expect(r.start.get("hour")).toBe(13);
69
- expect(r.start.get("meridiem")).toBe(1); // PM
70
- });
71
- testSingleCase(chrono.vi, "11 giờ trưa", REF, (r) => {
72
- expect(r.start.get("hour")).toBe(11);
73
- expect(r.start.get("meridiem")).toBe(0); // AM — 11 giờ trưa = approaching noon
74
- });
75
- // 12 giờ trưa = noon, no offset applied (12 < 12 is false)
76
- testSingleCase(chrono.vi, "12 giờ trưa", REF, (r) => {
77
- expect(r.start.get("hour")).toBe(12);
78
- expect(r.start.get("meridiem")).toBe(1); // PM
79
- });
80
- });
81
-
82
- test("Test - 12 giờ sáng = midnight (00:00)", () => {
83
- testSingleCase(chrono.vi, "12 giờ sáng", REF, (r) => {
84
- expect(r.start.get("hour")).toBe(0);
85
- expect(r.start.get("meridiem")).toBe(0); // AM
86
- });
87
- });
88
-
89
- test("Test - isCertain: hour and meridiem certainty", () => {
90
- testSingleCase(chrono.vi, "lúc 7 giờ", REF, (r) => {
91
- expect(r.start.isCertain("hour")).toBe(true);
92
- expect(r.start.isCertain("meridiem")).toBe(false);
93
- });
94
-
95
- testSingleCase(chrono.vi, "7 giờ sáng", REF, (r) => {
96
- expect(r.start.isCertain("hour")).toBe(true);
97
- expect(r.start.isCertain("meridiem")).toBe(true);
98
- });
99
- });