chrono-node
Version:
A natural language date parser in Javascript
184 lines (155 loc) • 8.03 kB
text/typescript
import * as chrono from "../../src";
import { testSingleCase } from "../test_util";
test("Test - Single Expression", function () {
testSingleCase(chrono.ja, "木曜日", new Date(2016, 9 - 1, 2), (result) => {
expect(result.index).toBe(0);
expect(result.text).toBe("木曜日");
expect(result.start).not.toBeNull();
expect(result.start.get("year")).toBe(2016);
expect(result.start.get("month")).toBe(9);
expect(result.start.get("day")).toBe(1);
expect(result.start.get("weekday")).toBe(4);
expect(result.start.isCertain("day")).toBe(false);
expect(result.start.isCertain("month")).toBe(false);
expect(result.start.isCertain("year")).toBe(false);
expect(result.start.isCertain("weekday")).toBe(true);
const resultDate = result.start.date();
const expectDate = new Date(2016, 9 - 1, 1, 12);
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
});
testSingleCase(chrono.ja, "前の水曜日", new Date(2016, 9 - 1, 2), (result) => {
expect(result.index).toBe(0);
expect(result.text).toBe("前の水曜日");
expect(result.start).not.toBeNull();
expect(result.start.get("year")).toBe(2016);
expect(result.start.get("month")).toBe(8);
expect(result.start.get("day")).toBe(31);
expect(result.start.get("weekday")).toBe(3);
const resultDate = result.start.date();
const expectDate = new Date(2016, 8 - 1, 31, 12);
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
});
});
test("Test - Single Expression - weekday with parentheses", function () {
testSingleCase(chrono.ja, "(木)", new Date(2016, 9 - 1, 2), (result) => {
expect(result.index).toBe(0);
expect(result.text).toBe("(木)");
expect(result.start).not.toBeNull();
expect(result.start.get("year")).toBe(2016);
expect(result.start.get("month")).toBe(9);
expect(result.start.get("day")).toBe(1);
expect(result.start.get("weekday")).toBe(4);
expect(result.start.isCertain("day")).toBe(false);
expect(result.start.isCertain("month")).toBe(false);
expect(result.start.isCertain("year")).toBe(false);
expect(result.start.isCertain("weekday")).toBe(true);
const resultDate = result.start.date();
const expectDate = new Date(2016, 9 - 1, 1, 12);
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
});
testSingleCase(chrono.ja, "(木)", new Date(2016, 9 - 1, 2), (result) => {
expect(result.index).toBe(0);
expect(result.text).toBe("(木)");
expect(result.start).not.toBeNull();
expect(result.start.get("year")).toBe(2016);
expect(result.start.get("month")).toBe(9);
expect(result.start.get("day")).toBe(1);
expect(result.start.get("weekday")).toBe(4);
expect(result.start.isCertain("day")).toBe(false);
expect(result.start.isCertain("month")).toBe(false);
expect(result.start.isCertain("year")).toBe(false);
expect(result.start.isCertain("weekday")).toBe(true);
const resultDate = result.start.date();
const expectDate = new Date(2016, 9 - 1, 1, 12);
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
});
});
test("Test - forward dates only option", function () {
testSingleCase(chrono.ja, "土曜日~月曜日", new Date(2016, 9 - 1, 2), { forwardDate: true }, (result) => {
expect(result.index).toBe(0);
expect(result.text).toBe("土曜日~月曜日");
expect(result.start).not.toBeNull();
expect(result.start.get("year")).toBe(2016);
expect(result.start.get("month")).toBe(9);
expect(result.start.get("day")).toBe(3);
expect(result.start.get("weekday")).toBe(6);
expect(result.start.isCertain("day")).toBe(false);
expect(result.start.isCertain("month")).toBe(false);
expect(result.start.isCertain("year")).toBe(false);
expect(result.start.isCertain("weekday")).toBe(true);
let resultDate = result.start.date();
let expectDate = new Date(2016, 9 - 1, 3, 12);
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
expect(result.end).not.toBeNull();
expect(result.end.get("year")).toBe(2016);
expect(result.end.get("month")).toBe(9);
expect(result.end.get("day")).toBe(5);
expect(result.end.get("weekday")).toBe(1);
expect(result.end.isCertain("day")).toBe(false);
expect(result.end.isCertain("month")).toBe(false);
expect(result.end.isCertain("year")).toBe(false);
expect(result.end.isCertain("weekday")).toBe(true);
resultDate = result.end.date();
expectDate = new Date(2016, 9 - 1, 5, 12);
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
});
});
test("Test - merge date and weekday", function () {
testSingleCase(chrono.ja, "8月27日水曜日", new Date(2012, 8 - 1, 10), (result) => {
expect(result.index).toBe(0);
expect(result.text).toBe("8月27日水曜日");
expect(result.start).not.toBeNull();
expect(result.start.get("year")).toBe(2012);
expect(result.start.get("month")).toBe(8);
expect(result.start.get("day")).toBe(27);
expect(result.start.get("weekday")).toBe(3);
expect(result.start).toBeDate(new Date(2012, 8 - 1, 27, 12));
});
testSingleCase(chrono.ja, "8月27日(水)", new Date(2012, 8 - 1, 10), (result) => {
expect(result.index).toBe(0);
expect(result.text).toBe("8月27日(水)");
expect(result.start).not.toBeNull();
expect(result.start.get("year")).toBe(2012);
expect(result.start.get("month")).toBe(8);
expect(result.start.get("day")).toBe(27);
expect(result.start.get("weekday")).toBe(3);
expect(result.start).toBeDate(new Date(2012, 8 - 1, 27, 12));
});
testSingleCase(chrono.ja, "2012/8/27(水)", new Date(2012, 8 - 1, 10), (result) => {
expect(result.index).toBe(0);
expect(result.text).toBe("2012/8/27(水)");
expect(result.start).not.toBeNull();
expect(result.start.get("year")).toBe(2012);
expect(result.start.get("month")).toBe(8);
expect(result.start.get("day")).toBe(27);
expect(result.start.get("weekday")).toBe(3);
expect(result.start).toBeDate(new Date(2012, 8 - 1, 27, 12));
});
testSingleCase(chrono.ja, "1/30(木)", new Date(2025, 1, 10), (result) => {
expect(result.text).toBe("1/30(木)");
});
testSingleCase(chrono.ja, "1/30の木曜日", new Date(2025, 1, 10), (result) => {
expect(result.text).toBe("1/30の木曜日");
});
testSingleCase(chrono.ja, "1/30(木)", new Date(2025, 1, 10), (result) => {
expect(result.text).toBe("1/30(木)");
});
testSingleCase(chrono.ja, "1月30日(木)14:00", new Date(2025, 1, 10), (result) => {
expect(result.text).toBe("1月30日(木)14:00");
});
testSingleCase(chrono.ja, "1月31日(金)12:00-16:00", new Date(2025, 1, 10), (result) => {
expect(result.text).toBe("1月31日(金)12:00-16:00");
});
testSingleCase(
chrono.ja,
"1月30日(木)12:00-1月31日(金)16:00",
new Date(2025, 1, 10),
(result) => {
expect(result.text).toBe("1月30日(木)12:00-1月31日(金)16:00");
expect(result.start).toBeDate(new Date(2025, 1 - 1, 30, 12));
expect(result.start.get("weekday")).toBe(4);
expect(result.end).toBeDate(new Date(2025, 1 - 1, 31, 16));
expect(result.end.get("weekday")).toBe(5);
}
);
});