50 lines
1.7 KiB
Swift
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)
|
|
}
|
|
}
|