Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Sources/RemindersLibrary/NaturalLanguage.swift
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import ArgumentParser
import Foundation

private let calendar = Calendar.current
private let calendar = Calendar(identifier: .gregorian)
private let allComponents: Set<Calendar.Component> = [
.era, .year, .yearForWeekOfYear, .quarter, .month,
.weekOfYear, .weekOfMonth, .weekday, .weekdayOrdinal, .day,
Expand Down
44 changes: 26 additions & 18 deletions Tests/RemindersTests/NaturalLanguageTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,82 +3,90 @@ import Foundation
import XCTest

final class NaturalLanguageTests: XCTestCase {
private let calendar = Calendar(identifier: .gregorian)

func testYesterday() throws {
let components = try XCTUnwrap(DateComponents(argument: "yesterday"))
let tomorrow = try XCTUnwrap(Calendar.current.date(byAdding: .day, value: -1, to: Date()))
let expectedComponents = Calendar.current.dateComponents(
let tomorrow = try XCTUnwrap(calendar.date(byAdding: .day, value: -1, to: Date()))
let expectedComponents = calendar.dateComponents(
calendarComponents(except: timeComponents), from: tomorrow)

XCTAssertEqual(components, expectedComponents)
}

func testTodayString() throws {
let components = try XCTUnwrap(DateComponents(argument: "today"))
let expectedComponents = Calendar.current.dateComponents(
let expectedComponents = calendar.dateComponents(
calendarComponents(except: timeComponents), from: Date())

XCTAssertEqual(components, expectedComponents)
}

func testTodayNoon() throws {
let components = try XCTUnwrap(DateComponents(argument: "12:00"))
let today = try XCTUnwrap(Calendar.current.date(bySettingHour: 12, minute: 0, second: 0, of: Date()))
let expectedComponents = Calendar.current.dateComponents(calendarComponents(), from: today)
let today = try XCTUnwrap(calendar.date(bySettingHour: 12, minute: 0, second: 0, of: Date()))
let expectedComponents = calendar.dateComponents(calendarComponents(), from: today)

XCTAssertEqual(components, expectedComponents)
}

func testTonight() throws {
let components = try XCTUnwrap(DateComponents(argument: "tonight"))
let today = try XCTUnwrap(Calendar.current.date(bySettingHour: 19, minute: 0, second: 0, of: Date()))
let expectedComponents = Calendar.current.dateComponents(calendarComponents(), from: today)
let today = try XCTUnwrap(calendar.date(bySettingHour: 19, minute: 0, second: 0, of: Date()))
let expectedComponents = calendar.dateComponents(calendarComponents(), from: today)

XCTAssertEqual(components, expectedComponents)
}

func testTomorrow() throws {
let components = try XCTUnwrap(DateComponents(argument: "tomorrow"))
let tomorrow = try XCTUnwrap(Calendar.current.date(byAdding: .day, value: 1, to: Date()))
let expectedComponents = Calendar.current.dateComponents(
let tomorrow = try XCTUnwrap(calendar.date(byAdding: .day, value: 1, to: Date()))
let expectedComponents = calendar.dateComponents(
calendarComponents(except: timeComponents), from: tomorrow)

XCTAssertEqual(components, expectedComponents)
}

func testUsesGregorianCalendar() throws {
let components = try XCTUnwrap(DateComponents(argument: "tomorrow"))

XCTAssertEqual(components.calendar?.identifier, .gregorian)
}

func testTomorrowAtTime() throws {
let components = try XCTUnwrap(DateComponents(argument: "tomorrow 9pm"))
let tomorrow = try XCTUnwrap(Calendar.current.date(byAdding: .day, value: 1, to: Date()))
let tomorrow = try XCTUnwrap(calendar.date(byAdding: .day, value: 1, to: Date()))
let tomorrowAt9 = try XCTUnwrap(
Calendar.current.date(bySettingHour: 21, minute: 0, second: 0, of: tomorrow))
let expectedComponents = Calendar.current.dateComponents(calendarComponents(), from: tomorrowAt9)
calendar.date(bySettingHour: 21, minute: 0, second: 0, of: tomorrow))
let expectedComponents = calendar.dateComponents(calendarComponents(), from: tomorrowAt9)

XCTAssertEqual(components, expectedComponents)
}

func testRelativeDayCount() throws {
let components = try XCTUnwrap(DateComponents(argument: "in 2 days"))
let tomorrow = try XCTUnwrap(Calendar.current.date(byAdding: .day, value: 2, to: Date()))
let expectedComponents = Calendar.current.dateComponents(
let tomorrow = try XCTUnwrap(calendar.date(byAdding: .day, value: 2, to: Date()))
let expectedComponents = calendar.dateComponents(
calendarComponents(except: timeComponents), from: tomorrow)

XCTAssertEqual(components, expectedComponents)
}

func testNextSaturday() throws {
let components = try XCTUnwrap(DateComponents(argument: "next saturday"))
let date = try XCTUnwrap(Calendar.current.date(from: components))
let date = try XCTUnwrap(calendar.date(from: components))

XCTAssertTrue(Calendar.current.isDateInWeekend(date))
XCTAssertTrue(calendar.isDateInWeekend(date))
}

// FB8921206
func testNextWeekend() throws {
// TODO: This should be inverted but DataDetector doesn't support it right now
XCTAssertNil(DateComponents(argument: "next weekend"))
// let components = try XCTUnwrap(DateComponents(argument: "next weekend"))
// let date = try XCTUnwrap(Calendar.current.date(from: components))
// let date = try XCTUnwrap(calendar.date(from: components))

// XCTAssertTrue(Calendar.current.isDateInWeekend(date))
// XCTAssertTrue(calendar.isDateInWeekend(date))
}

func testSpecificDays() throws {
Expand Down
Loading