summaryrefslogtreecommitdiff
path: root/DomainDigUITests/AccessibilityAuditTests.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-07-23 19:20:52 -0500
committerChristian Cleberg <[email protected]>2026-07-23 19:34:57 -0500
commit7315ae3da604debfacfed9715a04dc91139a31e0 (patch)
tree13febd9af1f44de01f05c9aef661b23cd97e2770 /DomainDigUITests/AccessibilityAuditTests.swift
parent655d11b59a273c14720952478ccebec20a9627bd (diff)
downloaddomain-dig-7315ae3da604debfacfed9715a04dc91139a31e0.tar.gz
domain-dig-7315ae3da604debfacfed9715a04dc91139a31e0.tar.bz2
domain-dig-7315ae3da604debfacfed9715a04dc91139a31e0.zip
test(a11y): Phase 6 verification — metadata assertions, middle-band sweep, 27.0 fix
Executes the Phase-6 manual runbook against the simulator, converting the mechanically-checkable parts into permanent coverage and reporting the rest honestly by tier. - Fix an enforced `.dynamicType` failure surfaced by `audit-a11y.sh current` on iOS 27.0: the Settings `Section("Services")` system header (app sets no font; 18.6 floor and 26.x CI are clean). Narrow, proven `noiseReason` carve-out scoped to dynamicType on the exact Settings header titles. Delta: current FAIL -> SUCCEEDED, finding still prints as `[noise: …]`. - AccessibilityMetadataTests: assert the icon-only control labels and the dense Watchlist/Batch row label+value contracts (green on 18.6 and 27.0). These were one-time manual VoiceOver checks; now they gate. - Middle-band Dynamic Type sweep at AccessibilityL across the seeded screens. Found no band-exclusive third bug (recorded), retained as regression insurance for a band that historically shipped two. - AccessibilityScreenshotTests: best-effort, non-gating capture utility used to produce the cross-runtime Light/Dark/AXXXL screenshots (simctl appearance does not propagate headlessly; driven through the in-app picker instead). - Docs/ACCESSIBILITY_VERIFICATION_RESULTS.md: full pass/fail/not-executable matrix + 15 screenshots. Notable positive result: Differentiate Without Color IS verifiable via the global com.apple.Accessibility defaults domain.
Diffstat (limited to 'DomainDigUITests/AccessibilityAuditTests.swift')
-rw-r--r--DomainDigUITests/AccessibilityAuditTests.swift42
1 files changed, 42 insertions, 0 deletions
diff --git a/DomainDigUITests/AccessibilityAuditTests.swift b/DomainDigUITests/AccessibilityAuditTests.swift
index 0a8f457..07bcbbf 100644
--- a/DomainDigUITests/AccessibilityAuditTests.swift
+++ b/DomainDigUITests/AccessibilityAuditTests.swift
@@ -112,6 +112,48 @@ final class AccessibilityAuditTests: XCTestCase {
try XCTSkipUnless(audited, "Audit did not complete in time for seeded batch results")
}
+ /// The seeded screens at an **intermediate** accessibility size.
+ ///
+ /// The default/`AccessibilityXXXL` pair brackets the range but skips the
+ /// middle band, and two production layout bugs lived exactly there — a
+ /// bordered button letter-wrapping vertically at a merely-large size, which
+ /// neither endpoint reproduced. `AccessibilityL` samples that band across the
+ /// dense seeded screens so a regression in it cannot slip between the two
+ /// existing test points. Reports rather than gates, matching the other
+ /// seeded audits.
+ func testSeededScreensAtIntermediateAccessibilitySize() throws {
+ let app = AccessibilityAuditHarness.launch(
+ contentSizeCategory: "UICTContentSizeCategoryAccessibilityL",
+ seeded: true
+ )
+
+ var unaudited: [String] = []
+
+ app.selectRootTab("Dashboard")
+ if try !AccessibilityAuditHarness.audit(app, screen: "seeded-dashboard-accessibilityL", test: self, reportOnly: true) {
+ unaudited.append("Dashboard")
+ }
+
+ app.selectRootTab("Inspect")
+ if try !AccessibilityAuditHarness.audit(app, screen: "seeded-batch-accessibilityL", test: self, reportOnly: true) {
+ unaudited.append("Inspect batch")
+ }
+
+ app.selectRootTab("Settings")
+ let trackedDomains = app.buttons["Tracked Domains"]
+ if trackedDomains.waitForExistence(timeout: 5) {
+ trackedDomains.tap()
+ if try !AccessibilityAuditHarness.audit(app, screen: "seeded-tracked-domains-accessibilityL", test: self, reportOnly: true) {
+ unaudited.append("Tracked Domains")
+ }
+ }
+
+ try XCTSkipUnless(
+ unaudited.isEmpty,
+ "Audit did not complete in time for: \(unaudited.joined(separator: ", "))"
+ )
+ }
+
/// The seeded screens again at the largest accessibility size — the case the
/// deferred ViewThatFits work exists for.
func testSeededScreensAtLargestAccessibilitySize() throws {