@@ -25,6 +25,7 @@ class TestCalendar: XCTestCase {
25
25
( " test_ampmSymbols " , test_ampmSymbols) ,
26
26
( " test_currentCalendarRRstability " , test_currentCalendarRRstability) ,
27
27
( " test_hashing " , test_hashing) ,
28
+ ( " test_dateFromDoesntMutate " , test_dateFromDoesntMutate) ,
28
29
]
29
30
}
30
31
@@ -227,6 +228,32 @@ class TestCalendar: XCTestCase {
227
228
]
228
229
checkHashable ( calendars2, equalityOracle: { $0 == $1 } )
229
230
}
231
+
232
+ func test_dateFromDoesntMutate( ) throws {
233
+ // Check that date(from:) does not change the timeZone of the calendar
234
+ let df = DateFormatter ( )
235
+ df. dateFormat = " yyyy-MM-dd "
236
+ df. timeZone = try TimeZone ( identifier: " UTC " ) . unwrapped ( )
237
+
238
+ var calendar = Calendar ( identifier: . gregorian)
239
+ calendar. locale = Locale ( identifier: " en_US_POSIX " )
240
+ calendar. timeZone = try TimeZone ( secondsFromGMT: 0 ) . unwrapped ( )
241
+
242
+ let calendarCopy = calendar
243
+ XCTAssertEqual ( calendarCopy. timeZone. identifier, " GMT " )
244
+ XCTAssertEqual ( calendarCopy. timeZone. description, " GMT (fixed) " )
245
+
246
+ let dc = try calendarCopy. dateComponents ( in: TimeZone ( identifier: " America/New_York " ) . unwrapped ( ) , from: df. date ( from: " 2019-01-01 " ) . unwrapped ( ) )
247
+ XCTAssertEqual ( calendarCopy. timeZone. identifier, " GMT " )
248
+ XCTAssertEqual ( calendarCopy. timeZone. description, " GMT (fixed) " )
249
+
250
+ let dt = try calendarCopy. date ( from: dc) . unwrapped ( )
251
+ XCTAssertEqual ( dt. description, " 2019-01-01 00:00:00 +0000 " )
252
+ XCTAssertEqual ( calendarCopy. timeZone. identifier, " GMT " )
253
+ XCTAssertEqual ( calendarCopy. timeZone. description, " GMT (fixed) " )
254
+ XCTAssertEqual ( calendarCopy. timeZone, calendar. timeZone)
255
+ XCTAssertEqual ( calendarCopy, calendar)
256
+ }
230
257
}
231
258
232
259
class TestNSDateComponents : XCTestCase {
0 commit comments