-
Notifications
You must be signed in to change notification settings - Fork 750
/
Copy pathIANA.test.js
114 lines (95 loc) · 4.5 KB
/
IANA.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/* global test expect */
import { FixedOffsetZone, IANAZone } from "../../src/luxon";
test("IANAZone.create returns a singleton per zone name", () => {
expect(IANAZone.create("UTC")).toBe(IANAZone.create("UTC"));
expect(IANAZone.create("America/New_York")).toBe(IANAZone.create("America/New_York"));
expect(IANAZone.create("UTC")).not.toBe(IANAZone.create("America/New_York"));
// hold true even for invalid zone names
expect(IANAZone.create("blorp")).toBe(IANAZone.create("blorp"));
});
test("IANAZone.create should return IANAZone instance", () => {
const result = IANAZone.create("America/Cancun");
expect(result).toBeInstanceOf(IANAZone);
});
test("IANAZone.isValidSpecifier", () => {
expect(IANAZone.isValidSpecifier("America/New_York")).toBe(true);
// this used to return true but now returns false, because we just defer to isValidZone
expect(IANAZone.isValidSpecifier("Fantasia/Castle")).toBe(false);
expect(IANAZone.isValidSpecifier("Sport~~blorp")).toBe(false);
expect(IANAZone.isValidSpecifier("Etc/GMT+8")).toBe(true);
expect(IANAZone.isValidSpecifier("Etc/GMT-8")).toBe(true);
expect(IANAZone.isValidSpecifier("Etc/GMT-0")).toBe(true);
expect(IANAZone.isValidSpecifier("Etc/GMT-1")).toBe(true);
expect(IANAZone.isValidSpecifier(null)).toBe(false);
});
test("IANAZone.isValidZone", () => {
expect(IANAZone.isValidZone("America/New_York")).toBe(true);
expect(IANAZone.isValidZone("Fantasia/Castle")).toBe(false);
expect(IANAZone.isValidZone("Sport~~blorp")).toBe(false);
expect(IANAZone.isValidZone("")).toBe(false);
expect(IANAZone.isValidZone(undefined)).toBe(false);
expect(IANAZone.isValidZone(null)).toBe(false);
expect(IANAZone.isValidZone(4)).toBe(false);
});
test("IANAZone.type returns a static string", () => {
expect(new IANAZone("America/Santiago").type).toBe("iana");
expect(new IANAZone("America/Blorp").type).toBe("iana");
});
test("IANAZone.name returns the zone name passed to the constructor", () => {
expect(new IANAZone("America/Santiago").name).toBe("America/Santiago");
expect(new IANAZone("America/Blorp").name).toBe("America/Blorp");
expect(new IANAZone("foo").name).toBe("foo");
});
test("IANAZone is not universal", () => {
expect(new IANAZone("America/Santiago").isUniversal).toBe(false);
});
test("IANAZone.offsetName with a long format", () => {
const zone = new IANAZone("America/Santiago");
const offsetName = zone.offsetName(1552089600, { format: "long", locale: "en-US" });
expect(offsetName).toBe("Chile Summer Time");
});
test("IANAZone.offsetName with a short format", () => {
const zone = new IANAZone("America/Santiago");
const offsetName = zone.offsetName(1552089600, { format: "short", locale: "en-US" });
expect(offsetName).toBe("GMT-3");
});
test("IANAZone.formatOffset with a short format", () => {
const zone = new IANAZone("America/Santiago");
const offsetName = zone.formatOffset(1552089600, "short");
expect(offsetName).toBe("-03:00");
});
test("IANAZone.formatOffset with a narrow format", () => {
const zone = new IANAZone("America/Santiago");
const offsetName = zone.formatOffset(1552089600, "narrow");
expect(offsetName).toBe("-3");
});
test("IANAZone.formatOffset with a techie format", () => {
const zone = new IANAZone("America/Santiago");
const offsetName = zone.formatOffset(1552089600, "techie");
expect(offsetName).toBe("-0300");
});
test("IANAZone.formatOffset throws for an invalid format", () => {
const zone = new IANAZone("America/Santiago");
expect(() => zone.formatOffset(1552089600, "blorp")).toThrow();
});
test("IANAZone.equals requires both zones to be iana", () => {
expect(IANAZone.create("UTC").equals(FixedOffsetZone.utcInstance)).toBe(false);
});
test("IANAZone.equals returns false even if the two share offsets", () => {
const luxembourg = IANAZone.create("Europe/Luxembourg");
const rome = IANAZone.create("Europe/Rome");
expect(luxembourg.equals(rome)).toBe(false);
});
test("IANAZone.isValid returns true for valid zone names", () => {
expect(new IANAZone("UTC").isValid).toBe(true);
expect(new IANAZone("America/Santiago").isValid).toBe(true);
expect(new IANAZone("Europe/Paris").isValid).toBe(true);
});
test("IANAZone.isValid returns false for invalid zone names", () => {
expect(new IANAZone("").isValid).toBe(false);
expect(new IANAZone("foo").isValid).toBe(false);
expect(new IANAZone("CEDT").isValid).toBe(false);
expect(new IANAZone("GMT+2").isValid).toBe(false);
expect(new IANAZone("America/Blorp").isValid).toBe(false);
expect(new IANAZone(null).isValid).toBe(false);
});