|
136 | 136 | package final class MockSyncEngineState: CKSyncEngineStateProtocol { |
137 | 137 | package let changeTag = LockIsolated(0) |
138 | 138 | package let _pendingRecordZoneChanges = LockIsolated< |
139 | | - OrderedSet<CKSyncEngine.PendingRecordZoneChange> |
140 | | - >([] |
| 139 | + OrderedDictionary<CKRecord.ID, CKSyncEngine.PendingRecordZoneChange> |
| 140 | + >([:] |
141 | 141 | ) |
142 | 142 | package let _pendingDatabaseChanges = LockIsolated< |
143 | | - OrderedSet<CKSyncEngine.PendingDatabaseChange> |
144 | | - >([]) |
| 143 | + OrderedDictionary<CKRecordZone.ID, CKSyncEngine.PendingDatabaseChange> |
| 144 | + >([:]) |
145 | 145 | private let fileID: StaticString |
146 | 146 | private let filePath: StaticString |
147 | 147 | private let line: UInt |
|
160 | 160 | } |
161 | 161 |
|
162 | 162 | package var pendingRecordZoneChanges: [CKSyncEngine.PendingRecordZoneChange] { |
163 | | - _pendingRecordZoneChanges.withValue { Array($0) } |
| 163 | + _pendingRecordZoneChanges.withValue { Array($0.values) } |
164 | 164 | } |
165 | 165 |
|
166 | 166 | package var pendingDatabaseChanges: [CKSyncEngine.PendingDatabaseChange] { |
167 | | - _pendingDatabaseChanges.withValue { Array($0) } |
| 167 | + _pendingDatabaseChanges.withValue { Array($0.values) } |
168 | 168 | } |
169 | 169 |
|
170 | 170 | package func removePendingChanges() { |
|
173 | 173 | } |
174 | 174 |
|
175 | 175 | package func add(pendingRecordZoneChanges: [CKSyncEngine.PendingRecordZoneChange]) { |
176 | | - self._pendingRecordZoneChanges.withValue { set in |
| 176 | + self._pendingRecordZoneChanges.withValue { dict in |
177 | 177 | for change in pendingRecordZoneChanges { |
178 | | - if let id = change.id, |
179 | | - let supersededIndex = set.firstIndex(where: { $0.id == id && $0 != change }) |
180 | | - { |
181 | | - set.remove(at: supersededIndex) |
| 178 | + switch change { |
| 179 | + case .saveRecord(let id), .deleteRecord(let id): |
| 180 | + dict.updateValue(change, forKey: id) |
| 181 | + @unknown default: |
| 182 | + fatalError("Unsupported pendingRecordZoneChange: \(change)") |
182 | 183 | } |
183 | | - set.append(change) |
184 | 184 | } |
185 | 185 | } |
186 | 186 | } |
187 | 187 |
|
188 | 188 | package func remove(pendingRecordZoneChanges: [CKSyncEngine.PendingRecordZoneChange]) { |
189 | | - self._pendingRecordZoneChanges.withValue { |
190 | | - $0.subtract(pendingRecordZoneChanges) |
| 189 | + self._pendingRecordZoneChanges.withValue { dict in |
| 190 | + for change in pendingRecordZoneChanges { |
| 191 | + switch change { |
| 192 | + case .saveRecord(let id), .deleteRecord(let id): |
| 193 | + if dict[id] == change { dict.removeValue(forKey: id) } |
| 194 | + @unknown default: |
| 195 | + fatalError("Unsupported pendingRecordZoneChange: \(change)") |
| 196 | + } |
| 197 | + } |
191 | 198 | } |
192 | 199 | } |
193 | 200 |
|
194 | 201 | package func add(pendingDatabaseChanges: [CKSyncEngine.PendingDatabaseChange]) { |
195 | | - self._pendingDatabaseChanges.withValue { set in |
| 202 | + self._pendingDatabaseChanges.withValue { dict in |
196 | 203 | for change in pendingDatabaseChanges { |
197 | | - if let zoneID = change.zoneID, |
198 | | - let supersededIndex = set.firstIndex(where: { $0.zoneID == zoneID && $0 != change }) |
199 | | - { |
200 | | - set.remove(at: supersededIndex) |
| 204 | + switch change { |
| 205 | + case .saveZone(let zone): |
| 206 | + dict.updateValue(change, forKey: zone.zoneID) |
| 207 | + case .deleteZone(let zoneID): |
| 208 | + dict.updateValue(change, forKey: zoneID) |
| 209 | + @unknown default: |
| 210 | + fatalError("Unsupported pendingDatabaseChange: \(change)") |
201 | 211 | } |
202 | | - set.append(change) |
203 | 212 | } |
204 | 213 | } |
205 | 214 | } |
206 | 215 |
|
207 | 216 | package func remove(pendingDatabaseChanges: [CKSyncEngine.PendingDatabaseChange]) { |
208 | | - self._pendingDatabaseChanges.withValue { |
209 | | - $0.subtract(pendingDatabaseChanges) |
| 217 | + self._pendingDatabaseChanges.withValue { dict in |
| 218 | + for change in pendingDatabaseChanges { |
| 219 | + switch change { |
| 220 | + case .saveZone(let zone): |
| 221 | + if dict[zone.zoneID] == change { dict.removeValue(forKey: zone.zoneID) } |
| 222 | + case .deleteZone(let zoneID): |
| 223 | + if dict[zoneID] == change { dict.removeValue(forKey: zoneID) } |
| 224 | + @unknown default: |
| 225 | + fatalError("Unsupported pendingDatabaseChange: \(change)") |
| 226 | + } |
| 227 | + } |
210 | 228 | } |
211 | 229 | } |
212 | 230 | } |
|
0 commit comments