Files
silverbullet-icalendar/timezones_test.ts

44 lines
1.7 KiB
TypeScript

import { assertEquals } from "jsr:@std/assert";
import { resolveIanaName, getUtcOffsetMs } from "./timezones.ts";
Deno.test("resolveIanaName - Windows names", () => {
assertEquals(resolveIanaName("Eastern Standard Time"), "America/New_York");
assertEquals(resolveIanaName("Romance Standard Time"), "Europe/Paris");
assertEquals(resolveIanaName("Pacific Standard Time"), "America/Los_Angeles");
});
Deno.test("resolveIanaName - IANA names (identity)", () => {
assertEquals(resolveIanaName("America/Chicago"), "America/Chicago");
assertEquals(resolveIanaName("Europe/London"), "Europe/London");
});
Deno.test("resolveIanaName - UTC and special cases", () => {
assertEquals(resolveIanaName("UTC"), "UTC");
assertEquals(resolveIanaName("None"), "UTC");
assertEquals(resolveIanaName(""), "UTC");
});
Deno.test("resolveIanaName - Unknown names", () => {
assertEquals(resolveIanaName("Mars Standard Time"), null);
});
Deno.test("getUtcOffsetMs - New York (DST check)", () => {
const jan = new Date("2025-01-15T12:00:00Z");
const july = new Date("2025-07-15T12:00:00Z");
// America/New_York is UTC-5 in Winter
assertEquals(getUtcOffsetMs("America/New_York", jan), -5 * 3600000);
// America/New_York is UTC-4 in Summer
assertEquals(getUtcOffsetMs("America/New_York", july), -4 * 3600000);
});
Deno.test("getUtcOffsetMs - Paris (DST check)", () => {
const jan = new Date("2025-01-15T12:00:00Z");
const july = new Date("2025-07-15T12:00:00Z");
// Europe/Paris is UTC+1 in Winter
assertEquals(getUtcOffsetMs("Europe/Paris", jan), 1 * 3600000);
// Europe/Paris is UTC+2 in Summer
assertEquals(getUtcOffsetMs("Europe/Paris", july), 2 * 3600000);
});