52 lines
1.8 KiB
Swift
52 lines
1.8 KiB
Swift
|
|
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"))
|
||
|
|
}
|
||
|
|
}
|