Commit 6df46c4
authored
fix(ios): Simulator AX bridge reports enabled from the NotEnabled trait (#2644)
* fix(ios): Simulator AX bridge reports enabled from the NotEnabled trait
The bridge requested no state attribute, so a disabled control read as a plain
button and clients could not observe it; the XCTest runner answered the same
screen with `enabled: false`. The guest now reads `XC_kAXXCAttributeTraits`
and the decoder derives `enabled` from `UIAccessibilityTraitNotEnabled`. The
word is masked as a BigInt because `UIAccessibilityTraitToggleButton` is 2^53,
so every switch carries a value past the safe integer range; a missing word
leaves `enabled` unknown and a non-integer or negative one is a malformed tree.
Source version v1.6.0 rebuilds the cached bridge.
Verified on an iPhone 17 Pro simulator (iOS 26.5) against a React Native app
with `Pressable disabled` and `accessibilityState={{ disabled: true }}`: the
bridge-served raw snapshot now carries `enabled: false` on both controls, and a
client `toBeDisabled` assertion that failed on 0.21.1 passes.
* fix(ios): a source-declared disabled node folds to non-hittable without hittability evidence
Review found the new `enabled` fact never reached presentation on the bridge
path: hittability evidence is unavailable there, so the fold returned before
consulting `enabled`, and a disabled control kept an open `hittable`. The fold
now marks a node the source declared disabled as `hittable: false` regardless
of evidence availability, which is what the runner path already presents.
The tree test asserts the typed `failureCode` instead of matching error text.
* fix(ios): a promoted navigation title affordance retracts the field's hittability
The navigation title rule presents a disabled title field as an enabled
Button for the whole row, but the fold had already marked the field
`hittable: false` from its disabled state, so the Button carried a claim
it contradicted; the cloud iOS provider scenario caught it. A replacement
patch may now retract a fact by setting it `undefined`, and the rule
retracts `hittable`, leaving the row's actionability to the evidence the
acquisition actually has.
* fix(ios): keep retracted facts through later patches and carry the traits word exactly
Review (thymikee): `currentReplacement` rebuilt a node from its source under
the stored replacement, so a later patch on the same node — a scroll clip, a
row label — brought back a fact an earlier rule had retracted: the web
Heading's `value`, and the promoted navigation title's `hittable`. The stored
replacement is now authoritative, as every other reader of the map already
treats it; a regression applies two patches in sequence.
The guest sends the accessibility traits word as a decimal string and the
decoder parses it with BigInt, so a bit set past 2^53 cannot round into or out
of the NotEnabled bit on the way through JSON; the test covers a word past
2^60. The navigation title test moves to transitions.test.ts, keeping
presentation.test.ts under the size ratchet. The CHANGELOG names the two
presentation effects: bridge disabled controls leave the interactive and
Maestro atomic-dispatch counts, and the runner-path title Button joins them.1 parent ef62c7f commit 6df46c4
13 files changed
Lines changed: 197 additions & 8 deletions
File tree
- apple/snapshot-bridge
- packages
- capture-kit/src/ios-snapshot-engine
- platform-apple/src/snapshot-source
- fixtures
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
10 | 22 | | |
11 | 23 | | |
12 | 24 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
| 21 | + | |
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| |||
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
| 35 | + | |
35 | 36 | | |
36 | 37 | | |
37 | 38 | | |
| |||
185 | 186 | | |
186 | 187 | | |
187 | 188 | | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
188 | 194 | | |
189 | 195 | | |
190 | 196 | | |
| |||
291 | 297 | | |
292 | 298 | | |
293 | 299 | | |
| 300 | + | |
294 | 301 | | |
295 | 302 | | |
296 | 303 | | |
| |||
Lines changed: 16 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
324 | 324 | | |
325 | 325 | | |
326 | 326 | | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
327 | 343 | | |
328 | 344 | | |
329 | 345 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
139 | 139 | | |
140 | 140 | | |
141 | 141 | | |
142 | | - | |
| 142 | + | |
143 | 143 | | |
144 | 144 | | |
145 | 145 | | |
| |||
Lines changed: 57 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
Lines changed: 2 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| 31 | + | |
31 | 32 | | |
32 | 33 | | |
33 | 34 | | |
34 | 35 | | |
| 36 | + | |
35 | 37 | | |
36 | 38 | | |
37 | 39 | | |
| |||
Lines changed: 20 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
187 | 187 | | |
188 | 188 | | |
189 | 189 | | |
| 190 | + | |
190 | 191 | | |
191 | 192 | | |
192 | 193 | | |
193 | 194 | | |
194 | 195 | | |
195 | | - | |
| 196 | + | |
196 | 197 | | |
197 | 198 | | |
198 | 199 | | |
| |||
201 | 202 | | |
202 | 203 | | |
203 | 204 | | |
204 | | - | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
205 | 214 | | |
206 | 215 | | |
207 | 216 | | |
208 | 217 | | |
209 | 218 | | |
210 | 219 | | |
211 | | - | |
| 220 | + | |
212 | 221 | | |
213 | 222 | | |
214 | 223 | | |
| |||
Lines changed: 2 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
37 | 37 | | |
38 | 38 | | |
39 | 39 | | |
| 40 | + | |
40 | 41 | | |
41 | 42 | | |
42 | 43 | | |
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
142 | 142 | | |
143 | 143 | | |
144 | 144 | | |
145 | | - | |
| 145 | + | |
146 | 146 | | |
147 | 147 | | |
148 | 148 | | |
| |||
0 commit comments