From 416822151bf08431c4297a29e0afa5fe1d72c624 Mon Sep 17 00:00:00 2001 From: Nicholas Entin Date: Mon, 14 Aug 2023 21:04:54 -0700 Subject: [PATCH] Add imprecise comparison variants to iOSSnapshotTestCase extension This adds variants of the `SnapshotVerify*(...)` methods that allow for imprecise comparisons, i.e. using the `perPixelTolerance` and `overallTolerance` parameters. ## Why is this necessary? Adding tolerances has been a highly requested feature (see #63) to work around some simulator changes introduced in iOS 13. Historically the simulator has supported CPU-based rendering, giving us very stable image representations of views that we can compare pixel-by-pixel. Unfortunately, with iOS 13, Apple changed the simulator to use exclusively GPU-based rendering, which means that the resulting snapshots may differ slightly across machines (see uber/ios-snapshot-test-case#109). The negative effects of this were mitigated in iOSSnapshotTestCase by adding two tolerances: a **per-pixel tolerance** that controls how close in color two pixels need to be to count as unchanged and an **overall tolerance** that controls what portion of pixels between two images need to be the same (based on the per-pixel calculation) for the images to be considered unchanged. Setting these tolerances to non-zero values enables engineers to record tests on one machine and run them on another without worrying about the tests failing due to differences in GPU rendering. --- .../project.pbxproj | 4 + .../SnapshotTests/ImpreciseObjectiveCTests.m | 92 ++++++++++ ...hActivationPointAlways_13_7_375x812@3x.png | Bin 0 -> 22954 bytes ...hActivationPointAlways_14_5_390x844@3x.png | Bin 0 -> 22899 bytes ...hIdentifier_identifier_13_7_375x812@3x.png | Bin 0 -> 21705 bytes ...hIdentifier_identifier_14_5_390x844@3x.png | Bin 0 -> 21678 bytes .../testSimpleView_13_7_375x812@3x.png | Bin 0 -> 21705 bytes .../testSimpleView_14_5_390x844@3x.png | Bin 0 -> 21678 bytes ...ViewWithInvertedColors_13_7_375x812@3x.png | Bin 0 -> 3598 bytes ...ViewWithInvertedColors_14_5_390x844@3x.png | Bin 0 -> 3598 bytes .../FBSnapshotTestCase_Accessibility.h | 20 +-- ...BSnapshotTestCase_ImpreciseAccessibility.h | 63 +++++++ .../FBSnapshotTestCase+Accessibility.swift | 2 +- ...pshotTestCase+ImpreciseAccessibility.swift | 159 ++++++++++++++++++ .../FBSnapshotTestCase+ObjCSupport.swift | 47 ++++-- 15 files changed, 362 insertions(+), 25 deletions(-) create mode 100644 Example/SnapshotTests/ImpreciseObjectiveCTests.m create mode 100644 Example/SnapshotTests/ReferenceImages/_64/ImpreciseObjectiveCTests/testSimpleViewWithActivationPointAlways_13_7_375x812@3x.png create mode 100644 Example/SnapshotTests/ReferenceImages/_64/ImpreciseObjectiveCTests/testSimpleViewWithActivationPointAlways_14_5_390x844@3x.png create mode 100644 Example/SnapshotTests/ReferenceImages/_64/ImpreciseObjectiveCTests/testSimpleViewWithIdentifier_identifier_13_7_375x812@3x.png create mode 100644 Example/SnapshotTests/ReferenceImages/_64/ImpreciseObjectiveCTests/testSimpleViewWithIdentifier_identifier_14_5_390x844@3x.png create mode 100644 Example/SnapshotTests/ReferenceImages/_64/ImpreciseObjectiveCTests/testSimpleView_13_7_375x812@3x.png create mode 100644 Example/SnapshotTests/ReferenceImages/_64/ImpreciseObjectiveCTests/testSimpleView_14_5_390x844@3x.png create mode 100644 Example/SnapshotTests/ReferenceImages/_64/ImpreciseObjectiveCTests/testViewWithInvertedColors_13_7_375x812@3x.png create mode 100644 Example/SnapshotTests/ReferenceImages/_64/ImpreciseObjectiveCTests/testViewWithInvertedColors_14_5_390x844@3x.png create mode 100644 Sources/AccessibilitySnapshot/iOSSnapshotTestCase/ObjC/include/FBSnapshotTestCase_ImpreciseAccessibility.h create mode 100644 Sources/AccessibilitySnapshot/iOSSnapshotTestCase/Swift/FBSnapshotTestCase+ImpreciseAccessibility.swift diff --git a/Example/AccessibilitySnapshot.xcodeproj/project.pbxproj b/Example/AccessibilitySnapshot.xcodeproj/project.pbxproj index f10f78b8..996ea405 100644 --- a/Example/AccessibilitySnapshot.xcodeproj/project.pbxproj +++ b/Example/AccessibilitySnapshot.xcodeproj/project.pbxproj @@ -20,6 +20,7 @@ 3D3F2E142263E6B900F7608E /* InvertColorsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D3F2E132263E6B900F7608E /* InvertColorsViewController.swift */; }; 3D3F2E162263E94D00F7608E /* InvertColorsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D3F2E152263E94D00F7608E /* InvertColorsTests.swift */; }; 3D4674682116A3F100278B57 /* ViewAccessibilityPropertiesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D4674672116A3F100278B57 /* ViewAccessibilityPropertiesViewController.swift */; }; + 3D9334942A8B2E520078A142 /* ImpreciseObjectiveCTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D9334932A8B2E520078A142 /* ImpreciseObjectiveCTests.m */; }; 3D9894F9213509C8006C16F6 /* DescriptionEdgeCasesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D9894F8213509C8006C16F6 /* DescriptionEdgeCasesViewController.swift */; }; 3DA12A3222405B9E00EB3C33 /* DataTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DA12A3122405B9E00EB3C33 /* DataTableViewController.swift */; }; 3DBAC28722406EBB00EF4D0A /* AccessibilityContainersTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DBAC28622406EBB00EF4D0A /* AccessibilityContainersTests.swift */; }; @@ -94,6 +95,7 @@ 3D4674672116A3F100278B57 /* ViewAccessibilityPropertiesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewAccessibilityPropertiesViewController.swift; sourceTree = ""; }; 3D881956246E03C00061DA6A /* UnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3D88195A246E03C00061DA6A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3D9334932A8B2E520078A142 /* ImpreciseObjectiveCTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ImpreciseObjectiveCTests.m; sourceTree = ""; }; 3D9894F8213509C8006C16F6 /* DescriptionEdgeCasesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DescriptionEdgeCasesViewController.swift; sourceTree = ""; }; 3DA12A3122405B9E00EB3C33 /* DataTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataTableViewController.swift; sourceTree = ""; }; 3DBAC28622406EBB00EF4D0A /* AccessibilityContainersTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityContainersTests.swift; sourceTree = ""; }; @@ -294,6 +296,7 @@ isa = PBXGroup; children = ( 3D13DB512221124000066519 /* ObjectiveCTests.m */, + 3D9334932A8B2E520078A142 /* ImpreciseObjectiveCTests.m */, 3DBAC28622406EBB00EF4D0A /* AccessibilityContainersTests.swift */, 607FACEB1AFB9204008FA782 /* AccessibilityPropertiesTests.swift */, 3D39BFAF2239BC42009C3EF4 /* ActivationPointTests.swift */, @@ -637,6 +640,7 @@ 3D220A2B252AF72900359C1E /* AccessibleContainerView.swift in Sources */, 1635CE4E251EAC6700907101 /* SnapshotTestingTests.swift in Sources */, 3DBEAA5D2223C0CE00FAE61D /* SwitchControlsTests.swift in Sources */, + 3D9334942A8B2E520078A142 /* ImpreciseObjectiveCTests.m in Sources */, 3DF46500220D5FB00048D446 /* ElementSelectionTests.swift in Sources */, 3DBAC28722406EBB00EF4D0A /* AccessibilityContainersTests.swift in Sources */, 3DC488392212B40C006D1E15 /* ModalTests.swift in Sources */, diff --git a/Example/SnapshotTests/ImpreciseObjectiveCTests.m b/Example/SnapshotTests/ImpreciseObjectiveCTests.m new file mode 100644 index 00000000..ed56084d --- /dev/null +++ b/Example/SnapshotTests/ImpreciseObjectiveCTests.m @@ -0,0 +1,92 @@ +// +// Copyright 2023 Block Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +@import AccessibilitySnapshot; +@import FBSnapshotTestCase; +@import XCTest; + + +@interface ImpreciseObjectiveCTests : FBSnapshotTestCase + +@end + + +@implementation ImpreciseObjectiveCTests + +- (void)setUp; +{ + [super setUp]; + + self.fileNameOptions = FBSnapshotTestCaseFileNameIncludeOptionOS | FBSnapshotTestCaseFileNameIncludeOptionScreenSize | FBSnapshotTestCaseFileNameIncludeOptionScreenScale; +} + +- (void)testSimpleView; +{ + UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 50)]; + + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(25, 10, 150, 30)]; + label.text = @"Objective-C Snapshot"; + label.textColor = [UIColor redColor]; + label.font = [UIFont systemFontOfSize:12]; + label.textAlignment = NSTextAlignmentCenter; + [view addSubview:label]; + + SnapshotImpreciseVerifyAccessibility(view, nil, 0, 0); +} + +- (void)testSimpleViewWithIdentifier; +{ + UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 50)]; + + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(25, 10, 150, 30)]; + label.text = @"Objective-C Snapshot"; + label.textColor = [UIColor redColor]; + label.font = [UIFont systemFontOfSize:12]; + label.textAlignment = NSTextAlignmentCenter; + [view addSubview:label]; + + SnapshotImpreciseVerifyAccessibility(view, @"identifier", 0, 0); +} + +- (void)testSimpleViewWithActivationPointAlways; +{ + UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 50)]; + + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(25, 10, 150, 30)]; + label.text = @"Objective-C Snapshot"; + label.textColor = [UIColor redColor]; + label.font = [UIFont systemFontOfSize:12]; + label.textAlignment = NSTextAlignmentCenter; + [view addSubview:label]; + + SnapshotImpreciseVerifyAccessibilityWithOptions(view, nil, YES, YES, 0, 0); +} + +- (void)testViewWithInvertedColors; +{ + UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; + [view setBackgroundColor:[UIColor redColor]]; + + UIView *subview = [[UIView alloc] initWithFrame:CGRectMake(25, 25, 50, 50)]; + [subview setBackgroundColor:[UIColor greenColor]]; + + [subview setAccessibilityIgnoresInvertColors:YES]; + [view addSubview:subview]; + + SnapshotImpreciseVerifyWithInvertedColors(view, nil, 0, 0); +} + +@end diff --git a/Example/SnapshotTests/ReferenceImages/_64/ImpreciseObjectiveCTests/testSimpleViewWithActivationPointAlways_13_7_375x812@3x.png b/Example/SnapshotTests/ReferenceImages/_64/ImpreciseObjectiveCTests/testSimpleViewWithActivationPointAlways_13_7_375x812@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..31861f2d2fee01819569c3413c03ba9b6186b752 GIT binary patch literal 22954 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 literal 0 HcmV?d00001 diff --git a/Example/SnapshotTests/ReferenceImages/_64/ImpreciseObjectiveCTests/testSimpleViewWithIdentifier_identifier_14_5_390x844@3x.png b/Example/SnapshotTests/ReferenceImages/_64/ImpreciseObjectiveCTests/testSimpleViewWithIdentifier_identifier_14_5_390x844@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a38acfa94d7fe78ff0d587caed4bb50003b6322d GIT binary patch literal 21678 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 literal 0 HcmV?d00001 diff --git a/Example/SnapshotTests/ReferenceImages/_64/ImpreciseObjectiveCTests/testSimpleView_14_5_390x844@3x.png b/Example/SnapshotTests/ReferenceImages/_64/ImpreciseObjectiveCTests/testSimpleView_14_5_390x844@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a38acfa94d7fe78ff0d587caed4bb50003b6322d GIT binary patch literal 21678 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 z literal 0 HcmV?d00001 diff --git a/Example/SnapshotTests/ReferenceImages/_64/ImpreciseObjectiveCTests/testViewWithInvertedColors_14_5_390x844@3x.png b/Example/SnapshotTests/ReferenceImages/_64/ImpreciseObjectiveCTests/testViewWithInvertedColors_14_5_390x844@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f7d5b9fcd420b3b65900b0e940ce784b77471683 GIT binary patch literal 3598 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4mO}jWo=(6kYX$ja(7}_cTVOdkW-Nw;hE;^ z%b*2hb1<+lN-?m4lmM|EqcoiD#;C!-3>If%U}(=|V1cUf1JWRH1BgL-AT;v=MyP6_ z*a9Y)YDS#}%m_9}Tj-m8CP0d_z$3DlfkDv%gc)6@872S)Winm-Lx42ULNJ&HBsG8- zL<2Ef<;rzeCjn_!PZ!6K3dT2A9lMwu1ehKE|IaM{+sN45rgtRTm~W%n-wK=g{_&Cq z2M)9}c6w`tdbcvN#j%M@J9~IA8Q0u!kXa(rK-$1g*nJCV)~FMP zK`7X7jFtZ{ea@X}zMn(lzPrx({Qq1MYkv3tH3@m{`C#gS?XmoS_idPDfBN$z2j#{i z4?ae=PG!hQC|$-P)OqxMzAQ?>zbj${CZ`uRvl>h%dXGiA)E0k@Z3gzuJ z$1D~{9_9l-|1VdcEx#tAR6x%uZ`n(YtDkJn|K3-(|LlXGDNo&*_WM1Eu74(%I#uC^ zDJX~AgY$HvDuazar-_gUkKFvw2+jt!uyij4!-|?Pkc952#AuL=CIPZGfaCJkPb|snIJ65k3W3xhToF$i^E&dn@~ z literal 0 HcmV?d00001 diff --git a/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/ObjC/include/FBSnapshotTestCase_Accessibility.h b/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/ObjC/include/FBSnapshotTestCase_Accessibility.h index 5fc42492..007f5999 100644 --- a/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/ObjC/include/FBSnapshotTestCase_Accessibility.h +++ b/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/ObjC/include/FBSnapshotTestCase_Accessibility.h @@ -1,5 +1,5 @@ // -// Copyright 2019 Square Inc. +// Copyright 2023 Block Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,11 +18,11 @@ {\ _Pragma("clang diagnostic push")\ _Pragma("clang diagnostic ignored \"-Wundeclared-selector\"")\ - SEL selector = @selector(snapshotVerifyAccessibility:identifier:);\ + SEL selector = @selector(snapshotVerifyAccessibility:identifier:perPixelTolerance:overallTolerance:);\ _Pragma("clang diagnostic pop")\ - typedef NSString * (*SnapshotMethod)(id, SEL, UIView *, NSString *);\ + typedef NSString * (*SnapshotMethod)(id, SEL, UIView *, NSString *, CGFloat, CGFloat);\ SnapshotMethod snapshotVerifyAccessibility = (SnapshotMethod)[self methodForSelector:selector];\ - NSString *errorDescription = snapshotVerifyAccessibility(self, selector, view__, identifier__ ?: @"");\ + NSString *errorDescription = snapshotVerifyAccessibility(self, selector, view__, identifier__ ?: @"", 0, 0);\ if (errorDescription == nil) {\ XCTAssertTrue(YES);\ } else {\ @@ -34,11 +34,11 @@ {\ _Pragma("clang diagnostic push")\ _Pragma("clang diagnostic ignored \"-Wundeclared-selector\"")\ - SEL selector = @selector(snapshotVerifyAccessibility:identifier:showActivationPoints:useMonochromeSnapshot:);\ + SEL selector = @selector(snapshotVerifyAccessibility:identifier:showActivationPoints:useMonochromeSnapshot:perPixelTolerance:overallTolerance:);\ _Pragma("clang diagnostic pop")\ - typedef NSString * (*SnapshotMethod)(id, SEL, UIView *, NSString *, BOOL, BOOL);\ + typedef NSString * (*SnapshotMethod)(id, SEL, UIView *, NSString *, BOOL, BOOL, CGFloat, CGFloat);\ SnapshotMethod snapshotVerifyAccessibility = (SnapshotMethod)[self methodForSelector:selector];\ - NSString *errorDescription = snapshotVerifyAccessibility(self, selector, view__, identifier__ ?: @"", showActivationPoints__, useMonochromeSnapshot__);\ + NSString *errorDescription = snapshotVerifyAccessibility(self, selector, view__, identifier__ ?: @"", showActivationPoints__, useMonochromeSnapshot__, 0, 0);\ if (errorDescription == nil) {\ XCTAssertTrue(YES);\ } else {\ @@ -50,11 +50,11 @@ {\ _Pragma("clang diagnostic push")\ _Pragma("clang diagnostic ignored \"-Wundeclared-selector\"")\ - SEL selector = @selector(snapshotVerifyWithInvertedColors:identifier:);\ + SEL selector = @selector(snapshotVerifyWithInvertedColors:identifier:perPixelTolerance:overallTolerance:);\ _Pragma("clang diagnostic pop")\ - typedef NSString * (*SnapshotMethod)(id, SEL, UIView *, NSString *);\ + typedef NSString * (*SnapshotMethod)(id, SEL, UIView *, NSString *, CGFloat, CGFloat);\ SnapshotMethod snapshotVerifyWithInvertedColors = (SnapshotMethod)[self methodForSelector:selector];\ - NSString *errorDescription = snapshotVerifyWithInvertedColors(self, selector, view__, identifier__ ?: @"");\ + NSString *errorDescription = snapshotVerifyWithInvertedColors(self, selector, view__, identifier__ ?: @"", 0, 0);\ if (errorDescription == nil) {\ XCTAssertTrue(YES);\ } else {\ diff --git a/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/ObjC/include/FBSnapshotTestCase_ImpreciseAccessibility.h b/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/ObjC/include/FBSnapshotTestCase_ImpreciseAccessibility.h new file mode 100644 index 00000000..eedb2372 --- /dev/null +++ b/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/ObjC/include/FBSnapshotTestCase_ImpreciseAccessibility.h @@ -0,0 +1,63 @@ +// +// Copyright 2023 Block Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#define SnapshotImpreciseVerifyAccessibility(view__, identifier__, perPixelTolerance__, overallTolerance__)\ + {\ + _Pragma("clang diagnostic push")\ + _Pragma("clang diagnostic ignored \"-Wundeclared-selector\"")\ + SEL selector = @selector(snapshotVerifyAccessibility:identifier:perPixelTolerance:overallTolerance:);\ + _Pragma("clang diagnostic pop")\ + typedef NSString * (*SnapshotMethod)(id, SEL, UIView *, NSString *, CGFloat, CGFloat);\ + SnapshotMethod snapshotVerifyAccessibility = (SnapshotMethod)[self methodForSelector:selector];\ + NSString *errorDescription = snapshotVerifyAccessibility(self, selector, view__, identifier__ ?: @"", perPixelTolerance__, overallTolerance__);\ + if (errorDescription == nil) {\ + XCTAssertTrue(YES);\ + } else {\ + XCTFail("%@", errorDescription);\ + }\ + } + +#define SnapshotImpreciseVerifyAccessibilityWithOptions(view__, identifier__, showActivationPoints__, useMonochromeSnapshot__, perPixelTolerance__, overallTolerance__)\ + {\ + _Pragma("clang diagnostic push")\ + _Pragma("clang diagnostic ignored \"-Wundeclared-selector\"")\ + SEL selector = @selector(snapshotVerifyAccessibility:identifier:showActivationPoints:useMonochromeSnapshot:perPixelTolerance:overallTolerance:);\ + _Pragma("clang diagnostic pop")\ + typedef NSString * (*SnapshotMethod)(id, SEL, UIView *, NSString *, BOOL, BOOL, CGFloat, CGFloat);\ + SnapshotMethod snapshotVerifyAccessibility = (SnapshotMethod)[self methodForSelector:selector];\ + NSString *errorDescription = snapshotVerifyAccessibility(self, selector, view__, identifier__ ?: @"", showActivationPoints__, useMonochromeSnapshot__, perPixelTolerance__, overallTolerance__);\ + if (errorDescription == nil) {\ + XCTAssertTrue(YES);\ + } else {\ + XCTFail("%@", errorDescription);\ + }\ + } + +#define SnapshotImpreciseVerifyWithInvertedColors(view__, identifier__, perPixelTolerance__, overallTolerance__)\ + {\ + _Pragma("clang diagnostic push")\ + _Pragma("clang diagnostic ignored \"-Wundeclared-selector\"")\ + SEL selector = @selector(snapshotVerifyWithInvertedColors:identifier:perPixelTolerance:overallTolerance:);\ + _Pragma("clang diagnostic pop")\ + typedef NSString * (*SnapshotMethod)(id, SEL, UIView *, NSString *, CGFloat, CGFloat);\ + SnapshotMethod snapshotVerifyWithInvertedColors = (SnapshotMethod)[self methodForSelector:selector];\ + NSString *errorDescription = snapshotVerifyWithInvertedColors(self, selector, view__, identifier__ ?: @"", perPixelTolerance__, overallTolerance__);\ + if (errorDescription == nil) {\ + XCTAssertTrue(YES);\ + } else {\ + XCTFail("%@", errorDescription);\ + }\ + } diff --git a/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/Swift/FBSnapshotTestCase+Accessibility.swift b/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/Swift/FBSnapshotTestCase+Accessibility.swift index 5758337b..bf748721 100644 --- a/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/Swift/FBSnapshotTestCase+Accessibility.swift +++ b/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/Swift/FBSnapshotTestCase+Accessibility.swift @@ -1,5 +1,5 @@ // -// Copyright 2019 Square Inc. +// Copyright 2023 Block Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/Swift/FBSnapshotTestCase+ImpreciseAccessibility.swift b/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/Swift/FBSnapshotTestCase+ImpreciseAccessibility.swift new file mode 100644 index 00000000..530bd2d8 --- /dev/null +++ b/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/Swift/FBSnapshotTestCase+ImpreciseAccessibility.swift @@ -0,0 +1,159 @@ +// +// Copyright 2023 Block Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import XCTest + +#if SWIFT_PACKAGE +import AccessibilitySnapshotCore +import AccessibilitySnapshotCore_ObjC +import iOSSnapshotTestCase +#else +import FBSnapshotTestCase +#endif + +extension FBSnapshotTestCase { + + /// Snapshots the `view` with colored overlays of each accessibility element it contains, as well as an + /// approximation of the description that VoiceOver will read for each element. + /// + /// When `recordMode` is true, records a snapshot of the view. When `recordMode` is false, performs a comparison + /// with the existing snapshot. + /// + /// - Note: This method will modify the view hierarchy in order to snapshot the view. It will attempt to restore the + /// hierarchy to its original state as much as possible, but is not guaranteed to be without side effects (for + /// example if something observes changes in the view hierarchy). + /// + /// - parameter view: The view that will be snapshotted. + /// - parameter identifier: An optional identifier included in the snapshot name, for use when there are multiple + /// snapshot tests in a given test method. Defaults to no identifier. + /// - parameter showActivationPoints: When to show indicators for elements' accessibility activation points. + /// Defaults to showing activation points only when they are different than the default activation point for that + /// element. + /// - parameter useMonochromeSnapshot: Whether or not the snapshot of the `view` should be monochrome. Using a + /// monochrome snapshot makes it more clear where the highlighted elements are, but may make it difficult to + /// read certain views. Defaults to `true`. + /// - parameter markerColors: An array of colors to use for the highlighted regions. These colors will be used in + /// order, repeating through the array as necessary. + /// - parameter suffixes: NSOrderedSet object containing strings that are appended to the reference images + /// directory. Defaults to `FBSnapshotTestCaseDefaultSuffixes()`. + /// - parameter file: The file in which the test result should be attributed. + /// - parameter line: The line in which the test result should be attributed. + public func SnapshotImpreciseVerifyAccessibility( + _ view: UIView, + identifier: String = "", + showActivationPoints activationPointDisplayMode: ActivationPointDisplayMode = .whenOverridden, + useMonochromeSnapshot: Bool = true, + markerColors: [UIColor] = [], + suffixes: NSOrderedSet = FBSnapshotTestCaseDefaultSuffixes(), + perPixelTolerance: CGFloat = 0, + overallTolerance: CGFloat = 0, + file: StaticString = #file, + line: UInt = #line + ) { + guard isRunningInHostApplication else { + XCTFail(ErrorMessageFactory.errorMessageForMissingHostApplication, file: file, line: line) + return + } + + let containerView = AccessibilitySnapshotView( + containedView: view, + viewRenderingMode: (usesDrawViewHierarchyInRect ? .drawHierarchyInRect : .renderLayerInContext), + markerColors: markerColors, + activationPointDisplayMode: activationPointDisplayMode + ) + + let window = UIWindow(frame: UIScreen.main.bounds) + window.makeKeyAndVisible() + containerView.center = window.center + window.addSubview(containerView) + + do { + try containerView.parseAccessibility(useMonochromeSnapshot: useMonochromeSnapshot) + } catch { + XCTFail(ErrorMessageFactory.errorMessageForAccessibilityParsingError(error), file: file, line: line) + return + } + containerView.sizeToFit() + + FBSnapshotVerifyView( + containerView, + identifier: identifier, + suffixes: suffixes, + perPixelTolerance: perPixelTolerance, + overallTolerance: overallTolerance, + file: file, + line: line + ) + } + + /// Snapshots the `view` simulating the way it will appear with Smart Invert Colors enabled. + /// + /// When `recordMode` is true, records a snapshot of the view. When `recordMode` is false, performs a comparison with the + /// existing snapshot. + /// + /// - parameter view: The view that will be snapshotted. + /// - parameter identifier: An optional identifier included in the snapshot name, for use when there are multiple snapshot tests + /// in a given test method. Defaults to no identifier. + /// - parameter suffixes: NSOrderedSet object containing strings that are appended to the reference images directory. + /// Defaults to `FBSnapshotTestCaseDefaultSuffixes()`. + /// - parameter file: The file in which the test result should be attributed. + /// - parameter line: The line in which the test result should be attributed. + public func SnapshotImpreciseVerifyWithInvertedColors( + _ view: UIView, + identifier: String = "", + suffixes: NSOrderedSet = FBSnapshotTestCaseDefaultSuffixes(), + perPixelTolerance: CGFloat = 0, + overallTolerance: CGFloat = 0, + file: StaticString = #file, + line: UInt = #line + ) { + func postNotification() { + NotificationCenter.default.post( + name: UIAccessibility.invertColorsStatusDidChangeNotification, + object: nil, + userInfo: nil + ) + } + + let requiresWindow = (view.window == nil && !(view is UIWindow)) + if requiresWindow { + let window = UIApplication.shared.firstKeyWindow ?? UIWindow(frame: UIScreen.main.bounds) + window.addSubview(view) + } + + view.layoutIfNeeded() + + let statusUtility = UIAccessibilityStatusUtility() + statusUtility.mockInvertColorsStatus() + postNotification() + + let renderer = UIGraphicsImageRenderer(bounds: view.bounds) + let image = renderer.image { context in + view.drawHierarchyWithInvertedColors(in: view.bounds, using: context) + } + + let imageView = UIImageView(image: image) + FBSnapshotVerifyView(imageView, suffixes: suffixes, file: file, line: line) + + statusUtility.unmockStatuses() + postNotification() + + if requiresWindow { + view.removeFromSuperview() + } + } + +} diff --git a/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/Swift/FBSnapshotTestCase+ObjCSupport.swift b/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/Swift/FBSnapshotTestCase+ObjCSupport.swift index fd9b2191..c749441d 100644 --- a/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/Swift/FBSnapshotTestCase+ObjCSupport.swift +++ b/Sources/AccessibilitySnapshot/iOSSnapshotTestCase/Swift/FBSnapshotTestCase+ObjCSupport.swift @@ -24,36 +24,50 @@ import FBSnapshotTestCase extension FBSnapshotTestCase { - @objc(snapshotVerifyAccessibility:identifier:) - private func 🚫objc_snapshotVerifyAccessibility(_ view: UIView, identifier: String) -> String? { + @objc(snapshotVerifyAccessibility:identifier:perPixelTolerance:overallTolerance:) + private func 🚫objc_snapshotVerifyAccessibility( + _ view: UIView, + identifier: String, + perPixelTolerance: CGFloat, + overallTolerance: CGFloat + ) -> String? { return snapshotVerifyAccessibility( view, identifier: identifier, activationPointDisplayMode: .whenOverridden, - useMonochromeSnapshot: true + useMonochromeSnapshot: true, + perPixelTolerance: perPixelTolerance, + overallTolerance: overallTolerance ) } - @objc(snapshotVerifyAccessibility:identifier:showActivationPoints:useMonochromeSnapshot:) + @objc(snapshotVerifyAccessibility:identifier:showActivationPoints:useMonochromeSnapshot:perPixelTolerance:overallTolerance:) private func 🚫objc_snapshotVerifyAccessibility( _ view: UIView, identifier: String, showActivationPoints: Bool, - useMonochromeSnapshot: Bool + useMonochromeSnapshot: Bool, + perPixelTolerance: CGFloat, + overallTolerance: CGFloat ) -> String? { return snapshotVerifyAccessibility( view, identifier: identifier, activationPointDisplayMode: showActivationPoints ? .always : .never, - useMonochromeSnapshot: useMonochromeSnapshot + useMonochromeSnapshot: useMonochromeSnapshot, + perPixelTolerance: perPixelTolerance, + overallTolerance: overallTolerance ) } - private func snapshotVerifyAccessibility( + @nonobjc + internal func snapshotVerifyAccessibility( _ view: UIView, identifier: String, activationPointDisplayMode: ActivationPointDisplayMode, - useMonochromeSnapshot: Bool + useMonochromeSnapshot: Bool, + perPixelTolerance: CGFloat, + overallTolerance: CGFloat ) -> String? { guard isRunningInHostApplication else { return ErrorMessageFactory.errorMessageForMissingHostApplication @@ -82,15 +96,20 @@ extension FBSnapshotTestCase { containerView, identifier: identifier, suffixes: FBSnapshotTestCaseDefaultSuffixes(), - perPixelTolerance: 0, - overallTolerance: 0, + perPixelTolerance: perPixelTolerance, + overallTolerance: overallTolerance, defaultReferenceDirectory: FB_REFERENCE_IMAGE_DIR, defaultImageDiffDirectory: IMAGE_DIFF_DIR ) } - @objc(snapshotVerifyWithInvertedColors:identifier:) - private func snapshotVerifyWithInvertedColors(_ view: UIView, identifier: String) -> String? { + @objc(snapshotVerifyWithInvertedColors:identifier:perPixelTolerance:overallTolerance:) + private func snapshotVerifyWithInvertedColors( + _ view: UIView, + identifier: String, + perPixelTolerance: CGFloat, + overallTolerance: CGFloat + ) -> String? { func postNotification() { NotificationCenter.default.post( name: UIAccessibility.invertColorsStatusDidChangeNotification, @@ -121,8 +140,8 @@ extension FBSnapshotTestCase { imageView, identifier: identifier, suffixes: FBSnapshotTestCaseDefaultSuffixes(), - perPixelTolerance: 0, - overallTolerance: 0, + perPixelTolerance: perPixelTolerance, + overallTolerance: overallTolerance, defaultReferenceDirectory: FB_REFERENCE_IMAGE_DIR, defaultImageDiffDirectory: IMAGE_DIFF_DIR )