Files
callstack__agent-device/test/integration/ios-simulator-e2e/behavior-coverage.ts
Michał Pierzchała 7f3e355426 fix(ios): preserve regular snapshot depth through structural wrappers (#1947)
* fix(ios): complete regular snapshot depth frontier

* fix(ios): align depth frontier with visibility fold

* fix(ios): exercise regular depth frontier in CI

* fix(ios): cover visible-depth frontier through public snapshot

* fix(ios): tolerate absent deep-link confirmation

* test(ios): expose visible-depth fixture hierarchy

* test(ios): wait for visible-depth fixture subtree

* fix(ios): keep visible-depth fixture minimal

* fix(ios): update snapshot hint fixtures

* test(ios): avoid fixture label aggregation

* test(ios): match fixture raw hierarchy

* test(ios): prove visible-depth raw ancestry

* test(ios): align depth smoke with AX hierarchy
2026-08-22 13:53:39 +02:00

84 lines
2.8 KiB
TypeScript

export type IosSimulatorBehaviorId =
| 'background-foreground-resume'
| 'cold-start-deep-link-navigation'
| 'host-focus-preservation'
| 'interrupted-system-ui-flow'
| 'long-list-scroll-recovery'
| 'modal-open-close'
| 'permission-state-recovery'
| 'regular-visible-depth-frontier'
| 'text-entry-keyboard-lifecycle';
type BehaviorCoverageEntry =
| {
assertion: string;
level: 'live';
owner: string;
}
| {
assertion: string;
level: 'workflow-live';
owner: { path: string; test: string };
};
/**
* Cross-command mobile usage patterns requested by #320. Command ownership
* remains exhaustive in coverage-manifest.ts; this table prevents that
* command-level view from hiding missing end-to-end journeys.
*/
export const IOS_SIMULATOR_BEHAVIOR_COVERAGE = {
'cold-start-deep-link-navigation': {
assertion:
'launchApp(clearState) removes seeded app data, opens the stored deep route, renders its payload, and navigates onward',
level: 'live',
owner: 'smoke:automation-input',
},
'text-entry-keyboard-lifecycle': {
assertion:
'fill opens the keyboard, before/after pixels prove dismissal, and type appends text',
level: 'live',
owner: 'smoke:form-input',
},
'background-foreground-resume': {
assertion: 'Home backgrounds the fixture and its persisted transition survives foregrounding',
level: 'live',
owner: 'full:lifecycle-system',
},
'modal-open-close': {
assertion: 'a native page-sheet modal opens structurally and closes through its control',
level: 'live',
owner: 'smoke:automation-input',
},
'permission-state-recovery': {
assertion:
'microphone reset, grant, denial, and second reset produce exact app-observed states',
level: 'live',
owner: 'full:lifecycle-system',
},
'regular-visible-depth-frontier': {
assertion:
'regular depth 1 retains an independently projected child after its clipped structural parent is removed, while raw depth remains traversal-bounded',
level: 'live',
owner: 'smoke:regular-visible-depth-frontier',
},
'interrupted-system-ui-flow': {
assertion: 'Home and app switcher expose distinct system pixels before fixture restoration',
level: 'live',
owner: 'full:lifecycle-system',
},
'long-list-scroll-recovery': {
assertion: 'direction, bottom footer, reverse movement, and top rediscovery are all observed',
level: 'live',
owner: 'full:fixture-replays',
},
'host-focus-preservation': {
assertion:
'when the hosted runner can establish a Finder canary, it remains frontmost across simulator automation',
level: 'workflow-live',
owner: {
path: '.github/workflows/ios.yml',
test: 'Assert simulator automation preserved host focus',
},
},
} as const satisfies Record<IosSimulatorBehaviorId, BehaviorCoverageEntry>;