GitXplorerGitXplorer
c

AccessibilitySnapshot

public
559 stars
70 forks
26 issues

Commits

List of commits on branch master.
Verified
07020833b49662840e92d6b1ad2bcfa9916a10d6

Version 0.8.0

RRoyalPineapple committed a month ago
Verified
bc3d41b0b3df5cb6ce65e3507ed3c0fdde440511

Merge pull request #228 from cashapp/priip/add-identifier-in-accessibility-marker

ppriip committed 2 months ago
Unverified
24b20ed26eca3cf3d4203477a57eaa001e6cc9a2

Add accessibility identifier in AccessibilityMarker

ppriip committed 2 months ago
Verified
e527ccc99d1bba473168a4d8cf1327dddff4a89a

Merge pull request #225 from cashapp/bump-min-macos-version

jjmesmith committed 2 months ago
Unverified
5655f8ea4a30c4081e7561bd18eae8b10da2b2f3

Add a minimum macOS version that matches the SnapshotTesting dependency

jjmesmith committed 2 months ago
Verified
e0ec1c6c7ff000717572b78b63d13ec9603516f3

Add support for back button accessibility trait. (#219)

RRoyalPineapple committed 2 months ago

README

The README file for this repository.

AccessibilitySnapshot

CI Status Version License Platform

AccessibilitySnapshot makes it simple to add regression tests for accessibility in iOS apps. The framework builds on the idea of snapshot testing to provide snapshots of the accessibility hierarchy.

Getting Started

By default, AccessibilitySnapshot uses SnapshotTesting to record snapshots and perform comparisons. The framework also includes support for using iOSSnapshotTestCase as the snapshotting engine instead. Before setting up accessibility snapshot tests, make sure your project is set up for standard snapshot testing. Accessibility snapshot tests require that the test target has a host application. See the Extensions section below for a list of other available snapshotting options.

CocoaPods

Install with CocoaPods by adding the following to your Podfile:

pod 'AccessibilitySnapshot'

To use only the core accessibility parser, add a dependency on the Core subspec alone:

pod 'AccessibilitySnapshot/Core'

Alternatively, if you wish to use iOSSnapshotTestCase to perform image comparisons, you can add a dependency on the iOSSnapshotTestCase subspec instead (or in addition - you can use both in the same project):

pod 'AccessibilitySnapshot/iOSSnapshotTestCase'
Swift Package Manager

Install with Swift Package Manager by adding the following to your Package.swift:

dependencies: [
    .package(name: "AccessibilitySnapshot", url: "https://github.com/cashapp/AccessibilitySnapshot.git", from: "0.4.1"),
]

Next, add AccessibilitySnapshot as a dependency to your test target:

targets: [
    .target(name: "MyApp"),
    .testTarget(name: "MyAppTests", dependencies: ["MyApp", "AccessibilitySnapshot"])
]

To use only the core accessibility parser, add a dependency on the Core library alone:

targets: [
    .target(name: "MyApp"),
    .testTarget(name: "MyAppTests", dependencies: ["MyApp", "AccessibilitySnapshotCore"])
]

To use iOSSnapshotTestCase to perform image comparisons, add a dependency on FBSnapshotTestCase+Accessibility for Swift testing or FBSnapshotTestCase+Accessibility-ObjC for Objective-C.

targets: [
    .target(name: "MyApp"),
    .testTarget(name: "MyAppTests", dependencies: ["MyApp", "FBSnapshotTestCase+Accessibility"])
]
Carthage

Only the core accessibility parser (not the snapshot integration layers) can be installed via Carthage. To install AccessibilitySnapshotCore via Carthage, add the following to your Cartfile:

github "cashapp/AccessibilitySnapshot"

Usage

AccessibilitySnapshot builds on top of existing snapshot frameworks to add support for snapshotting your app's accessibility. By default it uses the SnapshotTesting framework for snapshotting, but can be switched over to iOSSnapshotTestCase as well.

Getting Started with SnapshotTesting

AccessibilitySnapshot provides an .accessibilityImage snapshotting strategy that can be used with SnapshotTesting's snapshot assertions.

func testAccessibility() {
    let view = MyView()
    // Configure the view...

    assertSnapshot(matching: view, as: .accessibilityImage)
}

Snapshots can also be customized in a few ways, for example controlling when to include indicators for the accessibility activation point of each element. By default, these indicators are shown when the activation point is different than the default activation point for that view. You can override this behavior for each snapshot:

func testAccessibility() {
    let view = MyView()
    // Configure the view...

    // Show indicators for every element.
    assertSnapshot(matching: view, as: .accessibilityImage(showActivationPoints: .always))

    // Don't show any indicators.
    assertSnapshot(matching: view, as: .accessibilityImage(showActivationPoints: .never))
}

Getting Started with iOSSnapshotTestCase

To run a snapshot test, simply call the SnapshotVerifyAccessibility method:

func testAccessibility() {
    let view = MyView()
    // Configure the view...

    SnapshotVerifyAccessibility(view)
}

Since AccessibilitySnapshot is built on top of iOSSnapshotTestCase, it uses the same mechanism to record snapshots (setting the self.recordMode property) and supports many of the same features like device agnostic file names and specifying identifiers for each snapshot:

func testAccessibility() {
    let view = MyView()
    // Configure the view...

    SnapshotVerifyAccessibility(view, identifier: "identifier")
}

Snapshots can also optionally include indicators for the accessibility activation point of each element. By default, these indicators are shown when the activation point is different than the default activation point for that view. You can override this behavior for each snapshot:

func testAccessibility() {
    let view = MyView()
    // Configure the view...

    // Show indicators for every element.
    SnapshotVerifyAccessibility(view, showActivationPoints: .always)

    // Don't show any indicators.
    SnapshotVerifyAccessibility(view, showActivationPoints: .never)
}

You can also run accessibility snapshot tests from Objective-C:

- (void)testAccessibility;
{
    UIView *view = [UIView new];
    // Configure the view...

    SnapshotVerifyAccessibility(view, @"identifier");
}

Requirements

  • Xcode 13.2.1 or later
  • iOS 13.0 or later

Contributing

We love our contributors! Please read our contributing guidelines prior to submitting a pull request.

Extensions

Have you written your own extension? Add it here and submit a pull request!

License

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.