Skip to content

Commit e4fd357

Browse files
committed
Test observations in HybridStorage and Storage
1 parent 0bbdf94 commit e4fd357

File tree

9 files changed

+217
-99
lines changed

9 files changed

+217
-99
lines changed

Cache.xcodeproj/project.pbxproj

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,6 @@
128128
D2D4CC251FA3426B00E4A2D5 /* JSONArrayWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D4CC231FA3426B00E4A2D5 /* JSONArrayWrapper.swift */; };
129129
D2D4CC261FA3426B00E4A2D5 /* JSONArrayWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D4CC231FA3426B00E4A2D5 /* JSONArrayWrapper.swift */; };
130130
D2D4CC281FA342CA00E4A2D5 /* JSONWrapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D4CC271FA342CA00E4A2D5 /* JSONWrapperTests.swift */; };
131-
D511464B2114775100197DCE /* StorageObservationRegistryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D511464A2114775100197DCE /* StorageObservationRegistryTests.swift */; };
132-
D511464D2114775100197DCE /* StorageObservationRegistryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D511464A2114775100197DCE /* StorageObservationRegistryTests.swift */; };
133131
D511464F21147B7C00197DCE /* ObservationTokenTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D511464E21147B7C00197DCE /* ObservationTokenTests.swift */; };
134132
D511465121147B7C00197DCE /* ObservationTokenTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D511464E21147B7C00197DCE /* ObservationTokenTests.swift */; };
135133
D51146532118337500197DCE /* KeyObservationRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D51146522118337500197DCE /* KeyObservationRegistry.swift */; };
@@ -223,7 +221,6 @@
223221
D2D4CC1F1FA3411300E4A2D5 /* JSONDictionaryWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONDictionaryWrapper.swift; sourceTree = "<group>"; };
224222
D2D4CC231FA3426B00E4A2D5 /* JSONArrayWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONArrayWrapper.swift; sourceTree = "<group>"; };
225223
D2D4CC271FA342CA00E4A2D5 /* JSONWrapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONWrapperTests.swift; sourceTree = "<group>"; };
226-
D511464A2114775100197DCE /* StorageObservationRegistryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageObservationRegistryTests.swift; sourceTree = "<group>"; };
227224
D511464E21147B7C00197DCE /* ObservationTokenTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ObservationTokenTests.swift; sourceTree = "<group>"; };
228225
D51146522118337500197DCE /* KeyObservationRegistry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyObservationRegistry.swift; sourceTree = "<group>"; };
229226
D5291CDF1C28374800B702C9 /* TestHelper+iOS.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "TestHelper+iOS.swift"; sourceTree = "<group>"; };
@@ -416,7 +413,6 @@
416413
D292DB001F6AA06B0060F614 /* SyncStorageTests.swift */,
417414
D292DB031F6AA0730060F614 /* AsyncStorageTests.swift */,
418415
D236F3191F6BEF73004EE01F /* StorageTests.swift */,
419-
D511464A2114775100197DCE /* StorageObservationRegistryTests.swift */,
420416
);
421417
path = Storage;
422418
sourceTree = "<group>";
@@ -864,7 +860,6 @@
864860
D511465121147B7C00197DCE /* ObservationTokenTests.swift in Sources */,
865861
D28A1D241F6FFEF60030DF81 /* ObjectConverterTests.swift in Sources */,
866862
D27014B120D12E38003B45C7 /* StorageSupportTests.swift in Sources */,
867-
D511464D2114775100197DCE /* StorageObservationRegistryTests.swift in Sources */,
868863
D27014AD20D12CC3003B45C7 /* SyncStorageTests.swift in Sources */,
869864
D27014AA20D12BA4003B45C7 /* HybridStorageTests.swift in Sources */,
870865
);
@@ -884,7 +879,6 @@
884879
D2CF987F1F69513800CE8F68 /* ImageWrapperTests.swift in Sources */,
885880
D2D4CC1A1FA3166900E4A2D5 /* MD5Tests.swift in Sources */,
886881
D2D4CC281FA342CA00E4A2D5 /* JSONWrapperTests.swift in Sources */,
887-
D511464B2114775100197DCE /* StorageObservationRegistryTests.swift in Sources */,
888882
D27014B320D13E2C003B45C7 /* StorageTests.swift in Sources */,
889883
D28C9BAF1F67EF8300C180C1 /* UIImage+ExtensionsTests.swift in Sources */,
890884
D2CF987D1F69513800CE8F68 /* MemoryCapsuleTests.swift in Sources */,

Source/Shared/Storage/DiskStorage.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ final public class DiskStorage<T> {
1717

1818
private let transformer: Transformer<T>
1919

20-
2120
// MARK: - Initialization
2221

2322
public convenience init(config: DiskConfig, fileManager: FileManager = FileManager.default, transformer: Transformer<T>) throws {

Source/Shared/Storage/HybridStorage.swift

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ public final class HybridStorage<T> {
55
public let memoryStorage: MemoryStorage<T>
66
public let diskStorage: DiskStorage<T>
77

8-
private var storageObservations = [UUID : (HybridStorage, StorageChange) -> Void]()
9-
private var keyObservations = [String : (HybridStorage, KeyChange<T>) -> Void]()
8+
private(set) var storageObservations = [UUID : (HybridStorage, StorageChange) -> Void]()
9+
private(set) var keyObservations = [String : (HybridStorage, KeyChange<T>) -> Void]()
1010

1111
public init(memoryStorage: MemoryStorage<T>, diskStorage: DiskStorage<T>) {
1212
self.memoryStorage = memoryStorage
@@ -54,7 +54,6 @@ extension HybridStorage: StorageAware {
5454
memoryStorage.setObject(object, forKey: key, expiry: expiry)
5555
try diskStorage.setObject(object, forKey: key, expiry: expiry)
5656

57-
5857
if let change = keyChange {
5958
notifyObserver(forKey: key, about: change)
6059
}
@@ -111,7 +110,7 @@ extension HybridStorage: StorageObservationRegistry {
111110
}
112111
}
113112

114-
public func removeAllStorageObservations() {
113+
public func removeAllStorageObservers() {
115114
storageObservations.removeAll()
116115
}
117116

@@ -131,7 +130,7 @@ extension HybridStorage: KeyObservationRegistry {
131130
) -> ObservationToken {
132131
keyObservations[key] = { [weak self, weak observer] storage, change in
133132
guard let observer = observer else {
134-
self?.removeObservation(forKey: key)
133+
self?.removeObserver(forKey: key)
135134
return
136135
}
137136

@@ -143,11 +142,11 @@ extension HybridStorage: KeyObservationRegistry {
143142
}
144143
}
145144

146-
public func removeObservation(forKey key: String) {
145+
public func removeObserver(forKey key: String) {
147146
keyObservations.removeValue(forKey: key)
148147
}
149148

150-
public func removeAllKeyObservations() {
149+
public func removeAllKeyObservers() {
151150
keyObservations.removeAll()
152151
}
153152

Source/Shared/Storage/KeyObservationRegistry.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ public protocol KeyObservationRegistry {
1010
closure: @escaping (O, S, KeyChange<S.T>) -> Void
1111
) -> ObservationToken
1212

13-
func removeObservation(forKey key: String)
14-
func removeAllKeyObservations()
13+
func removeObserver(forKey key: String)
14+
func removeAllKeyObservers()
1515
}
1616

1717
// MARK: - KeyChange

Source/Shared/Storage/Storage.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ extension Storage: StorageObservationRegistry {
9696
}
9797
}
9898

99-
public func removeAllStorageObservations() {
100-
hybridStorage.removeAllStorageObservations()
99+
public func removeAllStorageObservers() {
100+
hybridStorage.removeAllStorageObservers()
101101
}
102102
}
103103

@@ -114,11 +114,11 @@ extension Storage: KeyObservationRegistry {
114114
}
115115
}
116116

117-
public func removeObservation(forKey key: String) {
118-
hybridStorage.removeObservation(forKey: key)
117+
public func removeObserver(forKey key: String) {
118+
hybridStorage.removeObserver(forKey: key)
119119
}
120120

121-
public func removeAllKeyObservations() {
122-
hybridStorage.removeAllKeyObservations()
121+
public func removeAllKeyObservers() {
122+
hybridStorage.removeAllKeyObservers()
123123
}
124124
}

Source/Shared/Storage/StorageObservationRegistry.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public protocol StorageObservationRegistry {
99
closure: @escaping (O, S, StorageChange) -> Void
1010
) -> ObservationToken
1111

12-
func removeAllStorageObservations()
12+
func removeAllStorageObservers()
1313
}
1414

1515
// MARK: - StorageChange

Tests/iOS/Tests/Storage/HybridStorageTests.swift

Lines changed: 68 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -157,27 +157,81 @@ final class HybridStorageTests: XCTestCase {
157157
}
158158
}
159159

160-
func testAddObservations() throws {
160+
// MARK: - Storage observers
161+
162+
func testAddStorageObserver() throws {
161163
var changes = [StorageChange]()
164+
storage.addStorageObserver(self) { _, _, change in
165+
changes.append(change)
166+
}
167+
168+
try storage.setObject(testObject, forKey: "user1")
169+
XCTAssertEqual(changes, [StorageChange.add(key: "user1")])
170+
XCTAssertEqual(storage.storageObservations.count, 1)
171+
172+
storage.addStorageObserver(self) { _, _, _ in }
173+
XCTAssertEqual(storage.storageObservations.count, 2)
174+
}
175+
176+
func testRemoveStorageObserver() {
177+
let token = storage.addStorageObserver(self) { _, _, _ in }
178+
XCTAssertEqual(storage.storageObservations.count, 1)
179+
180+
token.cancel()
181+
XCTAssertTrue(storage.storageObservations.isEmpty)
182+
}
183+
184+
func testRemoveAllStorageObservers() {
185+
storage.addStorageObserver(self) { _, _, _ in }
186+
storage.addStorageObserver(self) { _, _, _ in }
187+
XCTAssertEqual(storage.storageObservations.count, 2)
188+
189+
storage.removeAllStorageObservers()
190+
XCTAssertTrue(storage.storageObservations.isEmpty)
191+
}
192+
193+
// MARK: - Key observers
162194

163-
storage.storageObservationRegistry.addObservation { storage, change in
195+
func testAddObserverForKey() throws {
196+
var changes = [KeyChange<User>]()
197+
storage.addObserver(self, forKey: "user1") { _, _, change in
164198
changes.append(change)
165199
}
166200

201+
XCTAssertEqual(storage.keyObservations.count, 1)
202+
167203
try storage.setObject(testObject, forKey: "user1")
168-
try storage.setObject(testObject, forKey: "user2")
169-
try storage.removeObject(forKey: "user1")
170-
try storage.removeExpiredObjects()
171-
try storage.removeAll()
204+
XCTAssertEqual(changes, [KeyChange.edit(before: nil, after: testObject)])
205+
206+
storage.addObserver(self, forKey: "user1") { _, _, _ in }
207+
XCTAssertEqual(storage.keyObservations.count, 1)
208+
209+
storage.addObserver(self, forKey: "user2") { _, _, _ in }
210+
XCTAssertEqual(storage.keyObservations.count, 2)
211+
}
212+
213+
func testRemoveKeyObserver() {
214+
// Test remove for key
215+
storage.addObserver(self, forKey: "user1") { _, _, _ in }
216+
XCTAssertEqual(storage.keyObservations.count, 1)
217+
218+
storage.removeObserver(forKey: "user1")
219+
XCTAssertTrue(storage.storageObservations.isEmpty)
220+
221+
// Test remove by token
222+
let token = storage.addObserver(self, forKey: "user2") { _, _, _ in }
223+
XCTAssertEqual(storage.keyObservations.count, 1)
224+
225+
token.cancel()
226+
XCTAssertTrue(storage.storageObservations.isEmpty)
227+
}
172228

173-
let expectedChanges: [StorageChange] = [
174-
.add(key: "user1"),
175-
.add(key: "user2"),
176-
.remove(key: "user1"),
177-
.removeExpired,
178-
.removeAll
179-
]
229+
func testRemoveAllKeyObservers() {
230+
storage.addObserver(self, forKey: "user1") { _, _, _ in }
231+
storage.addObserver(self, forKey: "user2") { _, _, _ in }
232+
XCTAssertEqual(storage.keyObservations.count, 2)
180233

181-
XCTAssertEqual(changes, expectedChanges)
234+
storage.removeAllKeyObservers()
235+
XCTAssertTrue(storage.keyObservations.isEmpty)
182236
}
183237
}

Tests/iOS/Tests/Storage/StorageObservationRegistryTests.swift

Lines changed: 0 additions & 60 deletions
This file was deleted.

0 commit comments

Comments
 (0)