v3.18.0: the semantic event action for test scripts
The other-applet batch: a test script can send the common event downloads semantically instead of raw hex. - events.py: server-side mirrors of the PWA's event forms for Location status (0x03), Access technology change (0x0B), Network rejection (0x12 - the LA/RA/TA object selected by the registration group, the extended EMM cause and the extended information object) and Data connection status change (0x1D - status/type/TI plus the optional cause, host-clock 8.39 date-time, location information, access technology, APN and PDP/PDN/PDU type). Fields are validated before the run (a bad value is a script error, not a step failure); `src` overrides the device-identities source (default terminal, matching the Phone forms). - The engine gains the `event` action kind; the runner builds and sends it. The PWA's action-kind list stays in sync (drift-guarded - the guard itself caught its own regex bug on the first run). - Byte parity: the vectors are generated from the PWA's own builders and pinned in tests/test_events.py; the frontend suites assert the same values. PLMN and SCTS helpers are mirrored too. - The Phone tab's event form shows the built "Event data (hex)" (updated as the fields change), so every event without a builder can be used through the raw `envelope` action. - The test-step editor offers the event select + a JSON fields textarea; malformed JSON refuses the save with a clear message. - docs/test-scripts.md (the semantic-event table, an event example, the format stamp), docs/api.md and help EN/RU updated. Tests: 812 frontend + 717 Python; sw cache simple-v381.
This commit is contained in:
@@ -296,3 +296,28 @@ test('the single-envelope budget is enforced by the size helper', () => {
|
||||
assert.ok(!eventFitsOneEnvelope('AB'.repeat(245)));
|
||||
assert.ok(eventFitsOneEnvelope(null));
|
||||
});
|
||||
|
||||
test('the event form previews the bytes the send would deliver', () => {
|
||||
// the preview builds from the visible fields - the same bytes the send
|
||||
// uses, so a raw-envelope test step can be authored by copying it
|
||||
const els = {
|
||||
'ev-f-status': { value: '0' },
|
||||
'ev-f-mcc': { value: '250' },
|
||||
'ev-f-mnc': { value: '01' },
|
||||
'ev-f-lac': { value: '00FF' },
|
||||
'ev-f-cell': { value: '0001' },
|
||||
'event-send-preview': { value: '' },
|
||||
};
|
||||
globalThis.document = { getElementById: id => els[id] || null };
|
||||
globalThis._eventFormType = 0x03;
|
||||
pysimEventPreview();
|
||||
assert.strictEqual(els['event-send-preview'].value, '9B0100930752F01000FF0001');
|
||||
// a hidden field is left out of the build
|
||||
els['ev-f-mcc'].closest = () => ({ style: { display: 'none' } });
|
||||
pysimEventPreview();
|
||||
assert.strictEqual(els['event-send-preview'].value, '9B0100');
|
||||
// an event without a form leaves the preview empty
|
||||
globalThis._eventFormType = 0x99;
|
||||
pysimEventPreview();
|
||||
assert.strictEqual(els['event-send-preview'].value, '');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user