Files
steipete--codexbar/Tests/CodexBarTests/ChartBarHoverSelectionTests.swift
2026-07-13 12:22:33 +08:00

50 lines
1.7 KiB
Swift

import Foundation
import Testing
@testable import CodexBar
struct ChartBarHoverSelectionTests {
@Test
func `single selectable bar accepts the full plot`() {
#expect(ChartBarHoverSelection.accepts(
distanceFromBarCenter: 120,
barHalfWidth: 5,
selectableCount: 1))
}
@Test
func `multiple selectable bars accept only the bar body`() {
#expect(ChartBarHoverSelection.accepts(
distanceFromBarCenter: 5,
barHalfWidth: 5,
selectableCount: 2))
#expect(!ChartBarHoverSelection.accepts(
distanceFromBarCenter: 5.1,
barHalfWidth: 5,
selectableCount: 2))
}
@Test
func `calendar day spacing follows daylight saving transitions`() throws {
var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = try #require(TimeZone(identifier: "America/Los_Angeles"))
let springDate = try #require(calendar.date(from: DateComponents(
year: 2026,
month: 3,
day: 7,
hour: 12)))
let fallDate = try #require(calendar.date(from: DateComponents(
year: 2026,
month: 10,
day: 31,
hour: 12)))
let springNextDay = ChartBarHoverSelection.nextCalendarDay(after: springDate, calendar: calendar)
let fallNextDay = ChartBarHoverSelection.nextCalendarDay(after: fallDate, calendar: calendar)
#expect(calendar.component(.day, from: springNextDay) == 8)
#expect(springNextDay.timeIntervalSince(springDate) == 23 * 60 * 60)
#expect(calendar.component(.day, from: fallNextDay) == 1)
#expect(fallNextDay.timeIntervalSince(fallDate) == 25 * 60 * 60)
}
}