summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Date/time-zone-path.js
blob: 0181093bacc86b8bf3f89e6cdda85fe4db5b6591 (plain)
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
// |reftest| skip-if(xulRuntime.OS=="WINNT"||!xulRuntime.shell||!this.hasOwnProperty("Intl"))

assertEq(/^(PST|PDT)$/.test(getTimeZone()), true,
         "The default time zone is set to PST8PDT for all jstests (when run in the shell)");

function timeZoneName() {
    var dtf = new Intl.DateTimeFormat("en-US", {timeZoneName: "long"});
    return dtf.formatToParts(Date.UTC(2017, 2, 31, 12, 0, 0)).filter(x => x.type === "timeZoneName")[0].value;
}

setTimeZone("Europe/Paris");
assertEq(timeZoneName(), "Central European Summer Time");

setTimeZone(":Europe/Helsinki");
assertEq(timeZoneName(), "Eastern European Summer Time");

setTimeZone("/zoneinfo/America/Chicago");
assertEq(timeZoneName(), "Central Daylight Time");

setTimeZone("/this-part-is-ignored/zoneinfo/America/Chicago");
assertEq(timeZoneName(), "Central Daylight Time");

setTimeZone(":/this-part-is-ignored/zoneinfo/America/Phoenix");
assertEq(timeZoneName(), "Mountain Standard Time");

const invalidTimeZones = [
    // Non-existent timezone
    "foo",
    "/zoneinfo/foo",
    "/zoneinfo/",

    // Not capitalized
    "america/chicago",

    // No leading /
    "zoneinfo/America/Chicago",
    "foo/zoneinfo/America/Chicago",
    ":zoneinfo/America/Chicago",
    ":foo/zoneinfo/America/Chicago",

    // Path without "/zoneinfo/"
    "/foo/America/Chicago",
    ":/foo/America/Chicago",

    // Two colons
    "::Europe/London",
    "::/zoneinfo/America/Los_Angeles",
    "::/this-part-is-ignored/zoneinfo/America/Los_Angeles",
];

for (const invalid of invalidTimeZones) {
    assertThrowsInstanceOf(() => setTimeZone(invalid), Error);
}

if (typeof reportCompare === "function")
    reportCompare(true, true);