113 lines
3.5 KiB
Swift
113 lines
3.5 KiB
Swift
// ── Format & Time Blindness Tests ──────────────────────────────
|
|
|
|
import XCTest
|
|
@testable import ChronoMind
|
|
|
|
final class FormatTests: XCTestCase {
|
|
|
|
// MARK: - Format Duration
|
|
|
|
func testFormatDurationZero() {
|
|
XCTAssertEqual(formatDuration(0), "00:00")
|
|
XCTAssertEqual(formatDuration(-5), "00:00")
|
|
}
|
|
|
|
func testFormatDurationSeconds() {
|
|
XCTAssertEqual(formatDuration(30), "00:30")
|
|
XCTAssertEqual(formatDuration(59), "00:59")
|
|
}
|
|
|
|
func testFormatDurationMinutes() {
|
|
XCTAssertEqual(formatDuration(60), "01:00")
|
|
XCTAssertEqual(formatDuration(90), "01:30")
|
|
XCTAssertEqual(formatDuration(600), "10:00")
|
|
XCTAssertEqual(formatDuration(1500), "25:00")
|
|
}
|
|
|
|
func testFormatDurationHours() {
|
|
XCTAssertEqual(formatDuration(3600), "01:00:00")
|
|
XCTAssertEqual(formatDuration(5400), "01:30:00")
|
|
XCTAssertEqual(formatDuration(7200), "02:00:00")
|
|
}
|
|
|
|
// MARK: - Format Duration Compact
|
|
|
|
func testFormatDurationCompactZero() {
|
|
XCTAssertEqual(formatDurationCompact(0), "0s")
|
|
XCTAssertEqual(formatDurationCompact(-1), "0s")
|
|
}
|
|
|
|
func testFormatDurationCompactSeconds() {
|
|
XCTAssertEqual(formatDurationCompact(30), "30s")
|
|
XCTAssertEqual(formatDurationCompact(59), "59s")
|
|
}
|
|
|
|
func testFormatDurationCompactMinutes() {
|
|
XCTAssertEqual(formatDurationCompact(60), "1m")
|
|
XCTAssertEqual(formatDurationCompact(150), "2m 30s")
|
|
XCTAssertEqual(formatDurationCompact(600), "10m")
|
|
XCTAssertEqual(formatDurationCompact(1500), "25m")
|
|
}
|
|
|
|
func testFormatDurationCompactHours() {
|
|
XCTAssertEqual(formatDurationCompact(3600), "1h")
|
|
XCTAssertEqual(formatDurationCompact(5400), "1h 30m")
|
|
XCTAssertEqual(formatDurationCompact(7200), "2h")
|
|
}
|
|
|
|
// MARK: - Format Relative Time
|
|
|
|
func testFormatRelativeTimeNow() {
|
|
let now = Date()
|
|
XCTAssertEqual(formatRelativeTime(now, now: now), "now")
|
|
XCTAssertEqual(formatRelativeTime(now.addingTimeInterval(10), now: now), "now")
|
|
}
|
|
|
|
func testFormatRelativeTimeFuture() {
|
|
let now = Date()
|
|
let result = formatRelativeTime(now.addingTimeInterval(300), now: now) // 5 min
|
|
XCTAssertTrue(result.hasPrefix("in "))
|
|
}
|
|
|
|
func testFormatRelativeTimePast() {
|
|
let now = Date()
|
|
let result = formatRelativeTime(now.addingTimeInterval(-300), now: now) // 5 min ago
|
|
XCTAssertTrue(result.hasSuffix(" ago"))
|
|
}
|
|
|
|
// MARK: - Time Blindness
|
|
|
|
func testTimeReferenceZero() {
|
|
XCTAssertNil(getTimeReference(minutes: 0))
|
|
XCTAssertNil(getTimeReference(minutes: -1))
|
|
}
|
|
|
|
func testTimeReferenceShort() {
|
|
let ref = getTimeReference(minutes: 1)
|
|
XCTAssertNotNil(ref)
|
|
XCTAssertTrue(ref!.contains("deep breath"))
|
|
}
|
|
|
|
func testTimeReferencePomodoro() {
|
|
let ref = getTimeReference(minutes: 25)
|
|
XCTAssertNotNil(ref)
|
|
XCTAssertTrue(ref!.contains("Pomodoro"))
|
|
}
|
|
|
|
func testTimeReferenceLong() {
|
|
let ref = getTimeReference(minutes: 90)
|
|
XCTAssertNotNil(ref)
|
|
XCTAssertTrue(ref!.contains("movie"))
|
|
}
|
|
|
|
func testTimeReferenceTooLong() {
|
|
XCTAssertNil(getTimeReference(minutes: 1000))
|
|
}
|
|
|
|
func testTimeReferenceFromSeconds() {
|
|
let ref = getTimeReference(seconds: 1500) // 25 min
|
|
XCTAssertNotNil(ref)
|
|
XCTAssertTrue(ref!.contains("Pomodoro"))
|
|
}
|
|
}
|