Files
KisaniCal/KisaniCalTests/NLRecurrenceParseTests.swift

52 lines
1.8 KiB
Swift
Raw Normal View History

import XCTest
@testable import KisaniCal
/// Natural-language recurrence detection in the quick-add parser.
final class NLRecurrenceParseTests: XCTestCase {
private func label(_ s: String) -> String? {
NLTaskParser.parse(s).recurrenceLabel
}
func testDailyVariants() {
XCTAssertEqual(label("remind me to pray everyday"), "Daily") // the reported case
XCTAssertEqual(label("remind me to pray every day"), "Daily")
XCTAssertEqual(label("stretch daily"), "Daily")
XCTAssertEqual(label("read each day"), "Daily")
}
func testWeekdayVsWeekly() {
XCTAssertEqual(label("standup every weekday"), "Every Weekday")
XCTAssertEqual(label("standup weekdays"), "Every Weekday")
XCTAssertEqual(label("groceries every week"), "Weekly")
XCTAssertEqual(label("groceries weekly"), "Weekly")
}
func testMonthlyYearly() {
XCTAssertEqual(label("pay rent every month"), "Monthly")
XCTAssertEqual(label("pay rent monthly"), "Monthly")
XCTAssertEqual(label("renew every year"), "Yearly")
XCTAssertEqual(label("renew annually"), "Yearly")
XCTAssertEqual(label("file taxes yearly"), "Yearly")
}
func testBirthdayIsYearly() {
let p = NLTaskParser.parse("Jay's birthday")
XCTAssertTrue(p.isBirthday)
XCTAssertTrue(p.isRecurring)
XCTAssertEqual(p.recurrenceLabel, "Yearly")
}
func testNonRecurringStaysNil() {
XCTAssertNil(label("buy milk"))
XCTAssertNil(label("call mom tomorrow"))
}
/// Sub-day cadence isn't supported by the (day-granular) occurrence engine, so it
/// must NOT be mislabeled as Daily/etc. it stays a one-off.
func testHourlyIsNotMisclassified() {
XCTAssertNil(label("drink water every hour"))
XCTAssertNil(label("check oven hourly"))
}
}