12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- describe("errors", () => {
- test("called without new", () => {
- expect(() => {
- Temporal.TimeZone();
- }).toThrowWithMessage(TypeError, "Temporal.TimeZone constructor must be called with 'new'");
- });
- test("Invalid time zone name", () => {
- expect(() => {
- new Temporal.TimeZone("foo");
- }).toThrowWithMessage(RangeError, "Invalid time zone name 'foo'");
- });
- test("Invalid numeric UTC offset", () => {
- // FIXME: Error message should probably say '...name or UTC offset ...' :^)
- expect(() => {
- new Temporal.TimeZone("0123456");
- }).toThrowWithMessage(RangeError, "Invalid time zone name '0123456'");
- expect(() => {
- new Temporal.TimeZone("23:59:59.9999999999");
- }).toThrowWithMessage(RangeError, "Invalid time zone name '23:59:59.9999999999'");
- });
- });
- describe("normal behavior", () => {
- test("length is 1", () => {
- expect(Temporal.TimeZone).toHaveLength(1);
- });
- test("basic functionality", () => {
- const timeZone = new Temporal.TimeZone("UTC");
- expect(timeZone.id).toBe("UTC");
- expect(typeof timeZone).toBe("object");
- expect(timeZone).toBeInstanceOf(Temporal.TimeZone);
- expect(Object.getPrototypeOf(timeZone)).toBe(Temporal.TimeZone.prototype);
- });
- test("canonicalizes time zone name", () => {
- const values = [
- ["UTC", "UTC"],
- ["Utc", "UTC"],
- ["utc", "UTC"],
- ["uTc", "UTC"],
- ["GMT", "UTC"],
- ["Etc/UTC", "UTC"],
- ["Etc/GMT", "UTC"],
- ["Etc/GMT+12", "Etc/GMT+12"],
- ["Etc/GMT-12", "Etc/GMT-12"],
- ["Europe/London", "Europe/London"],
- ["Europe/Isle_of_Man", "Europe/London"],
- ];
- for (const [arg, expected] of values) {
- expect(new Temporal.TimeZone(arg).id).toBe(expected);
- }
- });
- test("numeric UTC offset", () => {
- const signs = [
- ["+", "+"],
- ["-", "-"],
- ["\u2212", "-"],
- ];
- const values = [
- ["01", "01:00"],
- ["0123", "01:23"],
- ["012345", "01:23:45"],
- ["012345.6", "01:23:45.6"],
- ["012345.123", "01:23:45.123"],
- ["012345.123456789", "01:23:45.123456789"],
- ["012345,6", "01:23:45.6"],
- ["012345,123", "01:23:45.123"],
- ["012345,123456789", "01:23:45.123456789"],
- ["01:23", "01:23"],
- ["01:23:45", "01:23:45"],
- ["01:23:45.6", "01:23:45.6"],
- ["01:23:45.123", "01:23:45.123"],
- ["01:23:45.123456789", "01:23:45.123456789"],
- ["01:23:45,6", "01:23:45.6"],
- ["01:23:45,123", "01:23:45.123"],
- ["01:23:45,123456789", "01:23:45.123456789"],
- ["23:59:59.999999999", "23:59:59.999999999"],
- ];
- for (const [sign, expectedSign] of signs) {
- for (const [offset, expectedOffset] of values) {
- expect(new Temporal.TimeZone(`${sign}${offset}`).id).toBe(
- `${expectedSign}${expectedOffset}`
- );
- }
- }
- });
- });
|