Skip to content

Commit efa3993

Browse files
committed
Add post-release notification regression tests
1 parent ac396e3 commit efa3993

2 files changed

Lines changed: 61 additions & 0 deletions

File tree

Tests/ObservableDefaultsTests/ObservableCloudTests.swift

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,42 @@ struct ObservableCloudTests {
105105
#expect(weakModel == nil)
106106
}
107107

108+
@Test("Released cloud model ignores later external notifications", .testMode)
109+
func releasedCloudModelIgnoresLaterExternalNotifications() {
110+
weak var weakModel: MockModelCloud?
111+
112+
do {
113+
let model = MockModelCloud(developmentMode: false)
114+
weakModel = model
115+
#expect(model.name == "Test")
116+
}
117+
118+
#expect(weakModel == nil)
119+
120+
userDefaults.set("AfterDeinit", forKey: "name")
121+
userDefaults.synchronize()
122+
NotificationCenter.default.post(
123+
name: NSUbiquitousKeyValueStore.didChangeExternallyNotification,
124+
object: nil,
125+
userInfo: [
126+
NSUbiquitousKeyValueStoreChangedKeysKey: ["name"]
127+
])
128+
129+
let replacement = MockModelCloud(developmentMode: false)
130+
#expect(replacement.name == "AfterDeinit")
131+
132+
tracking(replacement, \.name, .notification)
133+
userDefaults.set("ReplacementUpdate", forKey: "name")
134+
userDefaults.synchronize()
135+
NotificationCenter.default.post(
136+
name: NSUbiquitousKeyValueStore.didChangeExternallyNotification,
137+
object: nil,
138+
userInfo: [
139+
NSUbiquitousKeyValueStoreChangedKeysKey: ["name"]
140+
])
141+
#expect(replacement.name == "ReplacementUpdate")
142+
}
143+
108144
@Test("syncImmediately macro default is preserved by generated init", .testMode)
109145
func syncImmediatelyMacroDefaultIsPreserved() {
110146
let model = MockModelCloudSyncImmediately()

Tests/ObservableDefaultsTests/ObservableDefaultsTests.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,31 @@ struct ObservableDefaultsTests {
9393
#expect(weakModel == nil)
9494
}
9595

96+
@Test("Released defaults model ignores later external notifications")
97+
func releasedDefaultsModelIgnoresLaterExternalNotifications() {
98+
let userDefaults = UserDefaults.getTestInstance(suiteName: #function)
99+
weak var weakModel: MockModel?
100+
101+
do {
102+
let model = MockModel(userDefaults: userDefaults)
103+
weakModel = model
104+
#expect(model.name == "Test")
105+
}
106+
107+
#expect(weakModel == nil)
108+
109+
userDefaults.set("AfterDeinit", forKey: "name")
110+
NotificationCenter.default.post(name: UserDefaults.didChangeNotification, object: userDefaults)
111+
112+
let replacement = MockModel(userDefaults: userDefaults)
113+
#expect(replacement.name == "AfterDeinit")
114+
115+
tracking(replacement, \.name, .userDefaults)
116+
userDefaults.set("ReplacementUpdate", forKey: "name")
117+
NotificationCenter.default.post(name: UserDefaults.didChangeNotification, object: userDefaults)
118+
#expect(replacement.name == "ReplacementUpdate")
119+
}
120+
96121
@Test("Observable Only")
97122
func observableOnly() {
98123
let userDefaults = UserDefaults.getTestInstance(suiteName: #function)

0 commit comments

Comments
 (0)