oficina / calendar Public

Clone
git clone https://amadan.net/oficina/calendar

Plain git — no account needed to clone.

Download

Download this file

1import XCTest
2@testable import CalendarKit
3final class CivilDateTests: XCTestCase {
4 @MainActor func testNewEventStartsAtNineAcrossDST() {
5 for day in ["2026-03-29", "2026-10-25"] {
6 let date=ISO8601DateFormatter().date(from: day+"T12:00:00Z")!
7 let model=CalendarModel(zone: "Europe/Dublin", date: date)
8 XCTAssertEqual(model.newEvent().start_local, day+"T09:00")
9 }
10 }
11 @MainActor func testGapCannotSilentlyBecomeToday() {
12 let model=CalendarModel(zone: "Europe/Dublin")
13 XCTAssertNil(model.parse("2026-03-29T01:30", allDay: false, zone: "Europe/Dublin"))
14 }
15 func testAllDayUsesOccurrenceCivilDatesAcrossZones() {
16 var event=CalendarEvent(); event.all_day=true
17 event.day_start="2026-09-12"; event.day_end="2026-09-13"
18 event.start_local="2026-09-01"; event.end_local="2026-09-02" // recurrence master must not win
19 event.tz="UTC"; event.start=1789171200; event.end=1789257600
20 for zone in ["America/Los_Angeles", "Pacific/Kiritimati"] {
21 var calendar=Calendar(identifier: .gregorian);calendar.timeZone=TimeZone(identifier: zone)!
22 for day in [11,12,13] {
23 let date=calendar.date(from: DateComponents(year:2026,month:9,day:day,hour:12))!
24 XCTAssertEqual(event.occurs(on:date,calendar:calendar),day==12)
25 }
26 }
27 }
28}
29