chrono-node
Version:
A natural language date parser in Javascript
117 lines (111 loc) • 5.61 kB
text/typescript
import { createParsingComponentsAtWeekday, getDaysToWeekday } from "../src/common/calculation/weekdays";
import { Weekday } from "../src";
import { ReferenceWithTimezone } from "../src/results";
test("Test - This Weekday Calculation", () => {
{
const reference = new ReferenceWithTimezone(new Date("Sat, 20 Aug 2022 12:00:00"));
const output = createParsingComponentsAtWeekday(reference, Weekday.MONDAY, "this");
expect(output.date()).toStrictEqual(new Date("Mon, Aug 22 2022 12:00:00"));
}
{
const reference = new ReferenceWithTimezone(new Date("Sun, 21 Aug 2022 12:00:00"));
const output = createParsingComponentsAtWeekday(reference, Weekday.FRIDAY, "this");
expect(output.date()).toStrictEqual(new Date("Fri, Aug 26 2022 12:00:00"));
}
{
const reference = new ReferenceWithTimezone(new Date("Tue, Aug 2 2022 12:00:00"));
const output = createParsingComponentsAtWeekday(reference, Weekday.SUNDAY, "this");
expect(output.date()).toStrictEqual(new Date("Sun, Aug 7 2022 12:00:00"));
}
});
test("Test - Last Weekday Calculation", () => {
{
const reference = new ReferenceWithTimezone(new Date("Sat, 20 Aug 2022 12:00:00"));
const output = createParsingComponentsAtWeekday(reference, Weekday.FRIDAY, "last");
expect(output.date()).toStrictEqual(new Date("Fri, Aug 19 2022 12:00:00"));
}
{
const reference = new ReferenceWithTimezone(new Date("Sat, 20 Aug 2022 12:00:00"));
const output = createParsingComponentsAtWeekday(reference, Weekday.MONDAY, "last");
expect(output.date()).toStrictEqual(new Date("Mon, Aug 15 2022 12:00:00"));
}
{
const reference = new ReferenceWithTimezone(new Date("Sat, 20 Aug 2022 12:00:00"));
const output = createParsingComponentsAtWeekday(reference, Weekday.SUNDAY, "last");
expect(output.date()).toStrictEqual(new Date("Sun, Aug 14 2022 12:00:00"));
}
{
const reference = new ReferenceWithTimezone(new Date("Sat, 20 Aug 2022 12:00:00"));
const output = createParsingComponentsAtWeekday(reference, Weekday.SATURDAY, "last");
expect(output.date()).toStrictEqual(new Date("Sat, Aug 13 2022 12:00:00"));
}
});
test("Test - Next Weekday Calculation", () => {
{
const reference = new ReferenceWithTimezone(new Date("Sun, Aug 21 2022 12:00:00"));
const output = createParsingComponentsAtWeekday(reference, Weekday.MONDAY, "next");
expect(output.date()).toStrictEqual(new Date("Mon, Aug 22 2022 12:00:00"));
}
{
const reference = new ReferenceWithTimezone(new Date("Sun, Aug 21 2022 12:00:00"));
const output = createParsingComponentsAtWeekday(reference, Weekday.SATURDAY, "next");
expect(output.date()).toStrictEqual(new Date("Sat, Aug 27 2022 12:00:00"));
}
{
const reference = new ReferenceWithTimezone(new Date("Sun, Aug 21 2022 12:00:00"));
const output = createParsingComponentsAtWeekday(reference, Weekday.SUNDAY, "next");
expect(output.date()).toStrictEqual(new Date("Sun, Aug 28 2022 12:00:00"));
}
{
const reference = new ReferenceWithTimezone(new Date("Sat, Aug 20 2022 12:00:00"));
const output = createParsingComponentsAtWeekday(reference, Weekday.FRIDAY, "next");
expect(output.date()).toStrictEqual(new Date("Fri, Aug 26 2022 12:00:00"));
}
{
const reference = new ReferenceWithTimezone(new Date("Sat, Aug 20 2022 12:00:00"));
const output = createParsingComponentsAtWeekday(reference, Weekday.SATURDAY, "next");
expect(output.date()).toStrictEqual(new Date("Sat, Aug 27 2022 12:00:00"));
}
{
const reference = new ReferenceWithTimezone(new Date("Sat, Aug 20 2022 12:00:00"));
const output = createParsingComponentsAtWeekday(reference, Weekday.SUNDAY, "next");
expect(output.date()).toStrictEqual(new Date("Sun, Aug 28 2022 12:00:00"));
}
{
const reference = new ReferenceWithTimezone(new Date("Tue, Aug 2 2022 12:00:00"));
const output = createParsingComponentsAtWeekday(reference, Weekday.MONDAY, "next");
expect(output.date()).toStrictEqual(new Date("Mon, Aug 8 2022 12:00:00"));
}
{
const reference = new ReferenceWithTimezone(new Date("Tue, Aug 2 2022 12:00:00"));
const output = createParsingComponentsAtWeekday(reference, Weekday.FRIDAY, "next");
expect(output.date()).toStrictEqual(new Date("Fri, Aug 12 2022 12:00:00"));
}
{
const reference = new ReferenceWithTimezone(new Date("Tue, Aug 2 2022 12:00:00"));
const output = createParsingComponentsAtWeekday(reference, Weekday.SUNDAY, "next");
expect(output.date()).toStrictEqual(new Date("Sun, Aug 14 2022 12:00:00"));
}
});
test("Test - Closest Weekday Calculation", () => {
{
const refDate = new Date("Sat, 20 Aug 2022 12:00:00");
expect(getDaysToWeekday(refDate, Weekday.MONDAY)).toBe(2);
}
{
const refDate = new Date("Sat, 20 Aug 2022 12:00:00");
expect(getDaysToWeekday(refDate, Weekday.TUESDAY)).toBe(3);
}
{
const refDate = new Date("Sat, 20 Aug 2022 12:00:00");
expect(getDaysToWeekday(refDate, Weekday.FRIDAY)).toBe(-1);
}
{
const refDate = new Date("Sat, 20 Aug 2022 12:00:00");
expect(getDaysToWeekday(refDate, Weekday.THURSDAY)).toBe(-2);
}
{
const refDate = new Date("Sat, 20 Aug 2022 12:00:00");
expect(getDaysToWeekday(refDate, Weekday.WEDNESDAY)).toBe(-3);
}
});