Files
Michał Pierzchała b15121ffc8 test(ios): establish snapshot convergence baselines and permanent evidence (#2204)
* test(ios): add snapshot convergence evidence harness

* fix(ios): satisfy benchmark CI guards

* fix(ios): constrain benchmark proxy routes

* fix(ios-benchmark): enforce cell admission evidence

* fix(ios-benchmark): protect benchmark state ownership

* fix(ios-benchmark): use proxy port flag

* fix(ios-benchmark): let proxy choose an ephemeral port

* test(ios-benchmark): keep CLI process seam local

* fix(ios-benchmark): parse proxy startup envelope

* fix(ios-benchmark): bind proxy lease to simulator

* fix(ios-benchmark): keep fresh proxy CLI sessions isolated

* fix(ios-benchmark): preserve async timeout evidence

* docs(ios-benchmark): retain exact-head evidence

* test(ios): reveal offscreen alert fixture controls

* test(ios): reset alert between relaunch samples

* test(ios): admit native alert snapshots

* docs(ios): publish snapshot convergence corpus

* chore(ios): format benchmark evidence

* fix(ios-benchmark): admit proxy fixture anchors

* docs(ios): republish exact-head benchmark corpus

* fix(size): make publish asset evidence hermetic

* style(size): format package evidence test

* test(size): update publish preparation contracts

* fix: retire stale utils layering zone

* test: pin shared publish asset owner

* test: verify preserved size reporter closure

* fix: move mutation ownership to snapshot module

* test(ios): add snapshot convergence evidence harness

* fix(ios): satisfy benchmark CI guards

* fix(ios): constrain benchmark proxy routes

* fix(ios-benchmark): enforce cell admission evidence

* fix(ios-benchmark): protect benchmark state ownership

* fix(ios-benchmark): use proxy port flag

* fix(ios-benchmark): let proxy choose an ephemeral port

* test(ios-benchmark): keep CLI process seam local

* fix(ios-benchmark): parse proxy startup envelope

* fix(ios-benchmark): bind proxy lease to simulator

* fix(ios-benchmark): keep fresh proxy CLI sessions isolated

* fix(ios-benchmark): preserve async timeout evidence

* docs(ios-benchmark): retain exact-head evidence

* test(ios): reveal offscreen alert fixture controls

* test(ios): reset alert between relaunch samples

* test(ios): admit native alert snapshots

* docs(ios): publish snapshot convergence corpus

* chore(ios): format benchmark evidence

* fix(ios-benchmark): admit proxy fixture anchors

* docs(ios): republish exact-head benchmark corpus

* fix(size): make publish asset evidence hermetic

* test(size): update publish preparation contracts

* fix: keep git-state gates out of mutation sandboxes
2026-09-01 21:39:05 +02:00

83 lines
2.2 KiB
TypeScript

import assert from 'node:assert/strict';
import { test } from 'vitest';
import { BenchmarkCellAdmissionError } from './lifecycle.ts';
import { openClientFixture, type AgentClient } from './proxy-client-support.ts';
import type { ScreenFixture } from './types.ts';
const alertFixture: ScreenFixture = {
id: 'alert',
label: 'Native alert',
app: 'com.callstack.agentdevicelab',
anchorText: 'Automation lab',
postSetupAnchorText: 'Automation confirmation',
setupAction: 'open-alert',
};
function clientWithSnapshots(anchors: string[], calls: string[]): AgentClient {
return {
apps: {
open: async () => {
calls.push('open');
return {};
},
},
interactions: {
scroll: async () => {
calls.push('scroll');
return {};
},
click: async () => {
calls.push('click');
return {};
},
},
batch: {
run: async () => {
calls.push('snapshot');
return {
results: [
{
step: 1,
command: 'snapshot',
ok: true,
data: { snapshot: { nodes: [{ label: anchors.shift() ?? '' }] } },
durationMs: 1,
},
],
total: 1,
executed: 1,
totalDurationMs: 1,
};
},
},
sessions: { close: async () => ({}) },
leases: {
allocate: async () => ({}),
release: async () => ({}),
},
};
}
test('persistent-client fixture setup admits both opened and prepared anchors', async () => {
const calls: string[] = [];
await openClientFixture(
clientWithSnapshots(['Automation lab', 'Automation confirmation'], calls),
alertFixture,
'simulator',
);
assert.deepEqual(calls, ['open', 'snapshot', 'scroll', 'click', 'snapshot']);
});
test('persistent-client setup rejects a wrong prepared screen as fixture-anchor', async () => {
await assert.rejects(
() =>
openClientFixture(
clientWithSnapshots(['Automation lab', 'Settings'], []),
alertFixture,
'simulator',
),
(error: unknown) =>
error instanceof BenchmarkCellAdmissionError && error.reason === 'fixture-anchor',
);
});