Skip to content

Commit 22d5467

Browse files
authored
Merge pull request #1446 from swiftlang/automerge/merge-main-2025-07-19_09-03
Merge `release/6.2` into `main`
2 parents d007dc6 + 1d9f578 commit 22d5467

File tree

2 files changed

+30
-17
lines changed

2 files changed

+30
-17
lines changed

Tests/FoundationInternationalizationTests/Formatting/DateRelativeFormatStyleTests.swift

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,20 @@ private struct DateRelativeFormatStyleTests {
4545
#expect(style.format(Date(timeIntervalSinceNow: oneHour * 1.5)) == "in 2 hours")
4646
}
4747

48-
@Test func dateRelativeFormatConvenience() throws {
49-
let now = Date()
50-
let tomorrow = Date(timeInterval: oneDay + oneHour * 2, since: now)
51-
let future = Date(timeInterval: oneDay * 14 + oneHour * 3, since: now)
52-
let past = Date(timeInterval: -(oneDay * 14 + oneHour * 2), since: now)
53-
54-
#expect(past.formatted(.relative(presentation: .named).locale(enUSLocale)) == Date.RelativeFormatStyle(presentation: .named, unitsStyle: .wide).locale(enUSLocale).format(past))
55-
#expect(tomorrow.formatted(.relative(presentation: .numeric).locale(enUSLocale)) == Date.RelativeFormatStyle(presentation: .numeric, unitsStyle: .wide).locale(enUSLocale).format(tomorrow))
56-
#expect(tomorrow.formatted(Date.RelativeFormatStyle(presentation: .named).locale(enUSLocale)) == Date.RelativeFormatStyle(presentation: .named).locale(enUSLocale).format(tomorrow))
57-
58-
#expect(past.formatted(Date.RelativeFormatStyle(unitsStyle: .spellOut, capitalizationContext: .beginningOfSentence).locale(enUSLocale)) == Date.RelativeFormatStyle(unitsStyle: .spellOut, capitalizationContext: .beginningOfSentence).locale(enUSLocale).format(past))
59-
#expect(future.formatted(.relative(presentation: .numeric, unitsStyle: .abbreviated).locale(enUSLocale)) == Date.RelativeFormatStyle(unitsStyle: .abbreviated).locale(enUSLocale).format(future))
48+
@Test func dateRelativeFormatConvenience() async {
49+
await usingCurrentInternationalizationPreferences {
50+
let now = Date()
51+
let tomorrow = Date(timeInterval: oneDay + oneHour * 2, since: now)
52+
let future = Date(timeInterval: oneDay * 14 + oneHour * 3, since: now)
53+
let past = Date(timeInterval: -(oneDay * 14 + oneHour * 2), since: now)
54+
55+
#expect(past.formatted(.relative(presentation: .named).locale(enUSLocale)) == Date.RelativeFormatStyle(presentation: .named, unitsStyle: .wide).locale(enUSLocale).format(past))
56+
#expect(tomorrow.formatted(.relative(presentation: .numeric).locale(enUSLocale)) == Date.RelativeFormatStyle(presentation: .numeric, unitsStyle: .wide).locale(enUSLocale).format(tomorrow))
57+
#expect(tomorrow.formatted(Date.RelativeFormatStyle(presentation: .named).locale(enUSLocale)) == Date.RelativeFormatStyle(presentation: .named).locale(enUSLocale).format(tomorrow))
58+
59+
#expect(past.formatted(Date.RelativeFormatStyle(unitsStyle: .spellOut, capitalizationContext: .beginningOfSentence).locale(enUSLocale)) == Date.RelativeFormatStyle(unitsStyle: .spellOut, capitalizationContext: .beginningOfSentence).locale(enUSLocale).format(past))
60+
#expect(future.formatted(.relative(presentation: .numeric, unitsStyle: .abbreviated).locale(enUSLocale)) == Date.RelativeFormatStyle(unitsStyle: .abbreviated).locale(enUSLocale).format(future))
61+
}
6062
}
6163

6264
@Test func namedStyleRounding() throws {
@@ -332,8 +334,8 @@ private struct DateRelativeFormatStyleTests {
332334
var named = Date.RelativeFormatStyle(presentation: .named, locale: enUSLocale, calendar: calendar)
333335

334336
func _verifyStyle(_ dateStr: String, relativeTo: String, expected: String, sourceLocation: SourceLocation = #_sourceLocation) {
335-
let date = try! Date.ISO8601FormatStyle().parse(dateStr)
336-
let refDate = try! Date.ISO8601FormatStyle().parse(relativeTo)
337+
let date = try! Date.ISO8601FormatStyle(timeZone: .gmt).parse(dateStr)
338+
let refDate = try! Date.ISO8601FormatStyle(timeZone: .gmt).parse(relativeTo)
337339
let formatted = named._format(date, refDate: refDate)
338340
#expect(formatted == expected, sourceLocation: sourceLocation)
339341
}
@@ -408,7 +410,7 @@ private struct TestDateAnchoredRelativeDiscreteConformance {
408410

409411
@Test func examples() throws {
410412
var now = Date.now
411-
var style = Date.AnchoredRelativeFormatStyle(anchor: now)
413+
var style = Date.AnchoredRelativeFormatStyle(anchor: now, calendar: calendar)
412414
.locale(enUSLocale)
413415

414416
#expect(style.discreteInput(after: now.addingTimeInterval(1)) == now.addingTimeInterval(1.5))
@@ -868,28 +870,32 @@ private struct TestDateAnchoredRelativeDiscreteConformance {
868870
now = Date(timeIntervalSinceReferenceDate: 724685580.417914)
869871
style = .init(anchor: now, allowedFields: [.minute], presentation: .numeric, unitsStyle: .abbreviated)
870872
style.calendar = self.calendar
873+
style.locale = enUSLocale
871874
#expect(try #require(style.discreteInput(after: Date(timeIntervalSinceReferenceDate: 12176601839.415668))) > Date(timeIntervalSinceReferenceDate: 12176601839.415668))
872875

873876

874877
now = Date(timeIntervalSinceReferenceDate: 724686086.706003)
875878
style = .init(anchor: now, allowedFields: [.minute], presentation: .numeric, unitsStyle: .abbreviated)
876879
style.calendar = self.calendar
880+
style.locale = enUSLocale
877881
#expect(try #require(style.discreteInput(before: Date(timeIntervalSinceReferenceDate: -24141834543.08099))) < Date(timeIntervalSinceReferenceDate: -24141834543.08099))
878882

879883
now = Date(timeIntervalSinceReferenceDate: 724688507.315708)
880884
style = .init(anchor: now, allowedFields: [.minute, .second], presentation: .numeric, unitsStyle: .abbreviated)
881885
style.calendar = self.calendar
886+
style.locale = enUSLocale
882887
#expect(try #require(style.discreteInput(after: Date(timeIntervalSinceReferenceDate: 6013270816.926929))) > Date(timeIntervalSinceReferenceDate: 6013270816.926929))
883888

884889
now = Date(timeIntervalSinceReferenceDate: 724689590.234374)
885890
style = .init(anchor: now, allowedFields: [.month, .week], presentation: .numeric, unitsStyle: .abbreviated)
886891
style.calendar = self.calendar
887-
print(style.format(Date(timeIntervalSinceReferenceDate: 722325435.4645464)))
892+
style.locale = enUSLocale
888893
#expect(try #require(style.discreteInput(after: Date(timeIntervalSinceReferenceDate: 722325435.4645464))) > Date(timeIntervalSinceReferenceDate: 722325435.4645464))
889894

890895
now = Date(timeIntervalSinceReferenceDate: 724701229.591328)
891896
style = .init(anchor: now, presentation: .numeric, unitsStyle: .abbreviated)
892897
style.calendar = self.calendar
898+
style.locale = enUSLocale
893899
/// style.discreteInput(before: Date(timeIntervalSinceReferenceDate: -7256167.2374657225)) returned Date(timeIntervalSinceReferenceDate: -31622400.5), but
894900
/// Date(timeIntervalSinceReferenceDate: -31622400.49), which is a valid input, because style.input(after: Date(timeIntervalSinceReferenceDate: -31622400.5)) = Date(timeIntervalSinceReferenceDate: -31622400.49),
895901
/// already produces a different formatted output 'in 24 yr' compared to style.format(Date(timeIntervalSinceReferenceDate: -7256167.2374657225)), which is 'in 23 yr'
@@ -899,6 +905,7 @@ private struct TestDateAnchoredRelativeDiscreteConformance {
899905
now = Date(timeIntervalSinceReferenceDate: 724707086.436074)
900906
style = .init(anchor: now, presentation: .numeric, unitsStyle: .abbreviated)
901907
style.calendar = self.calendar
908+
style.locale = enUSLocale
902909
/// style.discreteInput(after: Date(timeIntervalSinceReferenceDate: -728.7911686889214)) returned Date(timeIntervalSinceReferenceDate: 0.9360740142747098), but
903910
/// Date(timeIntervalSinceReferenceDate: 0.9260740142747098), which is a valid input, because style.input(before: Date(timeIntervalSinceReferenceDate: 0.9360740142747098)) = Date(timeIntervalSinceReferenceDate: 0.9260740142747098),
904911
/// already produces a different formatted output 'in 22 yr' compared to style.format(Date(timeIntervalSinceReferenceDate: -728.7911686889214)), which is 'in 23 yr'
@@ -908,11 +915,13 @@ private struct TestDateAnchoredRelativeDiscreteConformance {
908915
now = Date(timeIntervalSinceReferenceDate: 724707983.332096)
909916
style = .init(anchor: now, allowedFields: [.year, .month, .day, .hour, .minute], presentation: .named, unitsStyle: .wide)
910917
style.calendar = self.calendar
918+
style.locale = enUSLocale
911919
#expect(try #require(style.discreteInput(after: Date(timeIntervalSinceReferenceDate: 722086631.228182))) > Date(timeIntervalSinceReferenceDate: 722086631.228182))
912920

913921
now = Date(timeIntervalSinceReferenceDate: 725887340.112405)
914922
style = .init(anchor: now, allowedFields: [.month, .week, .day, .hour], presentation: .numeric, unitsStyle: .abbreviated)
915923
style.calendar = self.calendar
924+
style.locale = enUSLocale
916925
/// style.discreteInput(before: Date(timeIntervalSinceReferenceDate: 728224511.9413433)) returned Date(timeIntervalSinceReferenceDate: 727487999.6124048), but
917926
/// Date(timeIntervalSinceReferenceDate: 727487999.6224048), which is a valid input, because style.input(after: Date(timeIntervalSinceReferenceDate: 727487999.6124048)) = Date(timeIntervalSinceReferenceDate: 727487999.6224048),
918927
/// already produces a different formatted output '3 wk ago' compared to style.format(Date(timeIntervalSinceReferenceDate: 728224511.9413433)), which is '1 mo ago'
@@ -921,6 +930,7 @@ private struct TestDateAnchoredRelativeDiscreteConformance {
921930
now = Date(timeIntervalSinceReferenceDate: 725895690.016681)
922931
style = .init(anchor: now, presentation: .numeric, unitsStyle: .abbreviated)
923932
style.calendar = self.calendar
933+
style.locale = enUSLocale
924934
/// style.discreteInput(before: Date(timeIntervalSinceReferenceDate: 726561180.513301)) returned Date(timeIntervalSinceReferenceDate: 726364799.5166808), but
925935
/// Date(timeIntervalSinceReferenceDate: 726364799.5266808), which is a valid input, because style.input(after: Date(timeIntervalSinceReferenceDate: 726364799.5166808)) = Date(timeIntervalSinceReferenceDate: 726364799.5266808),
926936
/// already produces a different formatted output '6 days ago' compared to style.format(Date(timeIntervalSinceReferenceDate: 726561180.513301)), which is '1 wk ago'
@@ -929,6 +939,7 @@ private struct TestDateAnchoredRelativeDiscreteConformance {
929939
now = Date(timeIntervalSinceReferenceDate: 725903036.660503)
930940
style = .init(anchor: now, presentation: .numeric, unitsStyle: .abbreviated)
931941
style.calendar = self.calendar
942+
style.locale = enUSLocale
932943
/// style.discreteInput(after: Date(timeIntervalSinceReferenceDate: 725318223.6599436)) returned Date(timeIntervalSinceReferenceDate: 725414400.1605031), but
933944
/// Date(timeIntervalSinceReferenceDate: 725398549.919868), which is a valid input, because style.input(before: Date(timeIntervalSinceReferenceDate: 725414400.1605031)) = Date(timeIntervalSinceReferenceDate: 725414400.1505032),
934945
/// already produces a different formatted output 'in 6 days' compared to style.format(Date(timeIntervalSinceReferenceDate: 725318223.6599436)), which is 'in 1 wk'

Tests/FoundationInternationalizationTests/Formatting/NumberFormatStyleTests.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ private struct NumberFormatStyleTests {
5656
#expect(formatter_long.format(42 as Double) == "0,000,000,000,000,000,000,000,000,000,000,000,000,042")
5757
}
5858

59-
#if !os(watchOS) // 99504292
59+
#if !os(watchOS) && FOUNDATION_FRAMEWORK // 99504292 && 155484008
60+
// This test would fail if the cache is cleared while running the test
61+
// But we still enable it for FOUNDATION_FRAMEWORK because it somehow still passes there
6062
@Test func nsICUNumberFormatterCache() throws {
6163

6264
let intStyle = IntegerFormatStyle<Int64>(locale: Locale(identifier: "en_US"))

0 commit comments

Comments
 (0)