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.
- package/dist/cjs/results.js +15 -9
- package/dist/cjs/results.js.map +1 -1
- package/dist/esm/results.js +14 -9
- package/dist/esm/results.js.map +1 -1
- package/package.json +5 -1
- package/src/results.ts +40 -9
- package/test/calculation_duration.test.ts +0 -165
- package/test/calculation_weekdays.test.ts +0 -133
- package/test/de/de_casual.test.ts +0 -336
- package/test/de/de_dash.test.ts +0 -32
- package/test/de/de_month_name_little_endian.test.ts +0 -273
- package/test/de/de_time_exp.test.ts +0 -223
- package/test/de/de_time_units_casual_relative.test.ts +0 -120
- package/test/de/de_time_units_within.test.ts +0 -119
- package/test/de/de_weekday.test.ts +0 -158
- package/test/de/de_year.test.ts +0 -147
- package/test/debugging.test.ts +0 -17
- package/test/en/en.test.ts +0 -191
- package/test/en/en_casual.test.ts +0 -425
- package/test/en/en_inter_std.test.ts +0 -118
- package/test/en/en_merging_relative_dates.test.ts +0 -50
- package/test/en/en_month.test.ts +0 -339
- package/test/en/en_month_name_little_endian.test.ts +0 -448
- package/test/en/en_month_name_middle_endian.test.ts +0 -386
- package/test/en/en_performance.test.ts +0 -26
- package/test/en/en_relative.test.ts +0 -393
- package/test/en/en_slash.test.ts +0 -284
- package/test/en/en_time_exp.test.ts +0 -535
- package/test/en/en_time_units_ago.test.ts +0 -357
- package/test/en/en_time_units_casual_relative.test.ts +0 -186
- package/test/en/en_time_units_later.test.ts +0 -361
- package/test/en/en_time_units_within.test.ts +0 -417
- package/test/en/en_timezone_exp.test.ts +0 -410
- package/test/en/en_weekday.test.ts +0 -573
- package/test/en/en_year.test.ts +0 -138
- package/test/en/en_year_month_day.test.ts +0 -101
- package/test/en/negative_cases.test.ts +0 -99
- package/test/es/es_casual.test.ts +0 -175
- package/test/es/es_month_name_little_endian.test.ts +0 -217
- package/test/es/es_slash.test.ts +0 -26
- package/test/es/es_time_exp.test.ts +0 -175
- package/test/es/es_time_units_within.test.ts +0 -119
- package/test/fi/fi_casual.test.ts +0 -99
- package/test/fi/fi_casual_time.test.ts +0 -56
- package/test/fi/fi_month_name_little_endian.test.ts +0 -50
- package/test/fi/fi_time_exp.test.ts +0 -39
- package/test/fi/fi_time_units_ago.test.ts +0 -93
- package/test/fi/fi_time_units_casual_relative.test.ts +0 -117
- package/test/fi/fi_time_units_within.test.ts +0 -74
- package/test/fi/fi_weekday.test.ts +0 -90
- package/test/fr/fr_casual.test.ts +0 -314
- package/test/fr/fr_little_endian.test.ts +0 -320
- package/test/fr/fr_slash.test.ts +0 -49
- package/test/fr/fr_time_exp.test.ts +0 -588
- package/test/fr/fr_time_units_ago.test.ts +0 -103
- package/test/fr/fr_time_units_casual_relative.test.ts +0 -114
- package/test/fr/fr_time_units_within.test.ts +0 -129
- package/test/fr/fr_weekday.test.ts +0 -130
- package/test/it/it_casual.test.ts +0 -81
- package/test/it/it_month_name_little_endian.test.ts +0 -28
- package/test/it/it_month_name_middle_endian.test.ts +0 -39
- package/test/it/it_time_exp.test.ts +0 -84
- package/test/it/it_weekday.test.ts +0 -37
- package/test/it/it_year_month_day.test.ts +0 -41
- package/test/ja/ja_casual.test.ts +0 -73
- package/test/ja/ja_slash_date_format.test.ts +0 -60
- package/test/ja/ja_standard.test.ts +0 -235
- package/test/ja/ja_time_exp.test.ts +0 -305
- package/test/ja/ja_weekday.test.ts +0 -183
- package/test/nl/nl_casual.test.ts +0 -408
- package/test/nl/nl_month.test.ts +0 -205
- package/test/nl/nl_month_name_little_endian.test.ts +0 -358
- package/test/nl/nl_relative.test.ts +0 -242
- package/test/nl/nl_slash.test.ts +0 -206
- package/test/nl/nl_time_exp.test.ts +0 -79
- package/test/nl/nl_time_units_ago.test.ts +0 -243
- package/test/nl/nl_time_units_casual_relative.test.ts +0 -130
- package/test/nl/nl_time_units_later.test.ts +0 -250
- package/test/nl/nl_time_units_within.test.ts +0 -225
- package/test/nl/nl_weekday.test.ts +0 -216
- package/test/pt/pt_casual.test.ts +0 -175
- package/test/pt/pt_month_name_little_endian.test.ts +0 -217
- package/test/pt/pt_slash.test.ts +0 -26
- package/test/pt/pt_time_exp.test.ts +0 -175
- package/test/result.test.ts +0 -283
- package/test/ru/ru_casual.test.ts +0 -159
- package/test/ru/ru_month.test.ts +0 -70
- package/test/ru/ru_month_name_little_endian.test.ts +0 -145
- package/test/ru/ru_relative.test.ts +0 -107
- package/test/ru/ru_time_exp.test.ts +0 -111
- package/test/ru/ru_time_units_ago.test.ts +0 -48
- package/test/ru/ru_time_units_casual_relative.test.ts +0 -190
- package/test/ru/ru_time_units_within.test.ts +0 -16
- package/test/ru/ru_weekday.test.ts +0 -52
- package/test/sv/sv_casual.test.ts +0 -87
- package/test/sv/sv_month_name_little_endian.test.ts +0 -48
- package/test/sv/sv_time_units_casual_relative.test.ts +0 -143
- package/test/sv/sv_weekday.test.ts +0 -68
- package/test/system.test.ts +0 -247
- package/test/system_timezone.test.ts +0 -284
- package/test/test_util.ts +0 -135
- package/test/uk/uk_casual.test.ts +0 -153
- package/test/uk/uk_month.test.ts +0 -70
- package/test/uk/uk_month_name_little_endian.test.ts +0 -148
- package/test/uk/uk_relative.test.ts +0 -107
- package/test/uk/uk_time_exp.test.ts +0 -111
- package/test/uk/uk_time_units_ago.test.ts +0 -48
- package/test/uk/uk_time_units_casual_relative.test.ts +0 -142
- package/test/uk/uk_time_units_within.test.ts +0 -23
- package/test/uk/uk_weekday.test.ts +0 -52
- package/test/vi/vi_casual.test.ts +0 -84
- package/test/vi/vi_casual_time.test.ts +0 -77
- package/test/vi/vi_date_range.test.ts +0 -61
- package/test/vi/vi_forward_date.test.ts +0 -45
- package/test/vi/vi_month_year.test.ts +0 -40
- package/test/vi/vi_negative_cases.test.ts +0 -60
- package/test/vi/vi_slash.test.ts +0 -36
- package/test/vi/vi_standard.test.ts +0 -86
- package/test/vi/vi_strict.test.ts +0 -67
- package/test/vi/vi_time_exp.test.ts +0 -99
- package/test/vi/vi_time_units_ago.test.ts +0 -56
- package/test/vi/vi_time_units_casual_relative.test.ts +0 -56
- package/test/vi/vi_time_units_later.test.ts +0 -43
- package/test/vi/vi_time_units_within.test.ts +0 -24
- package/test/vi/vi_weekday.test.ts +0 -77
- package/test/vi/vi_year.test.ts +0 -42
- package/test/zh/hans/zh_hans_ago.test.ts +0 -58
- package/test/zh/hans/zh_hans_casual.test.ts +0 -242
- package/test/zh/hans/zh_hans_date.test.ts +0 -116
- package/test/zh/hans/zh_hans_deadline.test.ts +0 -175
- package/test/zh/hans/zh_hans_time_exp.test.ts +0 -508
- package/test/zh/hans/zh_hans_weekday.test.ts +0 -219
- package/test/zh/hant/zh_hant_ago.test.ts +0 -58
- package/test/zh/hant/zh_hant_casual.test.ts +0 -260
- package/test/zh/hant/zh_hant_date.test.ts +0 -116
- package/test/zh/hant/zh_hant_deadline.test.ts +0 -136
- package/test/zh/hant/zh_hant_time_exp.test.ts +0 -226
- package/test/zh/hant/zh_hant_weekday.test.ts +0 -175
- package/test/zh/zh.test.ts +0 -36
- package/tsconfig.build.esm.json +0 -8
- package/tsconfig.build.json +0 -10
- 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
|
-
});
|
package/test/vi/vi_slash.test.ts
DELETED
|
@@ -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
|
-
});
|