Skip to content

Commit

Permalink
Mark HidenViews and Views with Hidden Superviews as "UnExposedToAssis…
Browse files Browse the repository at this point in the history
…tiveTech" (#14)
  • Loading branch information
e-sung authored Apr 15, 2022
1 parent de68c97 commit 2337da5
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 0 deletions.
19 changes: 19 additions & 0 deletions Sources/AXSnapshot/UIResponder+Extension.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import Foundation
import UIKit

extension UIResponder {
@objc
var isExposedToAssistiveTech: Bool {
if shouldForceExposeToAssistiveTech || isAccessibilityElement {
if allItemsInResponderChain.contains(where: { $0.isExposedToAssistiveTech }) == true {
Expand All @@ -21,6 +22,12 @@ extension UIResponder {
}
}

private var hasBlockingElementInResponderChain: Bool {
allItemsInResponderChain.contains(where: { item in
item.isExposedToAssistiveTech || (item as? UIView)?.isHidden == true
})
}

/// A boolean value indicates that the elment is exposed to AssistiveTechnology
/// even if `isAccessibilityElement` is false
///
Expand Down Expand Up @@ -58,3 +65,15 @@ extension UIResponder {
return chain
}
}

extension UIView {
@objc override var isExposedToAssistiveTech: Bool {
if isHidden {
return false
} else if allItemsInResponderChain.compactMap({ $0 as? UIView }).contains(where: { $0.isHidden }) {
return false
} else {
return super.isExposedToAssistiveTech
}
}
}
36 changes: 36 additions & 0 deletions Tests/AXSnapshotTests/AXSnapshotTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,42 @@ final class AccessibilityDescriptionSnapshotTests: XCTestCase {
)
}

func testHiddenViews() throws {
let parentStackView = UIStackView()
let childStackView = UIStackView()

let label = UILabel()
label.text = "MyLabel"

let button = UIButton()
button.setTitle("MyButton", for: .normal)
// Hidden Button shouldn't be exposed to axSnapshot
button.isHidden = true

let firstListItem = ListItemView()
firstListItem.leftText = "FirstListItem"
let secondListItem = ListItemView()
secondListItem.leftText = "SecondListItem"

childStackView.addArrangedSubview(firstListItem)
childStackView.addArrangedSubview(secondListItem)
// all subviews of childStackview shouldn't be exposed to axSnapshot
childStackView.isHidden = true

parentStackView.addArrangedSubview(label)
parentStackView.addArrangedSubview(button)
parentStackView.addArrangedSubview(childStackView)

XCTAssert(
parentStackView.axSnapshot() == """
------------------------------------------------------------
MyLabel
------------------------------------------------------------
""",
"Hidden Views and Views with hidden superViews are not exposed to AssistiveTechnology"
)
}

func testStandardUIKitControls() throws {
// Given
let containerView = UIView()
Expand Down

0 comments on commit 2337da5

Please sign in to comment.