123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- describe("correct behavior", () => {
- test("length is 1", () => {
- expect(Temporal.PlainDateTime.from).toHaveLength(1);
- });
- test("PlainDate instance argument", () => {
- const plainDate = new Temporal.PlainDate(2021, 7, 6);
- const plainDateTime = Temporal.PlainDateTime.from(plainDate);
- expect(plainDateTime.year).toBe(2021);
- expect(plainDateTime.month).toBe(7);
- expect(plainDateTime.day).toBe(6);
- expect(plainDateTime.hour).toBe(0);
- expect(plainDateTime.minute).toBe(0);
- expect(plainDateTime.second).toBe(0);
- expect(plainDateTime.millisecond).toBe(0);
- expect(plainDateTime.microsecond).toBe(0);
- expect(plainDateTime.nanosecond).toBe(0);
- });
- test("PlainDateTime instance argument", () => {
- const plainDateTime_ = new Temporal.PlainDateTime(2021, 7, 6, 18, 14, 47);
- const plainDateTime = Temporal.PlainDateTime.from(plainDateTime_);
- expect(plainDateTime).not.toBe(plainDateTime_);
- expect(plainDateTime.year).toBe(2021);
- expect(plainDateTime.month).toBe(7);
- expect(plainDateTime.day).toBe(6);
- expect(plainDateTime.hour).toBe(18);
- expect(plainDateTime.minute).toBe(14);
- expect(plainDateTime.second).toBe(47);
- expect(plainDateTime.millisecond).toBe(0);
- expect(plainDateTime.microsecond).toBe(0);
- expect(plainDateTime.nanosecond).toBe(0);
- });
- test("ZonedDateTime instance argument", () => {
- const timeZone = new Temporal.TimeZone("UTC");
- const zonedDateTime = new Temporal.ZonedDateTime(1625614921000000000n, timeZone);
- const plainDateTime = Temporal.PlainDateTime.from(zonedDateTime);
- expect(plainDateTime.year).toBe(2021);
- expect(plainDateTime.month).toBe(7);
- expect(plainDateTime.day).toBe(6);
- expect(plainDateTime.hour).toBe(23);
- expect(plainDateTime.minute).toBe(42);
- expect(plainDateTime.second).toBe(1);
- expect(plainDateTime.millisecond).toBe(0);
- expect(plainDateTime.microsecond).toBe(0);
- expect(plainDateTime.nanosecond).toBe(0);
- });
- test("fields object argument", () => {
- const object = {
- year: 2021,
- month: 7,
- day: 6,
- hour: 23,
- minute: 42,
- second: 1,
- millisecond: 0,
- microsecond: 0,
- nanosecond: 0,
- };
- const plainDateTime = Temporal.PlainDateTime.from(object);
- expect(plainDateTime.year).toBe(2021);
- expect(plainDateTime.month).toBe(7);
- expect(plainDateTime.day).toBe(6);
- expect(plainDateTime.hour).toBe(23);
- expect(plainDateTime.minute).toBe(42);
- expect(plainDateTime.second).toBe(1);
- expect(plainDateTime.millisecond).toBe(0);
- expect(plainDateTime.microsecond).toBe(0);
- expect(plainDateTime.nanosecond).toBe(0);
- });
- test("with 'constrain' overflow option", () => {
- const object = {
- year: 0,
- month: 1,
- day: 1,
- hour: 24,
- minute: 60,
- second: 60,
- millisecond: 1000,
- microsecond: 1000,
- nanosecond: 1000,
- };
- const plainDateTime = Temporal.PlainDateTime.from(object, { overflow: "constrain" });
- expect(plainDateTime.year).toBe(0);
- expect(plainDateTime.month).toBe(1);
- expect(plainDateTime.day).toBe(1);
- expect(plainDateTime.hour).toBe(23);
- expect(plainDateTime.minute).toBe(59);
- expect(plainDateTime.second).toBe(59);
- expect(plainDateTime.millisecond).toBe(999);
- expect(plainDateTime.microsecond).toBe(999);
- expect(plainDateTime.nanosecond).toBe(999);
- });
- // Un-skip once ParseISODateTime & ParseTemporalDateString are implemented
- test.skip("PlainDateTime string argument", () => {
- const plainDateTime = Temporal.PlainDateTime.from("2021-07-06T23:42:01Z");
- expect(plainDateTime.year).toBe(2021);
- expect(plainDateTime.month).toBe(7);
- expect(plainDateTime.day).toBe(6);
- expect(plainDateTime.hour).toBe(23);
- expect(plainDateTime.minute).toBe(42);
- expect(plainDateTime.second).toBe(1);
- expect(plainDateTime.millisecond).toBe(0);
- expect(plainDateTime.microsecond).toBe(0);
- expect(plainDateTime.nanosecond).toBe(0);
- });
- });
- describe("errors", () => {
- test("missing fields", () => {
- expect(() => {
- Temporal.PlainDateTime.from({});
- }).toThrowWithMessage(TypeError, "Required property year is missing or undefined");
- expect(() => {
- Temporal.PlainDateTime.from({ year: 0 });
- }).toThrowWithMessage(TypeError, "Required property month is missing or undefined");
- expect(() => {
- Temporal.PlainDateTime.from({ year: 0, month: 1 });
- }).toThrowWithMessage(TypeError, "Required property day is missing or undefined");
- });
- test("with 'reject' overflow option", () => {
- const values = [
- [{ year: 1234567, month: 1, day: 1 }, "Invalid plain date"],
- [{ year: 0, month: 13, day: 1 }, "Invalid plain date"],
- [{ year: 0, month: 1, day: 32 }, "Invalid plain date"],
- [{ year: 0, month: 1, day: 1, hour: 24 }, "Invalid plain time"],
- [{ year: 0, month: 1, day: 1, hour: 0, minute: 60 }, "Invalid plain time"],
- [{ year: 0, month: 1, day: 1, hour: 0, minute: 0, second: 60 }, "Invalid plain time"],
- [
- { year: 0, month: 1, day: 1, hour: 0, minute: 0, second: 0, millisecond: 1000 },
- "Invalid plain time",
- ],
- [
- {
- year: 0,
- month: 1,
- day: 1,
- hour: 0,
- minute: 0,
- second: 0,
- millisecond: 0,
- microsecond: 1000,
- },
- "Invalid plain time",
- ],
- [
- {
- year: 0,
- month: 1,
- day: 1,
- hour: 0,
- minute: 0,
- second: 0,
- millisecond: 0,
- microsecond: 0,
- nanosecond: 1000,
- },
- "Invalid plain time",
- ],
- ];
- for (const [object, error] of values) {
- expect(() => {
- Temporal.PlainDateTime.from(object, { overflow: "reject" });
- }).toThrowWithMessage(RangeError, error);
- }
- });
- });
|