| // This source file is part of the Swift.org open source project |
| // |
| // Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors |
| // Licensed under Apache License v2.0 with Runtime Library Exception |
| // |
| // See http://swift.org/LICENSE.txt for license information |
| // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors |
| // |
| |
| |
| |
| #if DEPLOYMENT_RUNTIME_OBJC || os(Linux) |
| import Foundation |
| import XCTest |
| #else |
| import SwiftFoundation |
| import SwiftXCTest |
| #endif |
| |
| class TestISO8601DateFormatter: XCTestCase { |
| |
| static var allTests : [(String, (TestISO8601DateFormatter) -> () throws -> Void)] { |
| |
| return [ |
| ("test_stringFromDate", test_stringFromDate), |
| ("test_dateFromString", test_dateFromString), |
| ("test_stringFromDateClass", test_stringFromDateClass), |
| ] |
| } |
| |
| func test_stringFromDate() { |
| let formatter = DateFormatter() |
| formatter.dateFormat = "yyyy/MM/dd HH:mm zzz" |
| let someDateTime = formatter.date(from: "2016/10/08 22:31 GMT") |
| let isoFormatter = ISO8601DateFormatter() |
| |
| //default settings check |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "2016-10-08T22:31:00Z") |
| |
| /* |
| The following tests cover various cases when changing the .formatOptions property. |
| */ |
| isoFormatter.formatOptions = [.withInternetDateTime] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "2016-10-08T22:31:00Z") |
| |
| isoFormatter.formatOptions = [.withInternetDateTime, .withSpaceBetweenDateAndTime] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "2016-10-08 22:31:00Z") |
| |
| isoFormatter.formatOptions = .withFullTime |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "22:31:00Z") |
| |
| isoFormatter.formatOptions = .withFullDate |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "2016-10-08") |
| |
| isoFormatter.formatOptions = [.withFullTime, .withFullDate] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "2016-10-08T22:31:00Z") |
| |
| isoFormatter.formatOptions = [.withFullTime, .withFullDate, .withSpaceBetweenDateAndTime] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "2016-10-08 22:31:00Z") |
| |
| isoFormatter.formatOptions = [.withDay, .withTime] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "282T223100") |
| |
| isoFormatter.formatOptions = [.withWeekOfYear, .withTime] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "W40T223100") |
| |
| isoFormatter.formatOptions = [.withMonth, .withTime] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "10T223100") |
| |
| isoFormatter.formatOptions = [.withDay, .withWeekOfYear, .withTime] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "W4006T223100") |
| |
| isoFormatter.formatOptions = [.withDay, .withMonth, .withTime] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "1008T223100") |
| |
| isoFormatter.formatOptions = [.withWeekOfYear, .withMonth, .withTime] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "10W40T223100") |
| |
| isoFormatter.formatOptions = [.withWeekOfYear, .withMonth, .withTime, .withColonSeparatorInTime] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "10W40T22:31:00") |
| |
| isoFormatter.formatOptions = [.withWeekOfYear, .withMonth, .withTime, .withColonSeparatorInTime, .withSpaceBetweenDateAndTime] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "10W40 22:31:00") |
| |
| isoFormatter.formatOptions = [.withWeekOfYear, .withMonth, .withTime, .withColonSeparatorInTime, .withSpaceBetweenDateAndTime, .withDashSeparatorInDate] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "10-W40 22:31:00") |
| |
| isoFormatter.formatOptions = [.withDay, .withWeekOfYear] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "W4006") |
| |
| isoFormatter.formatOptions = [.withDay, .withMonth] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "1008") |
| |
| isoFormatter.formatOptions = [.withWeekOfYear, .withMonth] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "10W40") |
| |
| isoFormatter.formatOptions = [.withDay, .withWeekOfYear, .withMonth] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "10W4006") |
| |
| isoFormatter.formatOptions = [.withMonth, .withDay, .withWeekOfYear, .withDashSeparatorInDate] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "10-W40-06") |
| |
| /* |
| The following tests cover various cases when changing the .formatOptions property with a different TimeZone set. |
| */ |
| |
| isoFormatter.timeZone = TimeZone(identifier: "PST") |
| |
| isoFormatter.formatOptions = [.withInternetDateTime] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "2016-10-08T15:31:00-07:00") |
| |
| isoFormatter.formatOptions = [.withTime, .withTimeZone] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "153100-0700") |
| |
| isoFormatter.formatOptions = [.withDay, .withTimeZone] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "282-0700") |
| |
| isoFormatter.formatOptions = [.withWeekOfYear, .withTimeZone] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "W40-0700") |
| |
| isoFormatter.formatOptions = [.withMonth, .withTimeZone] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "10-0700") |
| |
| isoFormatter.formatOptions = [.withDay, .withWeekOfYear, .withTimeZone] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "W4006-0700") |
| |
| isoFormatter.formatOptions = [.withDay, .withMonth, .withTimeZone] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "1008-0700") |
| |
| isoFormatter.formatOptions = [.withDay, .withWeekOfYear, .withMonth, .withTimeZone] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "10W4006-0700") |
| |
| isoFormatter.formatOptions = [.withFullDate, .withTimeZone] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "2016-10-08-0700") |
| |
| isoFormatter.formatOptions = [.withFullTime, .withTimeZone] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "15:31:00-07:00") |
| |
| isoFormatter.formatOptions = [.withDay, .withWeekOfYear, .withMonth, .withTimeZone, .withColonSeparatorInTimeZone] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "10W4006-07:00") |
| |
| isoFormatter.formatOptions = [.withDay, .withWeekOfYear, .withMonth, .withTimeZone, .withColonSeparatorInTimeZone, .withDashSeparatorInDate] |
| XCTAssertEqual(isoFormatter.string(from: someDateTime!), "10-W40-06-07:00") |
| |
| } |
| |
| |
| |
| func test_dateFromString() { |
| |
| let f = ISO8601DateFormatter() |
| var result = f.date(from: "2016-10-08T00:00:00Z") |
| XCTAssertNotNil(result) |
| if let stringResult = result?.description { |
| XCTAssertEqual(stringResult, "2016-10-08 00:00:00 +0000") |
| } |
| |
| result = f.date(from: "2016-10-08T00:00:00+0600") |
| XCTAssertNotNil(result) |
| if let stringResult = result?.description { |
| XCTAssertEqual(stringResult, "2016-10-07 18:00:00 +0000") |
| } |
| |
| result = f.date(from: "2016-10-08T00:00:00-0600") |
| XCTAssertNotNil(result) |
| if let stringResult = result?.description { |
| XCTAssertEqual(stringResult, "2016-10-08 06:00:00 +0000") |
| } |
| |
| result = f.date(from: "12345") |
| XCTAssertNil(result) |
| |
| } |
| |
| |
| |
| func test_stringFromDateClass() { |
| |
| let formatter = DateFormatter() |
| formatter.dateFormat = "yyyy/MM/dd HH:mm zzz" |
| let someDateTime = formatter.date(from: "2016/10/08 22:31 GMT") |
| var timeZone = TimeZone(identifier: "GMT") |
| var formatOptions: ISO8601DateFormatter.Options = [.withInternetDateTime, .withDashSeparatorInDate, .withColonSeparatorInTime, .withColonSeparatorInTimeZone] |
| |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "2016-10-08T22:31:00Z") |
| |
| /* |
| The following tests cover various cases when changing the .formatOptions property. |
| */ |
| |
| formatOptions = [.withInternetDateTime] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "2016-10-08T22:31:00Z") |
| |
| formatOptions = [.withInternetDateTime, .withSpaceBetweenDateAndTime] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "2016-10-08 22:31:00Z") |
| |
| formatOptions = .withFullTime |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "22:31:00Z") |
| |
| formatOptions = .withFullDate |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "2016-10-08") |
| |
| formatOptions = [.withFullTime, .withFullDate] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "2016-10-08T22:31:00Z") |
| |
| formatOptions = [.withFullTime, .withFullDate, .withSpaceBetweenDateAndTime] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "2016-10-08 22:31:00Z") |
| |
| formatOptions = [.withDay, .withTime] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "282T223100") |
| |
| formatOptions = [.withWeekOfYear, .withTime] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "W40T223100") |
| |
| formatOptions = [.withMonth, .withTime] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "10T223100") |
| |
| formatOptions = [.withDay, .withWeekOfYear, .withTime] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "W4006T223100") |
| |
| formatOptions = [.withDay, .withMonth, .withTime] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "1008T223100") |
| |
| formatOptions = [.withWeekOfYear, .withMonth, .withTime] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "10W40T223100") |
| |
| formatOptions = [.withWeekOfYear, .withMonth, .withTime, .withColonSeparatorInTime] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "10W40T22:31:00") |
| |
| formatOptions = [.withWeekOfYear, .withMonth, .withTime, .withColonSeparatorInTime, .withSpaceBetweenDateAndTime] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "10W40 22:31:00") |
| |
| formatOptions = [.withWeekOfYear, .withMonth, .withTime, .withColonSeparatorInTime, .withSpaceBetweenDateAndTime, .withDashSeparatorInDate] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "10-W40 22:31:00") |
| |
| formatOptions = [.withDay, .withWeekOfYear] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "W4006") |
| |
| formatOptions = [.withDay, .withMonth] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "1008") |
| |
| formatOptions = [.withWeekOfYear, .withMonth] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "10W40") |
| |
| formatOptions = [.withDay, .withWeekOfYear, .withMonth] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "10W4006") |
| |
| formatOptions = [.withMonth, .withDay, .withWeekOfYear, .withDashSeparatorInDate] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "10-W40-06") |
| |
| /* |
| The following tests cover various cases when changing the .formatOptions property with a different TimeZone set. |
| */ |
| |
| timeZone = TimeZone(identifier: "PST") |
| |
| formatOptions = [.withInternetDateTime] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "2016-10-08T15:31:00-07:00") |
| |
| formatOptions = [.withTime, .withTimeZone] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "153100-0700") |
| |
| formatOptions = [.withDay, .withTimeZone] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "282-0700") |
| |
| formatOptions = [.withWeekOfYear, .withTimeZone] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "W40-0700") |
| |
| formatOptions = [.withMonth, .withTimeZone] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "10-0700") |
| |
| formatOptions = [.withDay, .withWeekOfYear, .withTimeZone] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "W4006-0700") |
| |
| formatOptions = [.withDay, .withMonth, .withTimeZone] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "1008-0700") |
| |
| formatOptions = [.withDay, .withWeekOfYear, .withMonth, .withTimeZone] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "10W4006-0700") |
| |
| formatOptions = [.withFullDate, .withTimeZone] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "2016-10-08-0700") |
| |
| formatOptions = [.withFullTime, .withTimeZone] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "15:31:00-07:00") |
| |
| formatOptions = [.withDay, .withWeekOfYear, .withMonth, .withTimeZone, .withColonSeparatorInTimeZone] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "10W4006-07:00") |
| |
| formatOptions = [.withDay, .withWeekOfYear, .withMonth, .withTimeZone, .withColonSeparatorInTimeZone, .withDashSeparatorInDate] |
| XCTAssertEqual(ISO8601DateFormatter.string(from: someDateTime!, timeZone: timeZone!, formatOptions: formatOptions), "10-W40-06-07:00") |
| |
| } |
| |
| } |