diff --git a/.gitignore b/.gitignore index 0e0def8..db7cc68 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,4 @@ DerivedData .idea/ *.hmap *.xccheckout -Pods \ No newline at end of file +Pods diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..07dddfd --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "vendor/OCMock"] + path = vendor/OCMock + url = git://github.com/erikdoe/ocmock diff --git a/FBSnapshotTestCase.podspec b/FBSnapshotTestCase.podspec index eb557aa..2990946 100644 --- a/FBSnapshotTestCase.podspec +++ b/FBSnapshotTestCase.podspec @@ -23,7 +23,7 @@ Pod::Spec.new do |s| s.default_subspecs = 'SwiftSupport' s.subspec 'Core' do |cs| cs.source_files = 'FBSnapshotTestCase/**/*.{h,m}', 'FBSnapshotTestCase/*.{h,m}' - cs.public_header_files = 'FBSnapshotTestCase/FBSnapshotTestCase.h','FBSnapshotTestCase/FBSnapshotTestCasePlatform.h','FBSnapshotTestCase/FBSnapshotTestController.h' + cs.public_header_files = 'FBSnapshotTestCase/FBSnapshotTestCase.h','FBSnapshotTestCase/FBSnapshotTestCasePlatform.h','FBSnapshotTestCase/FBSnapshotTestController.h','FBSnapshotTestCase/FBSnapshotTestCaseAgnosticnessOption.h' cs.private_header_files = 'FBSnapshotTestCase/Categories/UIImage+Compare.h','FBSnapshotTestCase/Categories/UIImage+Diff.h','FBSnapshotTestCase/Categories/UIImage+Snapshot.h' end s.subspec 'SwiftSupport' do |cs| diff --git a/FBSnapshotTestCase.xcodeproj/project.pbxproj b/FBSnapshotTestCase.xcodeproj/project.pbxproj index fa4a510..dc0f383 100644 --- a/FBSnapshotTestCase.xcodeproj/project.pbxproj +++ b/FBSnapshotTestCase.xcodeproj/project.pbxproj @@ -15,6 +15,13 @@ 1335641B1B59C3F500A4E4BF /* UIImage+Snapshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 133564151B59C3F500A4E4BF /* UIImage+Snapshot.m */; }; 13CBB39D1AEE013900B6ADBA /* FBSnapshotTestCasePlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 13CBB39B1AEE013900B6ADBA /* FBSnapshotTestCasePlatform.h */; settings = {ATTRIBUTES = (Public, ); }; }; 13CBB39E1AEE013900B6ADBA /* FBSnapshotTestCasePlatform.m in Sources */ = {isa = PBXBuildFile; fileRef = 13CBB39C1AEE013900B6ADBA /* FBSnapshotTestCasePlatform.m */; }; + 6D683C2B1CF3A2F900656B71 /* libOCMock.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D683C241CF3A24500656B71 /* libOCMock.a */; }; + 6D935ED11CDB609100E24C54 /* FBSnapshotTestCaseAgnosticnessOption.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D935ECF1CDB609100E24C54 /* FBSnapshotTestCaseAgnosticnessOption.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6D935ED21CDB609100E24C54 /* FBSnapshotTestCaseAgnosticnessOption.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D935ECF1CDB609100E24C54 /* FBSnapshotTestCaseAgnosticnessOption.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6D935ED61CDBDA6500E24C54 /* FBSnapshotTestCasePlatformTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D935ED51CDBDA6500E24C54 /* FBSnapshotTestCasePlatformTests.m */; }; + 6D935ED71CDBDA6500E24C54 /* FBSnapshotTestCasePlatformTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D935ED51CDBDA6500E24C54 /* FBSnapshotTestCasePlatformTests.m */; }; + 6D9E0A6B1CE20E8400A2E365 /* FBSnapshotTestCaseTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D9E0A6A1CE20E8400A2E365 /* FBSnapshotTestCaseTests.m */; }; + 6D9E0A6C1CE20E8400A2E365 /* FBSnapshotTestCaseTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D9E0A6A1CE20E8400A2E365 /* FBSnapshotTestCaseTests.m */; }; 827137841C63AB7000354E42 /* FBSnapshotTestCase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8271377A1C63AB6F00354E42 /* FBSnapshotTestCase.framework */; }; 827137911C63ABE900354E42 /* UIImage+Compare.h in Headers */ = {isa = PBXBuildFile; fileRef = 133564101B59C3F500A4E4BF /* UIImage+Compare.h */; }; 827137921C63ABF000354E42 /* UIImage+Diff.h in Headers */ = {isa = PBXBuildFile; fileRef = 133564121B59C3F500A4E4BF /* UIImage+Diff.h */; }; @@ -54,6 +61,55 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 6D683C1F1CF3A24500656B71 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6D683C161CF3A24400656B71 /* OCMock.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 030EF0A814632FD000B04273; + remoteInfo = OCMock; + }; + 6D683C211CF3A24500656B71 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6D683C161CF3A24400656B71 /* OCMock.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 03565A3118F0566E003AE91E; + remoteInfo = OCMockTests; + }; + 6D683C231CF3A24500656B71 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6D683C161CF3A24400656B71 /* OCMock.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 030EF0DC14632FF700B04273; + remoteInfo = OCMockLib; + }; + 6D683C251CF3A24500656B71 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6D683C161CF3A24400656B71 /* OCMock.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = D31108AD1828DB8700737925; + remoteInfo = OCMockLibTests; + }; + 6D683C271CF3A24500656B71 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6D683C161CF3A24400656B71 /* OCMock.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = F0B950F11B0080BE00942C38; + remoteInfo = "OCMock iOS"; + }; + 6D683C291CF3A24500656B71 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6D683C161CF3A24400656B71 /* OCMock.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 817EB1621BD765130047E85A; + remoteInfo = "OCMock tvOS"; + }; + 6D683C2D1CF3A65600656B71 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6D683C161CF3A24400656B71 /* OCMock.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = F0B950F01B0080BE00942C38; + remoteInfo = "OCMock iOS"; + }; 827137851C63AB7000354E42 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = B31987E71AB782D000B0A900 /* Project object */; @@ -79,6 +135,10 @@ 133564151B59C3F500A4E4BF /* UIImage+Snapshot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Snapshot.m"; sourceTree = ""; }; 13CBB39B1AEE013900B6ADBA /* FBSnapshotTestCasePlatform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBSnapshotTestCasePlatform.h; sourceTree = ""; }; 13CBB39C1AEE013900B6ADBA /* FBSnapshotTestCasePlatform.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBSnapshotTestCasePlatform.m; sourceTree = ""; }; + 6D683C161CF3A24400656B71 /* OCMock.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = OCMock.xcodeproj; path = vendor/OCMock/Source/OCMock.xcodeproj; sourceTree = ""; }; + 6D935ECF1CDB609100E24C54 /* FBSnapshotTestCaseAgnosticnessOption.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBSnapshotTestCaseAgnosticnessOption.h; sourceTree = ""; }; + 6D935ED51CDBDA6500E24C54 /* FBSnapshotTestCasePlatformTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBSnapshotTestCasePlatformTests.m; sourceTree = ""; }; + 6D9E0A6A1CE20E8400A2E365 /* FBSnapshotTestCaseTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBSnapshotTestCaseTests.m; sourceTree = ""; }; 8271377A1C63AB6F00354E42 /* FBSnapshotTestCase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBSnapshotTestCase.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 827137831C63AB7000354E42 /* FBSnapshotTestCase tvOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "FBSnapshotTestCase tvOS Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; B31987F01AB782D000B0A900 /* FBSnapshotTestCase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBSnapshotTestCase.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -127,6 +187,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 6D683C2B1CF3A2F900656B71 /* libOCMock.a in Frameworks */, B31987FC1AB782D100B0A900 /* FBSnapshotTestCase.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -149,12 +210,42 @@ path = Categories; sourceTree = ""; }; + 6D683C141CF3A1D600656B71 /* Products */ = { + isa = PBXGroup; + children = ( + B31987F11AB782D000B0A900 /* Products */, + ); + name = Products; + sourceTree = ""; + }; + 6D683C151CF3A1E100656B71 /* Submodules */ = { + isa = PBXGroup; + children = ( + 6D683C161CF3A24400656B71 /* OCMock.xcodeproj */, + ); + name = Submodules; + sourceTree = ""; + }; + 6D683C171CF3A24400656B71 /* Products */ = { + isa = PBXGroup; + children = ( + 6D683C201CF3A24500656B71 /* OCMock.framework */, + 6D683C221CF3A24500656B71 /* OCMockTests.xctest */, + 6D683C241CF3A24500656B71 /* libOCMock.a */, + 6D683C261CF3A24500656B71 /* OCMockLibTests.xctest */, + 6D683C281CF3A24500656B71 /* OCMock.framework */, + 6D683C2A1CF3A24500656B71 /* OCMock.framework */, + ); + name = Products; + sourceTree = ""; + }; B31987E61AB782D000B0A900 = { isa = PBXGroup; children = ( + 6D683C151CF3A1E100656B71 /* Submodules */, B31987F21AB782D000B0A900 /* Sources */, B31987FF1AB782D100B0A900 /* Tests */, - B31987F11AB782D000B0A900 /* Products */, + 6D683C141CF3A1D600656B71 /* Products */, ); indentWidth = 2; sourceTree = ""; @@ -181,6 +272,7 @@ 13CBB39C1AEE013900B6ADBA /* FBSnapshotTestCasePlatform.m */, B31988221AB7849400B0A900 /* FBSnapshotTestController.h */, B31988231AB7849400B0A900 /* FBSnapshotTestController.m */, + 6D935ECF1CDB609100E24C54 /* FBSnapshotTestCaseAgnosticnessOption.h */, F0D698F41B204E120005CAC9 /* SwiftSupport.swift */, B31987F31AB782D000B0A900 /* Supporting Files */, ); @@ -205,6 +297,8 @@ B32447DA1AB78B5E00B1D6FF /* square-copy.png */, B32447DB1AB78B5E00B1D6FF /* square.png */, B31988301AB784CB00B0A900 /* FBSnapshotControllerTests.m */, + 6D935ED51CDBDA6500E24C54 /* FBSnapshotTestCasePlatformTests.m */, + 6D9E0A6A1CE20E8400A2E365 /* FBSnapshotTestCaseTests.m */, B31988001AB782D100B0A900 /* Supporting Files */, ); name = Tests; @@ -228,6 +322,7 @@ files = ( 827137941C63ABF000354E42 /* UIApplication+StrictKeyWindow.h in Headers */, 8271379A1C63ABF900354E42 /* FBSnapshotTestCasePlatform.h in Headers */, + 6D935ED21CDB609100E24C54 /* FBSnapshotTestCaseAgnosticnessOption.h in Headers */, 827137911C63ABE900354E42 /* UIImage+Compare.h in Headers */, 827137991C63ABF900354E42 /* FBSnapshotTestCase.h in Headers */, 8271379B1C63ABF900354E42 /* FBSnapshotTestController.h in Headers */, @@ -242,6 +337,7 @@ files = ( BC45D5211C2AEFCE007C72F3 /* UIApplication+StrictKeyWindow.h in Headers */, B31988281AB7849400B0A900 /* FBSnapshotTestCase.h in Headers */, + 6D935ED11CDB609100E24C54 /* FBSnapshotTestCaseAgnosticnessOption.h in Headers */, 13CBB39D1AEE013900B6ADBA /* FBSnapshotTestCasePlatform.h in Headers */, B319882A1AB7849400B0A900 /* FBSnapshotTestController.h in Headers */, 133564181B59C3F500A4E4BF /* UIImage+Diff.h in Headers */, @@ -318,6 +414,7 @@ buildRules = ( ); dependencies = ( + 6D683C2E1CF3A65600656B71 /* PBXTargetDependency */, B31987FE1AB782D100B0A900 /* PBXTargetDependency */, ); name = "FBSnapshotTestCase iOS Tests"; @@ -344,11 +441,9 @@ }; B31987EF1AB782D000B0A900 = { CreatedOnToolsVersion = 6.1.1; - LastSwiftMigration = 0800; }; B31987FA1AB782D100B0A900 = { CreatedOnToolsVersion = 6.1.1; - LastSwiftMigration = 0800; }; }; }; @@ -362,6 +457,12 @@ mainGroup = B31987E61AB782D000B0A900; productRefGroup = B31987F11AB782D000B0A900 /* Products */; projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 6D683C171CF3A24400656B71 /* Products */; + ProjectRef = 6D683C161CF3A24400656B71 /* OCMock.xcodeproj */; + }, + ); projectRoot = ""; targets = ( B31987EF1AB782D000B0A900 /* FBSnapshotTestCase iOS */, @@ -372,6 +473,51 @@ }; /* End PBXProject section */ +/* Begin PBXReferenceProxy section */ + 6D683C201CF3A24500656B71 /* OCMock.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = OCMock.framework; + remoteRef = 6D683C1F1CF3A24500656B71 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 6D683C221CF3A24500656B71 /* OCMockTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = OCMockTests.xctest; + remoteRef = 6D683C211CF3A24500656B71 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 6D683C241CF3A24500656B71 /* libOCMock.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libOCMock.a; + remoteRef = 6D683C231CF3A24500656B71 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 6D683C261CF3A24500656B71 /* OCMockLibTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = OCMockLibTests.xctest; + remoteRef = 6D683C251CF3A24500656B71 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 6D683C281CF3A24500656B71 /* OCMock.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = OCMock.framework; + remoteRef = 6D683C271CF3A24500656B71 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 6D683C2A1CF3A24500656B71 /* OCMock.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = OCMock.framework; + remoteRef = 6D683C291CF3A24500656B71 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + /* Begin PBXResourcesBuildPhase section */ 827137781C63AB6F00354E42 /* Resources */ = { isa = PBXResourcesBuildPhase; @@ -433,6 +579,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6D935ED71CDBDA6500E24C54 /* FBSnapshotTestCasePlatformTests.m in Sources */, + 6D9E0A6C1CE20E8400A2E365 /* FBSnapshotTestCaseTests.m in Sources */, 827137A41C63AC0F00354E42 /* FBSnapshotControllerTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -456,6 +604,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6D935ED61CDBDA6500E24C54 /* FBSnapshotTestCasePlatformTests.m in Sources */, + 6D9E0A6B1CE20E8400A2E365 /* FBSnapshotTestCaseTests.m in Sources */, B31988311AB784CB00B0A900 /* FBSnapshotControllerTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -463,6 +613,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 6D683C2E1CF3A65600656B71 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "OCMock iOS"; + targetProxy = 6D683C2D1CF3A65600656B71 /* PBXContainerItemProxy */; + }; 827137861C63AB7000354E42 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 827137791C63AB6F00354E42 /* FBSnapshotTestCase tvOS */; @@ -484,7 +639,6 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EMBEDDED_CONTENT_CONTAINS_SWIFT = YES; - ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", @@ -517,7 +671,6 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EMBEDDED_CONTENT_CONTAINS_SWIFT = YES; - ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", @@ -611,7 +764,6 @@ MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; - SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -650,7 +802,6 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; - SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -727,9 +878,10 @@ ); INFOPLIST_FILE = "FBSnapshotTestCaseTests/FBSnapshotTestCaseTests-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_LDFLAGS = "-all_load"; PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + USER_HEADER_SEARCH_PATHS = "Submodules/**"; }; name = Debug; }; @@ -742,9 +894,10 @@ ); INFOPLIST_FILE = "FBSnapshotTestCaseTests/FBSnapshotTestCaseTests-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_LDFLAGS = "-all_load"; PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + USER_HEADER_SEARCH_PATHS = "Submodules/**"; }; name = Release; }; diff --git a/FBSnapshotTestCase.xcworkspace/xcshareddata/FBSnapshotTestCase.xcscmblueprint b/FBSnapshotTestCase.xcworkspace/xcshareddata/FBSnapshotTestCase.xcscmblueprint new file mode 100644 index 0000000..9f31a67 --- /dev/null +++ b/FBSnapshotTestCase.xcworkspace/xcshareddata/FBSnapshotTestCase.xcscmblueprint @@ -0,0 +1,30 @@ +{ + "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "542E5EAD47EA299C9005C3138923F693160B998F", + "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { + + }, + "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { + "542E5EAD47EA299C9005C3138923F693160B998F" : 0, + "E4BCE3AE6B24E41B9BCE312FF3B0B6CD0B8B8025" : 0 + }, + "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "59A3BEEC-60D0-4B63-96E2-09BEE25716D0", + "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { + "542E5EAD47EA299C9005C3138923F693160B998F" : "ios-snapshot-test-case\/", + "E4BCE3AE6B24E41B9BCE312FF3B0B6CD0B8B8025" : "ios-snapshot-test-case\/vendor\/OCMock\/" + }, + "DVTSourceControlWorkspaceBlueprintNameKey" : "FBSnapshotTestCase", + "DVTSourceControlWorkspaceBlueprintVersion" : 204, + "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "FBSnapshotTestCase.xcworkspace", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ + { + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "github.com:Antondomashnev\/ios-snapshot-test-case.git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "542E5EAD47EA299C9005C3138923F693160B998F" + }, + { + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "git:\/\/github.com\/erikdoe\/ocmock", + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "E4BCE3AE6B24E41B9BCE312FF3B0B6CD0B8B8025" + } + ] +} \ No newline at end of file diff --git a/FBSnapshotTestCase/FBSnapshotTestCase.h b/FBSnapshotTestCase/FBSnapshotTestCase.h index 72abc3c..bfe2a6e 100644 --- a/FBSnapshotTestCase/FBSnapshotTestCase.h +++ b/FBSnapshotTestCase/FBSnapshotTestCase.h @@ -8,8 +8,9 @@ * */ -#import -#import +#import "FBSnapshotTestCasePlatform.h" +#import "FBSnapshotTestController.h" +#import "FBSnapshotTestCaseAgnosticnessOption.h" #import @@ -67,7 +68,6 @@ XCTAssertTrue(noErrors, @"%@", errorDescription); \ } - /** The base class of view snapshotting tests. If you have small UI component, it's often easier to configure it in a test and compare an image of the view to a reference image that write lots of complex layout-code tests. @@ -95,10 +95,11 @@ @property (readwrite, nonatomic, assign) BOOL recordMode; /** - When @c YES appends the name of the device model and OS to the snapshot file name. - The default value is @c NO. + The default value is @c FBSnapshotTestCaseAgnosticnessOptionNone. + + @see FBSnapshotTestCaseAgnosticnessOption */ -@property (readwrite, nonatomic, assign, getter=isDeviceAgnostic) BOOL deviceAgnostic; +@property (readwrite, nonatomic, assign) FBSnapshotTestCaseAgnosticnessOption agnosticnessOptions; /** When YES, renders a snapshot of the complete view hierarchy as visible onscreen. @@ -178,3 +179,13 @@ - (NSString *)getReferenceImageDirectoryWithDefault:(NSString *)dir; @end + +@interface FBSnapshotTestCase (Deprecated) + +/** + When @c YES appends the name of the device model, OS and screen size to the snapshot file name. + The default value is @c NO. + */ +@property (readwrite, nonatomic, assign, getter=isDeviceAgnostic) BOOL deviceAgnostic __attribute((deprecated("use agnosticnessOptions instead"))); + +@end diff --git a/FBSnapshotTestCase/FBSnapshotTestCase.m b/FBSnapshotTestCase/FBSnapshotTestCase.m index f44458c..264e827 100644 --- a/FBSnapshotTestCase/FBSnapshotTestCase.m +++ b/FBSnapshotTestCase/FBSnapshotTestCase.m @@ -41,15 +41,15 @@ - (void)setRecordMode:(BOOL)recordMode _snapshotController.recordMode = recordMode; } -- (BOOL)isDeviceAgnostic +- (FBSnapshotTestCaseAgnosticnessOption)agnosticnessOptions { - return _snapshotController.deviceAgnostic; + return _snapshotController.agnosticnessOptions; } -- (void)setDeviceAgnostic:(BOOL)deviceAgnostic +- (void)setAgnosticnessOptions:(FBSnapshotTestCaseAgnosticnessOption)agnosticnessOptions { NSAssert1(_snapshotController, @"%s cannot be called before [super setUp]", __FUNCTION__); - _snapshotController.deviceAgnostic = deviceAgnostic; + _snapshotController.agnosticnessOptions = agnosticnessOptions; } - (BOOL)usesDrawViewHierarchyInRect @@ -190,3 +190,17 @@ - (BOOL)_compareSnapshotOfViewOrLayer:(id)viewOrLayer } @end + +@implementation FBSnapshotTestCase (Deprecated) + +- (BOOL)isDeviceAgnostic { + return (_snapshotController.agnosticnessOptions & FBSnapshotTestCaseAgnosticnessOptionDeviceModel) && + (_snapshotController.agnosticnessOptions & FBSnapshotTestCaseAgnosticnessOptionScreenSize) && + (_snapshotController.agnosticnessOptions & FBSnapshotTestCaseAgnosticnessOptionOSVersion); +} + +- (void)setDeviceAgnostic:(BOOL)deviceAgnostic { + _snapshotController.agnosticnessOptions = FBSnapshotTestCaseAgnosticnessOptionDeviceModel | FBSnapshotTestCaseAgnosticnessOptionScreenSize | FBSnapshotTestCaseAgnosticnessOptionOSVersion; +} + +@end diff --git a/FBSnapshotTestCase/FBSnapshotTestCaseAgnosticnessOption.h b/FBSnapshotTestCase/FBSnapshotTestCaseAgnosticnessOption.h new file mode 100644 index 0000000..5c668ea --- /dev/null +++ b/FBSnapshotTestCase/FBSnapshotTestCaseAgnosticnessOption.h @@ -0,0 +1,35 @@ +// +// FBSnapshotTestCaseAgnosticnessOption.h +// FBSnapshotTestCase +// +// Created by Anton Domashnev on 05/05/16. +// Copyright © 2016 Facebook. All rights reserved. +// + +@import Foundation; + +/** + Each of the options except none represents a specific suffix for snapshot name + */ +typedef NS_OPTIONS(NSUInteger, FBSnapshotTestCaseAgnosticnessOption) { + /** + None of the available options + */ + FBSnapshotTestCaseAgnosticnessOptionNone = 0, + /** + Appends the name of the device model to the snapshot file name. + */ + FBSnapshotTestCaseAgnosticnessOptionDeviceModel = 1 << 0, + /** + Appends the screen size to the snapshot file name. + */ + FBSnapshotTestCaseAgnosticnessOptionScreenSize = 1 << 1, + /** + Appends the localization identifier to the snapshot file name. + */ + FBSnapshotTestCaseAgnosticnessOptionLocalization = 1 << 2, + /** + Appends the name of the OS version to the snapshot file name. + */ + FBSnapshotTestCaseAgnosticnessOptionOSVersion = 1 << 3 +}; \ No newline at end of file diff --git a/FBSnapshotTestCase/FBSnapshotTestCasePlatform.h b/FBSnapshotTestCase/FBSnapshotTestCasePlatform.h index e04acf2..a9ac274 100644 --- a/FBSnapshotTestCase/FBSnapshotTestCasePlatform.h +++ b/FBSnapshotTestCase/FBSnapshotTestCasePlatform.h @@ -10,6 +10,8 @@ #import +#import "FBSnapshotTestCaseAgnosticnessOption.h" + #ifdef __cplusplus extern "C" { #endif @@ -33,11 +35,11 @@ NSOrderedSet *FBSnapshotTestCaseDefaultSuffixes(void); /** Returns a fully «normalized» file name. - Strips punctuation and spaces and replaces them with @c _. Also appends the device model, running OS and screen size to the file name. + Strips punctuation and spaces and replaces them with @c _. Also appends the provided options by the @c options parameter. - @returns An @c NSString object containing the passed @c fileName with the device model, OS and screen size appended at the end. + @returns An @c NSString object containing the passed @c fileName with the provided options by the @c options parameter appended at the end. */ -NSString *FBDeviceAgnosticNormalizedFileName(NSString *fileName); +NSString *FBAgnosticNormalizedFileName(NSString *fileName, FBSnapshotTestCaseAgnosticnessOption options); #ifdef __cplusplus } diff --git a/FBSnapshotTestCase/FBSnapshotTestCasePlatform.m b/FBSnapshotTestCase/FBSnapshotTestCasePlatform.m index d8709d8..42cc556 100644 --- a/FBSnapshotTestCase/FBSnapshotTestCasePlatform.m +++ b/FBSnapshotTestCase/FBSnapshotTestCasePlatform.m @@ -32,20 +32,35 @@ BOOL FBSnapshotTestCaseIs64Bit(void) return [suffixesSet copy]; } -NSString *FBDeviceAgnosticNormalizedFileName(NSString *fileName) +NSString *FBAgnosticNormalizedFileName(NSString *fileName, FBSnapshotTestCaseAgnosticnessOption options) { - UIDevice *device = [UIDevice currentDevice]; - UIWindow *keyWindow = [[UIApplication sharedApplication] fb_strictKeyWindow]; - CGSize screenSize = keyWindow.bounds.size; - NSString *os = device.systemVersion; - - fileName = [NSString stringWithFormat:@"%@_%@%@_%.0fx%.0f", fileName, device.model, os, screenSize.width, screenSize.height]; + if (options == FBSnapshotTestCaseAgnosticnessOptionNone) { + return fileName; + } + NSMutableString *mutableFileName = [fileName mutableCopy]; + if (options & FBSnapshotTestCaseAgnosticnessOptionDeviceModel) { + UIDevice *device = [UIDevice currentDevice]; + [mutableFileName appendFormat:@"_%@", device.model]; + } + if (options & FBSnapshotTestCaseAgnosticnessOptionOSVersion) { + UIDevice *device = [UIDevice currentDevice]; + [mutableFileName appendFormat:@"%@%@", (options & FBSnapshotTestCaseAgnosticnessOptionDeviceModel) ? @"" : @"_", device.systemVersion]; + } + if (options & FBSnapshotTestCaseAgnosticnessOptionScreenSize) { + UIWindow *keyWindow = [[UIApplication sharedApplication] fb_strictKeyWindow]; + CGSize screenSize = keyWindow.bounds.size; + [mutableFileName appendFormat:@"_%.0fx%.0f", screenSize.width, screenSize.height]; + } + if (options & FBSnapshotTestCaseAgnosticnessOptionLocalization) { + [mutableFileName appendFormat:@"_%@", [[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"] firstObject]]; + } + NSMutableCharacterSet *invalidCharacters = [NSMutableCharacterSet new]; [invalidCharacters formUnionWithCharacterSet:[NSCharacterSet whitespaceCharacterSet]]; [invalidCharacters formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]]; - NSArray *validComponents = [fileName componentsSeparatedByCharactersInSet:invalidCharacters]; - fileName = [validComponents componentsJoinedByString:@"_"]; + NSArray *validComponents = [mutableFileName componentsSeparatedByCharactersInSet:invalidCharacters]; + NSString *resultFileName = [validComponents componentsJoinedByString:@"_"]; - return fileName; + return resultFileName; } \ No newline at end of file diff --git a/FBSnapshotTestCase/FBSnapshotTestController.h b/FBSnapshotTestCase/FBSnapshotTestController.h index 0000c71..5ea0ada 100644 --- a/FBSnapshotTestCase/FBSnapshotTestController.h +++ b/FBSnapshotTestCase/FBSnapshotTestController.h @@ -11,6 +11,8 @@ #import #import +#import "FBSnapshotTestCaseAgnosticnessOption.h" + typedef NS_ENUM(NSInteger, FBSnapshotTestControllerErrorCode) { FBSnapshotTestControllerErrorCodeUnknown, FBSnapshotTestControllerErrorCodeNeedsRecord, @@ -59,7 +61,7 @@ extern NSString *const FBDiffedImageKey; When @c YES appends the name of the device model and OS to the snapshot file name. The default value is @c NO. */ -@property (readwrite, nonatomic, assign, getter=isDeviceAgnostic) BOOL deviceAgnostic; +@property (readwrite, nonatomic, assign) FBSnapshotTestCaseAgnosticnessOption agnosticnessOptions; /** Uses drawViewHierarchyInRect:afterScreenUpdates: to draw the image instead of renderInContext: @@ -163,4 +165,4 @@ extern NSString *const FBDiffedImageKey; selector:(SEL)selector identifier:(NSString *)identifier error:(NSError **)errorPtr; -@end +@end \ No newline at end of file diff --git a/FBSnapshotTestCase/FBSnapshotTestController.m b/FBSnapshotTestCase/FBSnapshotTestController.m index 74c5a0a..46cc6fd 100644 --- a/FBSnapshotTestCase/FBSnapshotTestController.m +++ b/FBSnapshotTestCase/FBSnapshotTestController.m @@ -46,7 +46,7 @@ - (instancetype)initWithTestName:(NSString *)testName { if (self = [super init]) { _testName = [testName copy]; - _deviceAgnostic = NO; + _agnosticnessOptions = FBSnapshotTestCaseAgnosticnessOptionNone; _fileManager = [[NSFileManager alloc] init]; } @@ -233,8 +233,8 @@ - (NSString *)_fileNameForSelector:(SEL)selector fileName = [fileName stringByAppendingFormat:@"_%@", identifier]; } - if (self.isDeviceAgnostic) { - fileName = FBDeviceAgnosticNormalizedFileName(fileName); + if (self.agnosticnessOptions != FBSnapshotTestCaseAgnosticnessOptionNone) { + fileName = FBAgnosticNormalizedFileName(fileName, self.agnosticnessOptions); } if ([[UIScreen mainScreen] scale] > 1) { diff --git a/FBSnapshotTestCaseDemo/FBSnapshotTestCaseDemo.xcodeproj/project.pbxproj b/FBSnapshotTestCaseDemo/FBSnapshotTestCaseDemo.xcodeproj/project.pbxproj index b198a70..f5ae4a1 100644 --- a/FBSnapshotTestCaseDemo/FBSnapshotTestCaseDemo.xcodeproj/project.pbxproj +++ b/FBSnapshotTestCaseDemo/FBSnapshotTestCaseDemo.xcodeproj/project.pbxproj @@ -177,15 +177,13 @@ isa = PBXNativeTarget; buildConfigurationList = B30449281AB794320067C75D /* Build configuration list for PBXNativeTarget "FBSnapshotTestCaseDemoTests" */; buildPhases = ( - EEBCF471BAA9F698AD39E48C /* [CP] Check Pods Manifest.lock */, 2446417C513BDAF88B9890FC /* [CP] Check Pods Manifest.lock */, B30449171AB794320067C75D /* Sources */, B30449181AB794320067C75D /* Frameworks */, B30449191AB794320067C75D /* Resources */, EB64CD802D89DDA691FA7827 /* [CP] Embed Pods Frameworks */, 30B7BE4963F35A6D89E72AFF /* [CP] Copy Pods Resources */, - 185D9F73B9CAAE68941B87AB /* 📦 Embed Pods Frameworks */, - E1316CB9B2C08A51D1D31909 /* 📦 Copy Pods Resources */, + E3D0EA19BD9D277F66ED1AC6 /* Embed Pods Frameworks */, ); buildRules = ( ); @@ -209,11 +207,9 @@ TargetAttributes = { B30449011AB794320067C75D = { CreatedOnToolsVersion = 6.1.1; - LastSwiftMigration = 0800; }; B304491A1AB794320067C75D = { CreatedOnToolsVersion = 6.1.1; - LastSwiftMigration = 0800; TestTargetID = B30449011AB794320067C75D; }; }; @@ -258,21 +254,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 185D9F73B9CAAE68941B87AB /* 📦 Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "📦 Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-FBSnapshotTestCaseDemoTests/Pods-FBSnapshotTestCaseDemoTests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 2446417C513BDAF88B9890FC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -285,7 +266,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; 30B7BE4963F35A6D89E72AFF /* [CP] Copy Pods Resources */ = { @@ -303,19 +284,19 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-FBSnapshotTestCaseDemoTests/Pods-FBSnapshotTestCaseDemoTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; - E1316CB9B2C08A51D1D31909 /* 📦 Copy Pods Resources */ = { + E3D0EA19BD9D277F66ED1AC6 /* Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "📦 Copy Pods Resources"; + name = "Embed Pods Frameworks"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-FBSnapshotTestCaseDemoTests/Pods-FBSnapshotTestCaseDemoTests-resources.sh\"\n"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-FBSnapshotTestCaseDemoTests/Pods-FBSnapshotTestCaseDemoTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; EB64CD802D89DDA691FA7827 /* [CP] Embed Pods Frameworks */ = { @@ -333,21 +314,6 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-FBSnapshotTestCaseDemoTests/Pods-FBSnapshotTestCaseDemoTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - EEBCF471BAA9F698AD39E48C /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -477,7 +443,6 @@ INFOPLIST_FILE = "FBSnapshotTestCaseDemo/FBSnapshotTestCaseDemo-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -489,7 +454,6 @@ INFOPLIST_FILE = "FBSnapshotTestCaseDemo/FBSnapshotTestCaseDemo-Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; }; name = Release; }; diff --git a/FBSnapshotTestCaseDemo/FBSnapshotTestCaseDemo.xcodeproj/xcshareddata/xcschemes/FBSnapshotTestCaseDemo.xcscheme b/FBSnapshotTestCaseDemo/FBSnapshotTestCaseDemo.xcodeproj/xcshareddata/xcschemes/FBSnapshotTestCaseDemo.xcscheme index 657d47f..f69e06e 100644 --- a/FBSnapshotTestCaseDemo/FBSnapshotTestCaseDemo.xcodeproj/xcshareddata/xcschemes/FBSnapshotTestCaseDemo.xcscheme +++ b/FBSnapshotTestCaseDemo/FBSnapshotTestCaseDemo.xcodeproj/xcshareddata/xcschemes/FBSnapshotTestCaseDemo.xcscheme @@ -1,6 +1,6 @@ #import "FBSnapshotTestController.h" +#import "FBSnapshotTestCaseAgnosticnessOption.h" #import "FBSnapshotTestCasePlatform.h" @interface FBSnapshotControllerTests : XCTestCase @@ -91,7 +92,7 @@ - (void)testCompareReferenceImageWithDifferentSizes XCTAssertEqual(error.code, FBSnapshotTestControllerErrorCodeImagesDifferentSizes); } -- (void)testFailedImageWithDeviceAgnosticShouldHaveModelOnName +- (void)testFailedImageWithAgnosticnessShouldHaveOptionsOnName { UIImage *referenceImage = [self _bundledImageNamed:@"square" type:@"png"]; XCTAssertNotNil(referenceImage); @@ -99,13 +100,13 @@ - (void)testFailedImageWithDeviceAgnosticShouldHaveModelOnName XCTAssertNotNil(testImage); FBSnapshotTestController *controller = [[FBSnapshotTestController alloc] initWithTestClass:nil]; - [controller setDeviceAgnostic:YES]; + [controller setAgnosticnessOptions:(FBSnapshotTestCaseAgnosticnessOptionDeviceModel)]; [controller setReferenceImagesDirectory:@"/dev/null/"]; NSError *error = nil; - SEL selector = @selector(isDeviceAgnostic); + SEL selector = @selector(agnosticnessOptions); [controller referenceImageForSelector:selector identifier:@"" error:&error]; XCTAssertNotNil(error); - NSString *deviceAgnosticReferencePath = FBDeviceAgnosticNormalizedFileName(NSStringFromSelector(selector)); + NSString *deviceAgnosticReferencePath = FBAgnosticNormalizedFileName(NSStringFromSelector(selector), FBSnapshotTestCaseAgnosticnessOptionDeviceModel); XCTAssertTrue([(NSString *)[error.userInfo objectForKey:FBReferenceImageFilePathKey] containsString:deviceAgnosticReferencePath]); } diff --git a/FBSnapshotTestCaseTests/FBSnapshotTestCasePlatformTests.m b/FBSnapshotTestCaseTests/FBSnapshotTestCasePlatformTests.m new file mode 100644 index 0000000..a5b1b17 --- /dev/null +++ b/FBSnapshotTestCaseTests/FBSnapshotTestCasePlatformTests.m @@ -0,0 +1,87 @@ +// +// FBSnapshotTestCasePlatformTests.m +// FBSnapshotTestCase +// +// Created by Anton Domashnev on 05/05/16. +// Copyright © 2016 Facebook. All rights reserved. +// + +@import XCTest; +@import UIKit; + +#import + +#import "FBSnapshotTestCasePlatform.h" + +@interface FBSnapshotTestCasePlatformTests : XCTestCase + +@end + +@implementation FBSnapshotTestCasePlatformTests + +- (void)testAgnosticNormalizedFileNameShouldReturnFileNameWithModelNameIfModelNameOptionPresented { + UIDevice *currentDeviceMock = OCMPartialMock([UIDevice new]); + id deviceMock = OCMClassMock([UIDevice class]); + OCMStub([deviceMock currentDevice]).andReturn(currentDeviceMock); + OCMStub([currentDeviceMock model]).andReturn(@"iPhone"); + + NSString *normalizedFileName = FBAgnosticNormalizedFileName(@"testFileName", FBSnapshotTestCaseAgnosticnessOptionDeviceModel); + + XCTAssertTrue([normalizedFileName hasSuffix:@"_iPhone"]); + + [deviceMock stopMocking]; +} + +- (void)testAgnosticNormalizedFileNameShouldReturnFileNameWithOSIfOSOptionPresented { + UIDevice *currentDeviceMock = OCMPartialMock([UIDevice new]); + id deviceMock = OCMClassMock([UIDevice class]); + OCMStub([deviceMock currentDevice]).andReturn(currentDeviceMock); + OCMStub([currentDeviceMock systemVersion]).andReturn(@"4.0"); + + NSString *normalizedFileName = FBAgnosticNormalizedFileName(@"testFileName", FBSnapshotTestCaseAgnosticnessOptionOSVersion); + + XCTAssertTrue([normalizedFileName hasSuffix:@"_4_0"]); + + [deviceMock stopMocking]; +} + +- (void)testAgnosticNormalizedFileNameShouldReturnFileNameWithScreenSizeIfScreenSizeOptionPresented { + NSString *normalizedFileName = FBAgnosticNormalizedFileName(@"testFileName", FBSnapshotTestCaseAgnosticnessOptionScreenSize); + + XCTAssertTrue([normalizedFileName hasSuffix:@"_0x0"]); +} + +- (void)testAgnosticNormalizedFileNameShouldReturnFileNameWithLocalizationIdentifierIfLocalizationOptionPresented { + NSUserDefaults *defaults = OCMPartialMock([NSUserDefaults new]); + id userDefaultsMock = OCMClassMock([NSUserDefaults class]); + OCMStub([userDefaultsMock standardUserDefaults]).andReturn(defaults); + [defaults setObject:@[@"ru-RU"] forKey:@"AppleLanguages"]; + + NSString *normalizedFileName = FBAgnosticNormalizedFileName(@"testFileName", FBSnapshotTestCaseAgnosticnessOptionLocalization); + + XCTAssertTrue([normalizedFileName hasSuffix:@"_ru_RU"]); + + [userDefaultsMock stopMocking]; +} + +- (void)testAgnosticNormalizedFileNameShouldReturnFileNameWithAllProvidedOptions { + UIDevice *currentDeviceMock = OCMPartialMock([UIDevice new]); + id deviceMock = OCMClassMock([UIDevice class]); + OCMStub([deviceMock currentDevice]).andReturn(currentDeviceMock); + OCMStub([currentDeviceMock model]).andReturn(@"iPhone"); + OCMStub([currentDeviceMock systemVersion]).andReturn(@"4.0"); + + NSUserDefaults *defaults = OCMPartialMock([NSUserDefaults new]); + id userDefaultsMock = OCMClassMock([NSUserDefaults class]); + OCMStub([userDefaultsMock standardUserDefaults]).andReturn(defaults); + [defaults setObject:@[@"ru-RU"] forKey:@"AppleLanguages"]; + + NSString *normalizedFileName = FBAgnosticNormalizedFileName(@"testFileName", (FBSnapshotTestCaseAgnosticnessOption)(FBSnapshotTestCaseAgnosticnessOptionOSVersion | FBSnapshotTestCaseAgnosticnessOptionScreenSize | FBSnapshotTestCaseAgnosticnessOptionDeviceModel | FBSnapshotTestCaseAgnosticnessOptionLocalization)); + + XCTAssertTrue([normalizedFileName hasSuffix:@"_iPhone4_0_0x0_ru_RU"]); + + [deviceMock stopMocking]; + [userDefaultsMock stopMocking]; +} + +@end diff --git a/FBSnapshotTestCaseTests/FBSnapshotTestCaseTests.m b/FBSnapshotTestCaseTests/FBSnapshotTestCaseTests.m new file mode 100644 index 0000000..409a1d5 --- /dev/null +++ b/FBSnapshotTestCaseTests/FBSnapshotTestCaseTests.m @@ -0,0 +1,56 @@ +// +// FBSnapshotTestCaseTests.m +// FBSnapshotTestCase +// +// Created by Anton Domashnev on 10/05/16. +// Copyright © 2016 Facebook. All rights reserved. +// + +@import XCTest; + +#import "FBSnapshotTestCase.h" + +@interface FBSnapshotTestCaseTests : XCTestCase + +@property (nonatomic, strong) FBSnapshotTestCase *testCase; + +@end + +@implementation FBSnapshotTestCaseTests + +- (void)setUp { + [super setUp]; + self.testCase = [FBSnapshotTestCase new]; + [self.testCase setUp]; +} + +- (void)tearDown { + [self.testCase tearDown]; + [super tearDown]; +} + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + +- (void)testThatSetDeviceAgnosticShouldSetCorrectAgnosticnessOptions { + self.testCase.deviceAgnostic = YES; + + XCTAssertTrue(self.testCase.agnosticnessOptions & FBSnapshotTestCaseAgnosticnessOptionDeviceModel); + XCTAssertTrue(self.testCase.agnosticnessOptions & FBSnapshotTestCaseAgnosticnessOptionScreenSize); + XCTAssertTrue(self.testCase.agnosticnessOptions & FBSnapshotTestCaseAgnosticnessOptionOSVersion); +} + +- (void)testThatDeviceAgnosticShouldReturnCorrectAgnosticnessOptions { + self.testCase.agnosticnessOptions = FBSnapshotTestCaseAgnosticnessOptionDeviceModel; + XCTAssertFalse(self.testCase.isDeviceAgnostic); + + self.testCase.agnosticnessOptions = FBSnapshotTestCaseAgnosticnessOptionDeviceModel | FBSnapshotTestCaseAgnosticnessOptionScreenSize; + XCTAssertFalse(self.testCase.isDeviceAgnostic); + + self.testCase.agnosticnessOptions = FBSnapshotTestCaseAgnosticnessOptionDeviceModel | FBSnapshotTestCaseAgnosticnessOptionScreenSize | FBSnapshotTestCaseAgnosticnessOptionOSVersion; + XCTAssertTrue(self.testCase.isDeviceAgnostic); +} + +#pragma GCC diagnostic pop + +@end diff --git a/vendor/OCMock b/vendor/OCMock new file mode 160000 index 0000000..69142b9 --- /dev/null +++ b/vendor/OCMock @@ -0,0 +1 @@ +Subproject commit 69142b9b916febda3dc88ba63927f0a916ee2994