Contents

minddistrict/ios-accessibility-text-snapshot

A [snapshot strategy](https://github.com/pointfreeco/swift-snapshot-testing#snapshot-anything) for testing your VoiceOvers support in UIKit, using the [SnapshotTesting](https://github.com/pointfreeco/swift-snapshot-testing) library by PointFree.

Usage

import SnapshotTesting import AccessibilityTextSnapshot

assertSnapshot( // SnapshotTesting gives you this... matching: someView, as: .recursiveA11yDescription) // ... but AccessibilityTextSnapshot gives you this

This generates a recursive (textual) description of all voiceover-relevant information, suitable for snapshot testing.

The string shows

  • all UIView subclasses with isAccessibilityElement true, together with their ancestor UIViews (if any) to show hierarchy
  • their voiceover-relevant properties (accessibilityValue, accessibilityLabel, etc)
  • any a11y-relevant subviews they might have, prefixed by | to emphasise that they are not involved in VoiceOver

It does not show UIImageViews, which we maybe should reconsider at some point.

Example:

UIView // non-a11y view but has a11y-relevant descendant UIScrollView // (same) UIView // (same) UIStackView // ... MDViewLayer.ElementView UIStackView MDViewModels.Label // | hanging from this view means it has a11y-relevant stuff | -label: Relaxation exercises // a11y property | -traits: .staticText // a11y property UIStackView MDViewLayer.MultilineButton | -label: Yes | -hint: Unselected option | -traits: .button MDViewLayer.MultilineButton | -label: No | -hint: Unselected option | -traits: .button MDViewLayer.ConversationListItemView // hanging | means a11y-relevant view | -label: Only you. No messages yet // a11y property | -hint: Open conversation // a11y property | UIStackView // subviews that would be a11y-relevant | UIStackView // BUT are not read by VoiceOver because | UIStackView // the parent view overrides, note leading | | MDViewModels.Label | | -label: Only you | UIStackView | MDViewModels.Label | | -label: No messages yet. | MDViewLayer.Button | UIView | MDViewModels.Label | | -label: Ongoing video call o MDViewLayer.StepValidationView // o means isHidden=true (on self or a parent) o -label: Please correct the errors above. Actions available o -action: Go to first error // We still show it because we want to o MDViewLayer.MultilineButton // be reminded that there could* be something! o | -label: Please correct the errors above

Installing with CocoaPods

target 'MyAppTests' do pod 'AccessibilityTextSnapshot' end

Package Metadata

Repository: minddistrict/ios-accessibility-text-snapshot

Default branch: main

README: README.md