1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
class TestDateComponents: XCTestCase {
func test_hash() {
let c1 = DateComponents(year: 2018, month: 8, day: 1)
let c2 = DateComponents(year: 2018, month: 8, day: 1)
XCTAssertEqual(c1, c2)
XCTAssertEqual(c1.hashValue, c2.hashValue)
checkHashing_ValueType(
initialValue: DateComponents(),
byMutating: \DateComponents.calendar,
throughValues: [
Calendar(identifier: .gregorian),
Calendar(identifier: .buddhist),
Calendar(identifier: .chinese),
Calendar(identifier: .coptic),
Calendar(identifier: .hebrew),
Calendar(identifier: .indian),
Calendar(identifier: .islamic),
Calendar(identifier: .iso8601),
Calendar(identifier: .japanese),
Calendar(identifier: .persian)
])
checkHashing_ValueType(
initialValue: DateComponents(),
byMutating: \DateComponents.timeZone,
throughValues: (-10...10).map { TimeZone(secondsFromGMT: 3600 * $0) })
// Note: These assume components aren't range checked.
let integers: [Int?] = (0..<20).map { $0 as Int? }
checkHashing_ValueType(
initialValue: DateComponents(),
byMutating: \DateComponents.era,
throughValues: integers)
checkHashing_ValueType(
initialValue: DateComponents(),
byMutating: \DateComponents.year,
throughValues: integers)
checkHashing_ValueType(
initialValue: DateComponents(),
byMutating: \DateComponents.quarter,
throughValues: integers)
checkHashing_ValueType(
initialValue: DateComponents(),
byMutating: \DateComponents.month,
throughValues: integers)
checkHashing_ValueType(
initialValue: DateComponents(),
byMutating: \DateComponents.day,
throughValues: integers)
checkHashing_ValueType(
initialValue: DateComponents(),
byMutating: \DateComponents.hour,
throughValues: integers)
checkHashing_ValueType(
initialValue: DateComponents(),
byMutating: \DateComponents.minute,
throughValues: integers)
checkHashing_ValueType(
initialValue: DateComponents(),
byMutating: \DateComponents.second,
throughValues: integers)
checkHashing_ValueType(
initialValue: DateComponents(),
byMutating: \DateComponents.nanosecond,
throughValues: integers)
checkHashing_ValueType(
initialValue: DateComponents(),
byMutating: \DateComponents.weekOfYear,
throughValues: integers)
checkHashing_ValueType(
initialValue: DateComponents(),
byMutating: \DateComponents.weekOfMonth,
throughValues: integers)
checkHashing_ValueType(
initialValue: DateComponents(),
byMutating: \DateComponents.yearForWeekOfYear,
throughValues: integers)
checkHashing_ValueType(
initialValue: DateComponents(),
byMutating: \DateComponents.weekday,
throughValues: integers)
checkHashing_ValueType(
initialValue: DateComponents(),
byMutating: \DateComponents.weekdayOrdinal,
throughValues: integers)
// isLeapMonth does not have enough values to test it here.
}
func test_isValidDate() throws {
// SR-11569
let calendarTimeZone = try XCTUnwrap(TimeZone(secondsFromGMT: 0))
let dateComponentsTimeZone = try XCTUnwrap(TimeZone(secondsFromGMT: 3600))
var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = calendarTimeZone
var dc = DateComponents()
dc.calendar = calendar
dc.timeZone = dateComponentsTimeZone
dc.year = 2019
dc.month = 1
dc.day = 2
dc.hour = 3
dc.minute = 4
dc.second = 5
dc.nanosecond = 6
XCTAssertTrue(dc.isValidDate)
}
}
|