From 17c9ffe7000d2371627ab5b08264c86a42e5c548 Mon Sep 17 00:00:00 2001 From: Allison Moyer Date: Wed, 5 Aug 2020 13:46:05 -0700 Subject: [PATCH 1/3] Add the ability to force the cursor to stay visible in snapshots for all text fields Fixes issue #15 --- .../FBSnapshotTestCase+Accessibility.swift | 32 ++++++++++ .../project.pbxproj | 8 +++ Example/SnapshotTests/ContainerView.swift | 54 +++++++++++++++++ .../SnapshotTests/DefaultControlsTests.swift | 51 ++-------------- ...stHidesTextFieldCursor_11_2_375x812@3x.png | Bin 0 -> 13864 bytes ...stHidesTextFieldCursor_12_1_375x812@3x.png | Bin 0 -> 13926 bytes ...stHidesTextFieldCursor_13_3_375x812@3x.png | Bin 0 -> 13943 bytes ...stShowsTextFieldCursor_11_2_375x812@3x.png | Bin 0 -> 15261 bytes ...stShowsTextFieldCursor_12_1_375x812@3x.png | Bin 0 -> 15361 bytes ...stShowsTextFieldCursor_13_3_375x812@3x.png | Bin 0 -> 15402 bytes .../SnapshotTests/SwitchControlsTests.swift | 57 +++--------------- .../SnapshotTests/TextFieldCursorTests.swift | 46 ++++++++++++++ 12 files changed, 155 insertions(+), 93 deletions(-) create mode 100644 Example/SnapshotTests/ContainerView.swift create mode 100644 Example/SnapshotTests/ReferenceImages/_64/SnapshotTests.TextFieldCursorTests/testHidesTextFieldCursor_11_2_375x812@3x.png create mode 100644 Example/SnapshotTests/ReferenceImages/_64/SnapshotTests.TextFieldCursorTests/testHidesTextFieldCursor_12_1_375x812@3x.png create mode 100644 Example/SnapshotTests/ReferenceImages/_64/SnapshotTests.TextFieldCursorTests/testHidesTextFieldCursor_13_3_375x812@3x.png create mode 100644 Example/SnapshotTests/ReferenceImages/_64/SnapshotTests.TextFieldCursorTests/testShowsTextFieldCursor_11_2_375x812@3x.png create mode 100644 Example/SnapshotTests/ReferenceImages/_64/SnapshotTests.TextFieldCursorTests/testShowsTextFieldCursor_12_1_375x812@3x.png create mode 100644 Example/SnapshotTests/ReferenceImages/_64/SnapshotTests.TextFieldCursorTests/testShowsTextFieldCursor_13_3_375x812@3x.png create mode 100644 Example/SnapshotTests/TextFieldCursorTests.swift diff --git a/AccessibilitySnapshot/iOSSnapshotTestCase/Classes/FBSnapshotTestCase+Accessibility.swift b/AccessibilitySnapshot/iOSSnapshotTestCase/Classes/FBSnapshotTestCase+Accessibility.swift index 5f2414f9..240db2cf 100644 --- a/AccessibilitySnapshot/iOSSnapshotTestCase/Classes/FBSnapshotTestCase+Accessibility.swift +++ b/AccessibilitySnapshot/iOSSnapshotTestCase/Classes/FBSnapshotTestCase+Accessibility.swift @@ -27,6 +27,7 @@ extension FBSnapshotTestCase { /// - 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 forceCursorVisible: Whether or not the text fields in the view (if any) should be showing their cursor in the snapshot. Defaults to `true`. /// - 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. @@ -38,6 +39,7 @@ extension FBSnapshotTestCase { public func SnapshotVerifyAccessibility( _ view: UIView, identifier: String = "", + forceCursorVisible: Bool = true, showActivationPoints activationPointDisplayMode: ActivationPointDisplayMode = .whenOverridden, useMonochromeSnapshot: Bool = true, markerColors: [UIColor] = [], @@ -53,6 +55,22 @@ extension FBSnapshotTestCase { return } + if forceCursorVisible { + // Show the cursor of all text fields. + view.recursiveForEach(viewType: UITextField.self) { textField in + textField.becomeFirstResponder() + + // Find the field editor of the text field which controls the animation of the cursor + guard let fieldEditorLayer = (textField.value(forKey: "fieldEditor") as? UIView)?.layer else { + return + } + + // Set the speed and time offset of the layer such that the cursor will remain visible + fieldEditorLayer.speed = 0 + fieldEditorLayer.timeOffset = fieldEditorLayer.beginTime + } + } + let containerView = AccessibilitySnapshotView( containedView: view, viewRenderingMode: (usesDrawViewHierarchyInRect ? .drawHierarchyInRect : .renderLayerInContext), @@ -189,3 +207,17 @@ extension FBSnapshotTestCase { } } + +private extension UIView { + + func recursiveForEach( + viewType: ViewType.Type, + _ block: (ViewType) -> Void + ) { + if let view = self as? ViewType { + block(view) + } + subviews.forEach { $0.recursiveForEach(viewType: viewType, block) } + } + +} diff --git a/Example/AccessibilitySnapshot.xcodeproj/project.pbxproj b/Example/AccessibilitySnapshot.xcodeproj/project.pbxproj index 55f76198..eaae5312 100644 --- a/Example/AccessibilitySnapshot.xcodeproj/project.pbxproj +++ b/Example/AccessibilitySnapshot.xcodeproj/project.pbxproj @@ -50,6 +50,8 @@ 66E2CD14CD63946657E17B15 /* Pods_SnapshotTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A3192D7B9B16BD10FB517A2 /* Pods_SnapshotTests.framework */; }; C47F6C5316FB0C043BEB59F3 /* Pods_AccessibilitySnapshotDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6A886964D2E787399E137105 /* Pods_AccessibilitySnapshotDemo.framework */; }; D38F6F4E508A3D067D677F69 /* Pods_UnitTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BFCB4FD6BC17AB232B26E72 /* Pods_UnitTests.framework */; }; + D70C820324DA07DE00550C3B /* TextFieldCursorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D70C820224DA07DE00550C3B /* TextFieldCursorTests.swift */; }; + D70C820524DA097A00550C3B /* ContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D70C820424DA097A00550C3B /* ContainerView.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -129,6 +131,8 @@ 88C33CBF672C290CE1EE86AF /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; C78F90CE7A2A315AADF80144 /* Pods-SnapshotTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SnapshotTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SnapshotTests/Pods-SnapshotTests.debug.xcconfig"; sourceTree = ""; }; CCFF2A604706B71DC0CBD38B /* Pods-AccessibilitySnapshotDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AccessibilitySnapshotDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-AccessibilitySnapshotDemo/Pods-AccessibilitySnapshotDemo.release.xcconfig"; sourceTree = ""; }; + D70C820224DA07DE00550C3B /* TextFieldCursorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldCursorTests.swift; sourceTree = ""; }; + D70C820424DA097A00550C3B /* ContainerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContainerView.swift; sourceTree = ""; }; DBA3D7413A13111BA7DE4750 /* Pods-UnitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-UnitTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-UnitTests/Pods-UnitTests.release.xcconfig"; sourceTree = ""; }; DCFAC4866DBB341F92D0A40D /* Pods-SnapshotTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SnapshotTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-SnapshotTests/Pods-SnapshotTests.release.xcconfig"; sourceTree = ""; }; ED63B7AD78B189E8940B6C80 /* Pods-AccessibilitySnapshotDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AccessibilitySnapshotDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-AccessibilitySnapshotDemo/Pods-AccessibilitySnapshotDemo.debug.xcconfig"; sourceTree = ""; }; @@ -274,6 +278,7 @@ 3DBAC28622406EBB00EF4D0A /* AccessibilityContainersTests.swift */, 607FACEB1AFB9204008FA782 /* AccessibilityPropertiesTests.swift */, 3D39BFAF2239BC42009C3EF4 /* ActivationPointTests.swift */, + D70C820424DA097A00550C3B /* ContainerView.swift */, 3DEBF24F22101EE40065424F /* DefaultControlsTests.swift */, 3DF464FF220D5FB00048D446 /* ElementSelectionTests.swift */, 3DF46503220D8C500048D446 /* ElementOrderTests.swift */, @@ -284,6 +289,7 @@ 3D13DB512221124000066519 /* ObjectiveCTests.m */, 3DBEAA5C2223C0CE00FAE61D /* SwitchControlsTests.swift */, 3DC8D05A224750F500E8A03C /* TextAccessibilityTests.swift */, + D70C820224DA07DE00550C3B /* TextFieldCursorTests.swift */, 3DF464FB220D4F430048D446 /* SnapshotTestCase.swift */, 607FACE91AFB9204008FA782 /* Supporting Files */, ); @@ -615,6 +621,8 @@ 3DC488392212B40C006D1E15 /* ModalTests.swift in Sources */, 607FACEC1AFB9204008FA782 /* AccessibilityPropertiesTests.swift in Sources */, 3D39BFB02239BC42009C3EF4 /* ActivationPointTests.swift in Sources */, + D70C820324DA07DE00550C3B /* TextFieldCursorTests.swift in Sources */, + D70C820524DA097A00550C3B /* ContainerView.swift in Sources */, 3DC2C67921F4478A003184E4 /* LayoutTests.swift in Sources */, 3DF46504220D8C500048D446 /* ElementOrderTests.swift in Sources */, 3DEBF25022101EE40065424F /* DefaultControlsTests.swift in Sources */, diff --git a/Example/SnapshotTests/ContainerView.swift b/Example/SnapshotTests/ContainerView.swift new file mode 100644 index 00000000..86a77402 --- /dev/null +++ b/Example/SnapshotTests/ContainerView.swift @@ -0,0 +1,54 @@ +// +// Copyright 2020 Square 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 UIKit + +final class ContainerView: UIView { + + // MARK: - Life Cycle + + init(subview: UIView) { + self.subview = subview + + super.init(frame: .zero) + + backgroundColor = .white + + addSubview(subview) + } + + @available(*, unavailable) + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Private Properties + + private let subview: UIView + + // MARK: - UIView + + override func layoutSubviews() { + subview.frame.size = subview.sizeThatFits(bounds.insetBy(dx: 10, dy: 10).size) + subview.alignToSuperview(.center) + } + + override func sizeThatFits(_ size: CGSize) -> CGSize { + let subviewSize = subview.sizeThatFits(size) + return CGSize(width: size.width, height: subviewSize.height + 20) + } + +} diff --git a/Example/SnapshotTests/DefaultControlsTests.swift b/Example/SnapshotTests/DefaultControlsTests.swift index 32e5971f..a1126c92 100644 --- a/Example/SnapshotTests/DefaultControlsTests.swift +++ b/Example/SnapshotTests/DefaultControlsTests.swift @@ -25,7 +25,7 @@ final class DefaultControlsTests: SnapshotTestCase { func testDatePicker() { let datePicker = UIDatePicker() - let container = ContainerView(control: datePicker) + let container = ContainerView(subview: datePicker) container.frame.size = container.sizeThatFits(UIScreen.main.bounds.size) SnapshotVerifyAccessibility(container) @@ -40,7 +40,7 @@ final class DefaultControlsTests: SnapshotTestCase { pageControl.pageIndicatorTintColor = .darkGray pageControl.currentPageIndicatorTintColor = .black - let container = ContainerView(control: pageControl) + let container = ContainerView(subview: pageControl) container.frame.size = container.sizeThatFits(UIScreen.main.bounds.size) SnapshotVerifyAccessibility(container) @@ -55,7 +55,7 @@ final class DefaultControlsTests: SnapshotTestCase { segmentedControl.insertSegment(withTitle: "Segment C", at: 2, animated: false) segmentedControl.selectedSegmentIndex = 1 - let container = ContainerView(control: segmentedControl) + let container = ContainerView(subview: segmentedControl) container.frame.size = container.sizeThatFits(UIScreen.main.bounds.size) SnapshotVerifyAccessibility(container) @@ -69,7 +69,7 @@ final class DefaultControlsTests: SnapshotTestCase { slider.maximumValue = 100 slider.value = 75 - let container = ContainerView(control: slider) + let container = ContainerView(subview: slider) container.frame.size = container.sizeThatFits(UIScreen.main.bounds.size) SnapshotVerifyAccessibility(container) @@ -83,7 +83,7 @@ final class DefaultControlsTests: SnapshotTestCase { stepper.maximumValue = 1 stepper.value = 0 - let container = ContainerView(control: stepper) + let container = ContainerView(subview: stepper) container.frame.size = container.sizeThatFits(UIScreen.main.bounds.size) SnapshotVerifyAccessibility(container) @@ -95,49 +95,10 @@ final class DefaultControlsTests: SnapshotTestCase { stepper.maximumValue = 1 stepper.value = 0 - let container = ContainerView(control: stepper) + let container = ContainerView(subview: stepper) container.frame.size = container.sizeThatFits(UIScreen.main.bounds.size) SnapshotVerifyAccessibility(container) } } - -// MARK: - - -private final class ContainerView: UIView { - - // MARK: - Life Cycle - - init(control: UIControl) { - self.control = control - - super.init(frame: .zero) - - backgroundColor = .white - - addSubview(control) - } - - @available(*, unavailable) - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Private Properties - - private let control: UIControl - - // MARK: - UIView - - override func layoutSubviews() { - control.frame.size = control.sizeThatFits(bounds.insetBy(dx: 10, dy: 10).size) - control.alignToSuperview(.center) - } - - override func sizeThatFits(_ size: CGSize) -> CGSize { - let controlSize = control.sizeThatFits(size) - return CGSize(width: size.width, height: controlSize.height + 20) - } - -} diff --git a/Example/SnapshotTests/ReferenceImages/_64/SnapshotTests.TextFieldCursorTests/testHidesTextFieldCursor_11_2_375x812@3x.png b/Example/SnapshotTests/ReferenceImages/_64/SnapshotTests.TextFieldCursorTests/testHidesTextFieldCursor_11_2_375x812@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..02b50d9aa8442f7b26eaa8184d7e47ab984925a0 GIT binary patch literal 13864 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 literal 0 HcmV?d00001 diff --git a/Example/SnapshotTests/ReferenceImages/_64/SnapshotTests.TextFieldCursorTests/testShowsTextFieldCursor_11_2_375x812@3x.png b/Example/SnapshotTests/ReferenceImages/_64/SnapshotTests.TextFieldCursorTests/testShowsTextFieldCursor_11_2_375x812@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..d4f0d79911441d112429c69c37a0ecdb6cd27a9a GIT binary patch literal 15261 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 Vr~nz@c`TF0O`RM0*R1~he*nuqb!Y$p literal 0 HcmV?d00001 diff --git a/Example/SnapshotTests/ReferenceImages/_64/SnapshotTests.TextFieldCursorTests/testShowsTextFieldCursor_13_3_375x812@3x.png b/Example/SnapshotTests/ReferenceImages/_64/SnapshotTests.TextFieldCursorTests/testShowsTextFieldCursor_13_3_375x812@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..8e34a8b22f13f44a84dc6ad24337c39996219196 GIT binary patch literal 15402 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 literal 0 HcmV?d00001 diff --git a/Example/SnapshotTests/SwitchControlsTests.swift b/Example/SnapshotTests/SwitchControlsTests.swift index 6efe2dbd..69d89692 100644 --- a/Example/SnapshotTests/SwitchControlsTests.swift +++ b/Example/SnapshotTests/SwitchControlsTests.swift @@ -23,7 +23,7 @@ final class SwitchControlsTests: SnapshotTestCase { let control = UISwitch() control.isOn = true - let container = ContainerView(control: control) + let container = ContainerView(subview: control) container.frame.size = container.sizeThatFits(UIScreen.main.bounds.size) SnapshotVerifyAccessibility(container) @@ -33,7 +33,7 @@ final class SwitchControlsTests: SnapshotTestCase { let control = UISwitch() control.isOn = false - let container = ContainerView(control: control) + let container = ContainerView(subview: control) container.frame.size = container.sizeThatFits(UIScreen.main.bounds.size) SnapshotVerifyAccessibility(container) @@ -44,7 +44,7 @@ final class SwitchControlsTests: SnapshotTestCase { control.isOn = true control.isEnabled = false - let container = ContainerView(control: control) + let container = ContainerView(subview: control) container.frame.size = container.sizeThatFits(UIScreen.main.bounds.size) SnapshotVerifyAccessibility(container) @@ -55,7 +55,7 @@ final class SwitchControlsTests: SnapshotTestCase { control.isOn = true control.accessibilityLabel = "Label" - let container = ContainerView(control: control) + let container = ContainerView(subview: control) container.frame.size = container.sizeThatFits(UIScreen.main.bounds.size) SnapshotVerifyAccessibility(container) @@ -67,7 +67,7 @@ final class SwitchControlsTests: SnapshotTestCase { control.accessibilityLabel = "Label" control.accessibilityValue = "Value" - let container = ContainerView(control: control) + let container = ContainerView(subview: control) container.frame.size = container.sizeThatFits(UIScreen.main.bounds.size) SnapshotVerifyAccessibility(container) @@ -79,7 +79,7 @@ final class SwitchControlsTests: SnapshotTestCase { control.accessibilityLabel = "Label" control.accessibilityHint = "Hint" - let container = ContainerView(control: control) + let container = ContainerView(subview: control) container.frame.size = container.sizeThatFits(UIScreen.main.bounds.size) SnapshotVerifyAccessibility(container) @@ -100,7 +100,7 @@ final class SwitchControlsTests: SnapshotTestCase { .searchField, ]) - let container = ContainerView(control: control) + let container = ContainerView(subview: control) container.frame.size = container.sizeThatFits(UIScreen.main.bounds.size) SnapshotVerifyAccessibility(container) @@ -120,7 +120,7 @@ final class SwitchControlsTests: SnapshotTestCase { accessibilityTraits.remove(.button) fakeSwitch.accessibilityTraits = accessibilityTraits - let container = ContainerView(control: fakeSwitch) + let container = ContainerView(subview: fakeSwitch) container.frame.size = container.sizeThatFits(UIScreen.main.bounds.size) SnapshotVerifyAccessibility(container) @@ -137,49 +137,10 @@ final class SwitchControlsTests: SnapshotTestCase { fakeSwitch.accessibilityValue = "Value" fakeSwitch.accessibilityTraits = UISwitch().accessibilityTraits - let container = ContainerView(control: fakeSwitch) + let container = ContainerView(subview: fakeSwitch) container.frame.size = container.sizeThatFits(UIScreen.main.bounds.size) SnapshotVerifyAccessibility(container) } } - -// MARK: - - -private final class ContainerView: UIView { - - // MARK: - Life Cycle - - init(control: UIView) { - self.control = control - - super.init(frame: .zero) - - backgroundColor = .white - - addSubview(control) - } - - @available(*, unavailable) - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Private Properties - - private let control: UIView - - // MARK: - UIView - - override func layoutSubviews() { - control.frame.size = control.sizeThatFits(bounds.insetBy(dx: 10, dy: 10).size) - control.alignToSuperview(.center) - } - - override func sizeThatFits(_ size: CGSize) -> CGSize { - let controlSize = control.sizeThatFits(size) - return CGSize(width: size.width, height: controlSize.height + 20) - } - -} diff --git a/Example/SnapshotTests/TextFieldCursorTests.swift b/Example/SnapshotTests/TextFieldCursorTests.swift new file mode 100644 index 00000000..11e57163 --- /dev/null +++ b/Example/SnapshotTests/TextFieldCursorTests.swift @@ -0,0 +1,46 @@ +// +// Copyright 2020 Square 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 + +final class TextFieldCursorTests: SnapshotTestCase { + + func testShowsTextFieldCursor() { + let textField = UITextField() + textField.accessibilityLabel = "Enter Text" + textField.placeholder = "Enter Text" + textField.tintColor = .magenta + + let container = ContainerView(subview: textField) + container.frame.size = container.sizeThatFits(UIScreen.main.bounds.size) + + SnapshotVerifyAccessibility(container, forceCursorVisible: true) + } + + func testHidesTextFieldCursor() { + let textField = UITextField() + textField.accessibilityLabel = "Enter Text" + textField.placeholder = "Enter Text" + textField.tintColor = .magenta + + let container = ContainerView(subview: textField) + container.frame.size = container.sizeThatFits(UIScreen.main.bounds.size) + + SnapshotVerifyAccessibility(container, forceCursorVisible: false) + } + +} From 6b76df3de2ccfbd4703ff250641811109e5477f5 Mon Sep 17 00:00:00 2001 From: Allison Moyer Date: Thu, 6 Aug 2020 11:29:29 -0700 Subject: [PATCH 2/3] Fix snapshot tests --- ...stHidesTextFieldCursor_13_3_375x812@3x.png | Bin 13943 -> 13976 bytes ...stShowsTextFieldCursor_11_2_375x812@3x.png | Bin 15261 -> 15241 bytes ...stShowsTextFieldCursor_12_1_375x812@3x.png | Bin 15361 -> 15340 bytes ...stShowsTextFieldCursor_13_3_375x812@3x.png | Bin 15402 -> 15401 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Example/SnapshotTests/ReferenceImages/_64/SnapshotTests.TextFieldCursorTests/testHidesTextFieldCursor_13_3_375x812@3x.png b/Example/SnapshotTests/ReferenceImages/_64/SnapshotTests.TextFieldCursorTests/testHidesTextFieldCursor_13_3_375x812@3x.png index ce47172c00a94c4d9b0beb515256f88e9f71ae23..549e00e8a0e138fda09f51305367ac468a75b457 100644 GIT binary patch delta 5831 zcmc&&c{r5o-$&|L5)o;!MU1S6Lm^AH5~28!5FI9&G02d_cuZ+=j?!tS?4~&_XzVgf z);2N`*(OG&vc;e*GqTOR&+|CvTy@^w>%HFJ`CZrh-~BxI{oMEW^Z9(Y=bjHq!(1N+ zyx5wzs{{n(cRJYab3ZFM@m8Wz%?|g2zeW5Gdl{pRem~pZ5f11Ysz&^pmry2tMO%cu zV~6up7#7v(-Dz&PV*J*8CH$4SIX3#yqs4swBzAm%R2%jO{zhf11OY)IVG*f62R^>< zXcVQ_f}(%Dfd(qjq7Bwt?Eb!7>Zp|!qFmsS4M9>!{fC4E*OP*gmkE2pv7jKiMd;%O zLNGWM60%NT+pa*kC8RF0Ryff>{I;1I;hE4*5pfX_q?}ds0m3x+ASWe7*G`zaPEcI4 zQ$$-?ndl|(R)ydQKK#cHkp~*4gn6S=$t(JXht&Y5-tv{KG&5wO6ZVcR~bE0;f<`B2WCU8oisbh56&ED-(N}SIqn%Dy0te zcQIgu~g_5ebN+swY4UnkX3oC%H6%|2pjX%6fg?JX0 zjy5W36s1{g*_^5YYg4itBy+&Ne?c15BEjlI(K=z}^*u+|=(>EzI{Y(ViGtJCMJ|oc zhm&A&Ck}z&DmO;g35x(y%F5TPD1w3_7mRumUdq7QzsUr33saqngG9GdKJB>%opqf} zIDI;12dsCjj1+wW^DJ8rS}mdmf*1I=z=PO<{|)>#p`^`97JK8~-}F@HFXXb8M?M}! zXNj;o%LQA-=Rdg|7x(3GmTO~CLsJ>t|=#1jC@c0Jz^?cY5MXhAeA>7VNOyw+}K*6HoX(6F-r%2wa_GX9PzmO1HYojzSzGMD`# zY$J>FKnhibSXexR=f z-azf0q zvcMNilH83QmLL&QX+F12(p%U@i3a>HY(LBFxs!G_wCwyTbZFRvFxBQjlX|mxsdr>a zKMeOh3H0#X6>Y-YcC!^!d{ND-#ClAWqfn~w;bAO>X-W)Uwy>>BVA2QE zB)?RhsQH{6QoqDo(rBYhrZFNg;?yHy7~HOUN9CihbeM0VFP=e?$Q8y5O4aM&QrtiX znbT5Ieya*GH@24ktQ2C7=n&@7m?bW2pc3lMiJ0;rl4XWJba8!dIJN6}rFY1+WX0Zh zP@r$RlNGDbNVGT(#G2V5uowol^ptn7?8{HM&yNl9PK~#<63~5;g%xA`zKR2IMeET4 z>+k%Rj|y;PE4OFu9f|Tr5V|*bCH*)z>SNU*w`b@K2}|)k$TIvVNwYkyd&=$U}jA8dSVpMK~a*ClNs+Q z@gF1Wg4xmx5b#q{wfZXH2au~MDrUogO@zlCklqM4>kDLNKgvxhccE^>_L;hzO}i~w zT+=onm|M)o*CSaV{0WwvP_~#m{l`qEu=6lY?;b1n{M|mpecaWICK52ndE$B=q6UR@#@hT;L&JB1sr^|mvDwmTg`DB1R>~`t`*aH3rTOC z_x4n;m2eaZJno?vYvzXc6=wwsn>BtWV#$pW#CBCz*~bVYP_4O zWEuZ6;A0u99&mbUi`BiiA(wmlw1LlC;hsWBOHPVja5g;hD&&nL8&5ea&YqJXJE^~j zs()2mTz~&d|9BR7+}xeID9t7dMm-fM)>slHJPO4>ut`sL^UieSg@z!?6VcQ3LN`u% zQrT8@%5T!QjMmiGac$6;ocgncU`hx34?IUq1leO|e9j&c+EA3}5Zp_>Xh4%iXc=DO zbyc1x2HeCb>>27c8fNLfrJ5^qyXwHALPOp&+1JKaikmz9iFZHD3v;-#J8GLdhB#{; z74NvrOmjV{$++*dqMHa+)=2T=dj8hs+ z*%)$5f17Ulj_@iEM5o-|A$+xH(WT`svXf_n;l;z|J#O`3<+M4iQYN?d5*l-z*AsAL zK%-=A@f`P2_DC$4^E~w?p=#Ao2Yb-;D^!1(MIU}%KgP}EWH}x(l!PQ;`>UzOmF@w-lBS+8LfGoRl z5A(#L`_l)%6o&!UIYc=Tof+lvv}-V(nYK7Ub?=j-PfV4KCqfS7e;e$ll(XJKCCa~A z2>IbC)jGYC?8N-#8n9Qyn8p3+xeEi8>@A7B6`>Qw>Zjsl+^jPk!=9t4HyPIHlgE`f zSr9u#TFOLPQRN*tb&3g(i{5n|i9~dczOSj6Oq;J%q-zf!OL6etl`PGF@$Tr>c3ZPNG7RXKIM|~bew&V^W0f)6((moS`k$p60+CJ%SBAsx(pWTbeUD>`AF$e1sDl0M#w0(O zR@|g%8rc$k%0KuynC$$4F}AIHDvfjqc`O9FC1tCFwkg@Ecr06O=eF2VrRTwT=W zrRi$Rc^9rZy+WrH&2w~g((eZGi(K!8=3;KJe6kM%byIAefjT0#j*32CH6oT)^Xg3( zFUIfk?uCh$DN2>`R2ski7_%K|>$wU>4FJ(N$QxNhXuPGN2zjJKZ03)((eb60oKpId zrqE@ox8K1fUnVuIk2aS{EZcP-!!NFzZhYTFitjTyobo<;AodeN-Pz-4<|j|beGcN5-VW1UXDDQQygbbGeFH*D|O z&w)|4I4#Gq=p0qI`PwgPSh#9y3y&MjFe<9E-g|B3QJ}!XAh<3@enO`(W zPl&##hJ2EZ@kr=$9>xhJp5xeJS=i#)gkCJ(=~_jutNN%}CE6puD}c~&FPWV`>3JMj zImMcr@3OE#VZ1%1YghC8AXrldC4dTWb3vhPGI<&|V#SaVQ(mVdbkj^^>36TjnMW`u zH92?d<4N5zzLfCs)4kpZ!(4P@x#Da=$b;7EfuI`p^r_fA;k5wk81v0N+vrtMPl0Bi zvX+1u>=7PM8XT}r&jQZ>wl{G1wgJ9?a_ugWE?wPBAxw`1F@xh#PEUwjuu(}m)ukm76Ur*7_MMubL;YP4>G>Y|+ zU^t6+)$CYvt72K*u zGOq&$b*&_ofc_rmz6mprToeYoSw=w}=0p`FNL6ss84fg=k7h}83w&{rJ>hB9>!{I2 zuLD-y#n}pB_^NFH60Bq&o~CiDZ}agy{0XCy$1js~Wnk$JgFb#Z?hLdmUPmlVUoul4 zJ7^p&5i))5cc5)m>SWOCl5=oywk8N+U9>CoYFyVmMfnppZ_56|9xxhJKTjNl?b)P% zLecodNF!!y>zff-yW&;m!$Ic5&0^u=W50GJ=P1hWEP36f?go23%}4M*iSRmc5#+kg z-rpd~sJr}uCwoJlv|MHO8(+bU^j|7uTJa}Aikr=Y!0`zP#R|B_3K{W%}^{^C}7 zk2Txs3O<@bA4pL;BoDKR)|i3)uIS{z*p1w*C79|6Sw|-qyG`aKfnNdi~HXL z@eeS-_fM-K@c$wNe4Pd>@ee@!rQQEs2;e{GP48$wNGfh$1}_p(RuXxFMz_~>C2alb zp&<%wg-|6*)APTY1HM`*-UWt&U}W=P6k-2BP4_n+!w=vEqcU+L{eaDP=D;KIYf;eM z>*Cf<6Woohl&?yWBY2@zzXL5J&~*7<&Gt3Q4#bmyuYQxiJ#BD3;q^ZziXpmbfL zf%TT)yzk6`pi8VImh}V#1o(W-P1VljeEC3yO&h20TugqV>IuFUaIkZ>Ewc7M|6iL# Bt$Y9g delta 5799 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 diff --git a/Example/SnapshotTests/ReferenceImages/_64/SnapshotTests.TextFieldCursorTests/testShowsTextFieldCursor_11_2_375x812@3x.png b/Example/SnapshotTests/ReferenceImages/_64/SnapshotTests.TextFieldCursorTests/testShowsTextFieldCursor_11_2_375x812@3x.png index d4f0d79911441d112429c69c37a0ecdb6cd27a9a..f029275bf0451aa37ea092711059082e8cb06516 100644 GIT binary patch delta 5514 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 delta 5677 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 bq_nHws9l5lJ+%vbEn;=%f+gXU_wD}!;NAn4 diff --git a/Example/SnapshotTests/ReferenceImages/_64/SnapshotTests.TextFieldCursorTests/testShowsTextFieldCursor_12_1_375x812@3x.png b/Example/SnapshotTests/ReferenceImages/_64/SnapshotTests.TextFieldCursorTests/testShowsTextFieldCursor_12_1_375x812@3x.png index 0b8361d6dbc1d267d80c1f1434d602a74b041c7a..18fa557bacacc1f8afa1955cf72a9d076fa82226 100644 GIT binary patch delta 6757 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 From f9467d57f1883e43733d060a9940476cebdeb6dc Mon Sep 17 00:00:00 2001 From: Allison Moyer Date: Thu, 6 Aug 2020 11:46:26 -0700 Subject: [PATCH 3/3] Resume the animation on the text field editor layers after the snapshot test completes --- .../FBSnapshotTestCase+Accessibility.swift | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/AccessibilitySnapshot/iOSSnapshotTestCase/Classes/FBSnapshotTestCase+Accessibility.swift b/AccessibilitySnapshot/iOSSnapshotTestCase/Classes/FBSnapshotTestCase+Accessibility.swift index 240db2cf..7c6620a4 100644 --- a/AccessibilitySnapshot/iOSSnapshotTestCase/Classes/FBSnapshotTestCase+Accessibility.swift +++ b/AccessibilitySnapshot/iOSSnapshotTestCase/Classes/FBSnapshotTestCase+Accessibility.swift @@ -55,6 +55,9 @@ extension FBSnapshotTestCase { return } + // Store the layers of the text fields whose animations will be + // paused in order to resume them after the snapshot test. + var pausedTextFieldLayers = [CALayer]() if forceCursorVisible { // Show the cursor of all text fields. view.recursiveForEach(viewType: UITextField.self) { textField in @@ -65,9 +68,9 @@ extension FBSnapshotTestCase { return } - // Set the speed and time offset of the layer such that the cursor will remain visible - fieldEditorLayer.speed = 0 - fieldEditorLayer.timeOffset = fieldEditorLayer.beginTime + // Pause the animation of the layer so that the cursor will remain visible + fieldEditorLayer.pauseAnimation() + pausedTextFieldLayers.append(fieldEditorLayer) } } @@ -87,6 +90,8 @@ extension FBSnapshotTestCase { containerView.sizeToFit() FBSnapshotVerifyView(containerView, identifier: identifier, file: file, line: line) + + pausedTextFieldLayers.forEach { $0.resumeAnimation() } } /// Snapshots the `view` using the specified content size category to test Dynamic Type. @@ -208,6 +213,8 @@ extension FBSnapshotTestCase { } +// MARK: - + private extension UIView { func recursiveForEach( @@ -221,3 +228,23 @@ private extension UIView { } } + +// MARK: - + +private extension CALayer { + + func pauseAnimation() { + speed = 0.0 + timeOffset = convertTime(CACurrentMediaTime(), from: nil) + } + + func resumeAnimation() { + let pausedTime = timeOffset + speed = 1.0 + timeOffset = 0.0 + beginTime = 0.0 + let timeSincePause = convertTime(CACurrentMediaTime(), from: nil) - pausedTime + beginTime = timeSincePause + } + +}