diff --git a/iOS_SDK/OneSignalSDK/OneSignal.xcodeproj/project.pbxproj b/iOS_SDK/OneSignalSDK/OneSignal.xcodeproj/project.pbxproj index f6dc9fd33..cd88de028 100644 --- a/iOS_SDK/OneSignalSDK/OneSignal.xcodeproj/project.pbxproj +++ b/iOS_SDK/OneSignalSDK/OneSignal.xcodeproj/project.pbxproj @@ -90,6 +90,7 @@ 3C87066E2BDE05B8000D8CD2 /* XCTest.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3C7A39D42B7C18EE0082665E /* XCTest.framework */; platformFilter = ios; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 3C8706702BDE0957000D8CD2 /* MockUserRequests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C87066F2BDE0957000D8CD2 /* MockUserRequests.swift */; }; 3C8706722BDEE076000D8CD2 /* MockUserDefines.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C8706712BDEE076000D8CD2 /* MockUserDefines.swift */; }; + 3C8706762BDEED75000D8CD2 /* NSDictionary+UnitTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C8706752BDEED75000D8CD2 /* NSDictionary+UnitTests.swift */; }; 3C8E6DF928A6D89E0031E48A /* OSOperationExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C8E6DF828A6D89E0031E48A /* OSOperationExecutor.swift */; }; 3C8E6DFF28AB09AE0031E48A /* OSPropertyOperationExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C8E6DFE28AB09AE0031E48A /* OSPropertyOperationExecutor.swift */; }; 3C8E6E0128AC0BA10031E48A /* OSIdentityOperationExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C8E6E0028AC0BA10031E48A /* OSIdentityOperationExecutor.swift */; }; @@ -974,6 +975,7 @@ 3C7A39D42B7C18EE0082665E /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 3C87066F2BDE0957000D8CD2 /* MockUserRequests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockUserRequests.swift; sourceTree = ""; }; 3C8706712BDEE076000D8CD2 /* MockUserDefines.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockUserDefines.swift; sourceTree = ""; }; + 3C8706752BDEED75000D8CD2 /* NSDictionary+UnitTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSDictionary+UnitTests.swift"; sourceTree = ""; }; 3C8E6DF828A6D89E0031E48A /* OSOperationExecutor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSOperationExecutor.swift; sourceTree = ""; }; 3C8E6DFE28AB09AE0031E48A /* OSPropertyOperationExecutor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSPropertyOperationExecutor.swift; sourceTree = ""; }; 3C8E6E0028AC0BA10031E48A /* OSIdentityOperationExecutor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSIdentityOperationExecutor.swift; sourceTree = ""; }; @@ -1675,6 +1677,14 @@ path = Source; sourceTree = ""; }; + 3C8706742BDEED53000D8CD2 /* Extensions */ = { + isa = PBXGroup; + children = ( + 3C8706752BDEED75000D8CD2 /* NSDictionary+UnitTests.swift */, + ); + path = Extensions; + sourceTree = ""; + }; 3C9AD6BA2B2284AB00BC1540 /* Executors */ = { isa = PBXGroup; children = ( @@ -1708,6 +1718,7 @@ 3CC0639B2B6D7A8D002BB07F /* OneSignalCoreMocks */ = { isa = PBXGroup; children = ( + 3C8706742BDEED53000D8CD2 /* Extensions */, 3CC0639C2B6D7A8D002BB07F /* OneSignalCoreMocks.h */, 3CC063B32B6D7BA2002BB07F /* OneSignalCoreMocks.swift */, 3CC063B12B6D7AD8002BB07F /* MockOneSignalClient.swift */, @@ -3350,6 +3361,7 @@ buildActionMask = 2147483647; files = ( 3CC063B22B6D7AD8002BB07F /* MockOneSignalClient.swift in Sources */, + 3C8706762BDEED75000D8CD2 /* NSDictionary+UnitTests.swift in Sources */, 3CC063B42B6D7BA2002BB07F /* OneSignalCoreMocks.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/iOS_SDK/OneSignalSDK/OneSignalCoreMocks/Extensions/NSDictionary+UnitTests.swift b/iOS_SDK/OneSignalSDK/OneSignalCoreMocks/Extensions/NSDictionary+UnitTests.swift new file mode 100644 index 000000000..44a185e88 --- /dev/null +++ b/iOS_SDK/OneSignalSDK/OneSignalCoreMocks/Extensions/NSDictionary+UnitTests.swift @@ -0,0 +1,24 @@ +extension NSDictionary { + func contains(key: String, value: Any) -> Bool { + guard let dictVal = self[key] else { + return false + } + + return equals(dictVal, value) + } + + func contains(_ dict: [String: Any]) -> Bool { + for (key, value) in dict { + if !contains(key: key, value: value) { + return false + } + } + return true + } + + private func equals(_ x: Any, _ y: Any) -> Bool { + guard x is AnyHashable else { return false } + guard y is AnyHashable else { return false } + return (x as! AnyHashable) == (y as! AnyHashable) + } +}