@react-native-harness/bridge 1.2.0 → 1.4.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/client.test.d.ts +2 -0
- package/dist/__tests__/client.test.d.ts.map +1 -0
- package/dist/__tests__/client.test.js +81 -0
- package/dist/__tests__/heartbeat.test.d.ts +2 -0
- package/dist/__tests__/heartbeat.test.d.ts.map +1 -0
- package/dist/__tests__/heartbeat.test.js +37 -0
- package/dist/__tests__/protocol.test.d.ts +2 -0
- package/dist/__tests__/protocol.test.d.ts.map +1 -0
- package/dist/__tests__/protocol.test.js +37 -0
- package/dist/__tests__/rpc-peer.test.d.ts +2 -0
- package/dist/__tests__/rpc-peer.test.d.ts.map +1 -0
- package/dist/__tests__/rpc-peer.test.js +127 -0
- package/dist/client.d.ts +7 -14
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +96 -42
- package/dist/errors.d.ts +5 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +23 -0
- package/dist/heartbeat.d.ts +13 -0
- package/dist/heartbeat.d.ts.map +1 -0
- package/dist/heartbeat.js +49 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/protocol.d.ts +51 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +132 -0
- package/dist/rpc-peer.d.ts +28 -0
- package/dist/rpc-peer.d.ts.map +1 -0
- package/dist/rpc-peer.js +146 -0
- package/dist/server.d.ts +1 -20
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +133 -67
- package/dist/shared/test-collector.d.ts +7 -3
- package/dist/shared/test-collector.d.ts.map +1 -1
- package/dist/shared/test-context.d.ts +21 -0
- package/dist/shared/test-context.d.ts.map +1 -0
- package/dist/shared/test-context.js +1 -0
- package/dist/shared/test-runner.d.ts +13 -0
- package/dist/shared/test-runner.d.ts.map +1 -1
- package/dist/shared.d.ts +2 -3
- package/dist/shared.d.ts.map +1 -1
- package/dist/transport.d.ts +22 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +22 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/websocket-client-transport.d.ts +3 -0
- package/dist/websocket-client-transport.d.ts.map +1 -0
- package/dist/websocket-client-transport.js +45 -0
- package/dist/websocket-server-transport.d.ts +4 -0
- package/dist/websocket-server-transport.d.ts.map +1 -0
- package/dist/websocket-server-transport.js +43 -0
- package/eslint.config.mjs +5 -1
- package/package.json +6 -5
- package/src/__tests__/client.test.ts +99 -0
- package/src/__tests__/heartbeat.test.ts +47 -0
- package/src/__tests__/protocol.test.ts +51 -0
- package/src/__tests__/rpc-peer.test.ts +181 -0
- package/src/client.ts +146 -57
- package/src/errors.ts +32 -0
- package/src/heartbeat.ts +67 -0
- package/src/index.ts +1 -0
- package/src/protocol.ts +233 -0
- package/src/rpc-peer.ts +222 -0
- package/src/server.ts +191 -109
- package/src/shared/test-collector.ts +10 -3
- package/src/shared/test-context.ts +21 -0
- package/src/shared/test-runner.ts +14 -0
- package/src/shared.ts +6 -2
- package/src/transport.ts +47 -0
- package/src/websocket-client-transport.ts +85 -0
- package/src/websocket-server-transport.ts +54 -0
- package/vite.config.ts +18 -0
package/dist/server.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { WebSocketServer } from 'ws';
|
|
2
|
-
import { createBirpc } from 'birpc';
|
|
3
2
|
import { EventEmitter } from 'node:events';
|
|
4
3
|
import fs from 'node:fs/promises';
|
|
5
4
|
import os from 'node:os';
|
|
@@ -7,14 +6,16 @@ import path from 'node:path';
|
|
|
7
6
|
import { randomUUID } from 'node:crypto';
|
|
8
7
|
import { logger } from '@react-native-harness/tools';
|
|
9
8
|
import { BinaryStore, parseBinaryFrame } from './binary-transfer.js';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
9
|
+
import { AppBridgeDisconnectedError, DeviceNotRespondingError, } from './errors.js';
|
|
10
|
+
import { createHeartbeat } from './heartbeat.js';
|
|
12
11
|
import { matchImageSnapshot } from './image-snapshot.js';
|
|
13
|
-
|
|
12
|
+
import { serializeBridgeMessage } from './protocol.js';
|
|
13
|
+
import { createRpcPeer } from './rpc-peer.js';
|
|
14
|
+
import { createRpcTransport, } from './transport.js';
|
|
15
|
+
import { createNodeWebSocketTransport } from './websocket-server-transport.js';
|
|
16
|
+
export { AppBridgeDisconnectedError, DeviceNotRespondingError, } from './errors.js';
|
|
14
17
|
const bridgeLogger = logger.child('bridge');
|
|
15
|
-
|
|
16
|
-
// Helpers
|
|
17
|
-
// ---------------------------------------------------------------------------
|
|
18
|
+
const noop = () => undefined;
|
|
18
19
|
const createWss = (transport) => {
|
|
19
20
|
if ('port' in transport) {
|
|
20
21
|
return new Promise((resolve) => {
|
|
@@ -35,76 +36,141 @@ const receiveScreenshot = async (binaryStore, reference) => {
|
|
|
35
36
|
await fs.writeFile(file, data);
|
|
36
37
|
return { path: file };
|
|
37
38
|
};
|
|
38
|
-
// ---------------------------------------------------------------------------
|
|
39
|
-
// Factory
|
|
40
|
-
// ---------------------------------------------------------------------------
|
|
41
39
|
export const createHarnessBridge = async (options) => {
|
|
42
|
-
const { timeout, context, ...
|
|
43
|
-
const wss = await createWss(
|
|
40
|
+
const { timeout, context, ...transportOptions } = options;
|
|
41
|
+
const wss = await createWss(transportOptions);
|
|
44
42
|
bridgeLogger.debug('bridge server ready');
|
|
45
43
|
const emitter = new EventEmitter();
|
|
46
44
|
let currentConnection = null;
|
|
45
|
+
let activeSession = null;
|
|
47
46
|
const connectionWaiters = [];
|
|
48
47
|
wss.on('connection', (ws) => {
|
|
48
|
+
if (activeSession) {
|
|
49
|
+
bridgeLogger.info('replacing existing app connection with a newer client');
|
|
50
|
+
activeSession.disconnect(new AppBridgeDisconnectedError('app-replaced'));
|
|
51
|
+
}
|
|
49
52
|
bridgeLogger.debug('app connected');
|
|
53
|
+
const transport = createNodeWebSocketTransport(ws);
|
|
50
54
|
const binaryStore = new BinaryStore();
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
55
|
+
let readyConnection = null;
|
|
56
|
+
let disconnected = false;
|
|
57
|
+
let offMessage = noop;
|
|
58
|
+
let offClose = noop;
|
|
59
|
+
let offError = noop;
|
|
60
|
+
const closeTransport = () => {
|
|
61
|
+
if (transport.state === 'closing' || transport.state === 'closed') {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
transport.close(1012);
|
|
65
|
+
};
|
|
66
|
+
const rpc = createRpcPeer({
|
|
67
|
+
localMethods: {
|
|
68
|
+
'device.screenshot.receive': (ref) => receiveScreenshot(binaryStore, ref),
|
|
69
|
+
'test.matchImageSnapshot': (screenshot, testPath, opts) => matchImageSnapshot(screenshot, testPath, opts, context.platform.name),
|
|
62
70
|
},
|
|
63
|
-
|
|
64
|
-
|
|
71
|
+
transport: createRpcTransport(transport),
|
|
72
|
+
onEvent: (event) => {
|
|
73
|
+
emitter.emit('event', event);
|
|
65
74
|
},
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const rpc = createBirpc(serverFunctions, {
|
|
70
|
-
post: (data) => ws.send(data),
|
|
71
|
-
on: (handler) => {
|
|
72
|
-
ws.on('message', (msg, isBinary) => {
|
|
73
|
-
if (isBinary) {
|
|
74
|
-
try {
|
|
75
|
-
const messageBuffer = Array.isArray(msg)
|
|
76
|
-
? Buffer.concat(msg)
|
|
77
|
-
: Buffer.isBuffer(msg)
|
|
78
|
-
? msg
|
|
79
|
-
: Buffer.from(msg);
|
|
80
|
-
const { transferId, data } = parseBinaryFrame(new Uint8Array(messageBuffer));
|
|
81
|
-
binaryStore.add(transferId, data);
|
|
82
|
-
}
|
|
83
|
-
catch (err) {
|
|
84
|
-
bridgeLogger.warn('failed to parse binary frame: %s', err);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
handler(msg.toString());
|
|
89
|
-
}
|
|
90
|
-
});
|
|
75
|
+
callTimeoutMs: timeout,
|
|
76
|
+
createTimeoutError: (functionName, args) => {
|
|
77
|
+
return new DeviceNotRespondingError(functionName, args);
|
|
91
78
|
},
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
bridgeLogger.error('rpc function failed: %s args=%o', functionName, args);
|
|
97
|
-
throw error;
|
|
79
|
+
});
|
|
80
|
+
const heartbeat = createHeartbeat({
|
|
81
|
+
sendPing: (id) => {
|
|
82
|
+
transport.send(serializeBridgeMessage({ type: 'ping', id }));
|
|
98
83
|
},
|
|
99
|
-
|
|
100
|
-
|
|
84
|
+
onTimeout: () => {
|
|
85
|
+
bridgeLogger.warn('app heartbeat timed out');
|
|
86
|
+
disconnect(new AppBridgeDisconnectedError('heartbeat-timeout'));
|
|
101
87
|
},
|
|
102
88
|
});
|
|
103
|
-
|
|
89
|
+
const disconnect = (reason) => {
|
|
90
|
+
if (disconnected) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
disconnected = true;
|
|
94
|
+
offMessage();
|
|
95
|
+
offClose();
|
|
96
|
+
offError();
|
|
104
97
|
bridgeLogger.debug('app disconnected');
|
|
98
|
+
heartbeat.dispose();
|
|
105
99
|
binaryStore.dispose();
|
|
106
|
-
|
|
107
|
-
|
|
100
|
+
if (activeSession?.transport === transport) {
|
|
101
|
+
activeSession = null;
|
|
102
|
+
}
|
|
103
|
+
if (currentConnection === readyConnection) {
|
|
104
|
+
currentConnection = null;
|
|
105
|
+
}
|
|
106
|
+
rpc.close(reason ?? new AppBridgeDisconnectedError('app-disconnected'));
|
|
107
|
+
closeTransport();
|
|
108
|
+
if (readyConnection) {
|
|
109
|
+
emitter.emit('disconnected');
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
activeSession = { disconnect, transport };
|
|
113
|
+
const handleControlMessage = async (message) => {
|
|
114
|
+
const controlMessage = await rpc.handleMessage(message);
|
|
115
|
+
if (!controlMessage) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
switch (controlMessage.type) {
|
|
119
|
+
case 'ready': {
|
|
120
|
+
if (readyConnection) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const conn = {
|
|
124
|
+
device: controlMessage.device,
|
|
125
|
+
runTests: (testPath, opts) => rpc.invoke('runTests', testPath, opts),
|
|
126
|
+
};
|
|
127
|
+
readyConnection = conn;
|
|
128
|
+
currentConnection = conn;
|
|
129
|
+
bridgeLogger.debug('app ready: platform=%s model=%s', controlMessage.device.platform, controlMessage.device.model);
|
|
130
|
+
emitter.emit('connected', conn);
|
|
131
|
+
for (const { resolve } of connectionWaiters.splice(0)) {
|
|
132
|
+
resolve(conn);
|
|
133
|
+
}
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
case 'ping': {
|
|
137
|
+
transport.send(serializeBridgeMessage({ type: 'pong', id: controlMessage.id }));
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
case 'pong': {
|
|
141
|
+
heartbeat.notifyPong(controlMessage.id);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
const handleBinaryMessage = (message) => {
|
|
147
|
+
try {
|
|
148
|
+
const { transferId, data } = parseBinaryFrame(message);
|
|
149
|
+
binaryStore.add(transferId, data);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
bridgeLogger.warn('failed to parse binary frame: %s', error);
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
offMessage = transport.onMessage((message) => {
|
|
156
|
+
if (typeof message !== 'string') {
|
|
157
|
+
handleBinaryMessage(message);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
void handleControlMessage(message).catch((error) => {
|
|
161
|
+
bridgeLogger.warn('failed to handle bridge message: %s', error);
|
|
162
|
+
disconnect(error instanceof Error
|
|
163
|
+
? error
|
|
164
|
+
: new Error('Received invalid app bridge message'));
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
offClose = transport.onClose(() => {
|
|
168
|
+
disconnect();
|
|
169
|
+
});
|
|
170
|
+
offError = transport.onError((error) => {
|
|
171
|
+
disconnect(error instanceof Error
|
|
172
|
+
? error
|
|
173
|
+
: new AppBridgeDisconnectedError('socket-error'));
|
|
108
174
|
});
|
|
109
175
|
});
|
|
110
176
|
return {
|
|
@@ -118,9 +184,6 @@ export const createHarnessBridge = async (options) => {
|
|
|
118
184
|
if (signal?.aborted) {
|
|
119
185
|
return Promise.reject(signal.reason ?? new DOMException('Aborted', 'AbortError'));
|
|
120
186
|
}
|
|
121
|
-
// If the app already connected before this call (e.g. fast simulator
|
|
122
|
-
// startup between startAttempt and waitForReady), return it immediately
|
|
123
|
-
// rather than waiting for a second reportReady that will never come.
|
|
124
187
|
if (currentConnection) {
|
|
125
188
|
return Promise.resolve(currentConnection);
|
|
126
189
|
}
|
|
@@ -129,8 +192,9 @@ export const createHarnessBridge = async (options) => {
|
|
|
129
192
|
connectionWaiters.push(entry);
|
|
130
193
|
signal?.addEventListener('abort', () => {
|
|
131
194
|
const idx = connectionWaiters.indexOf(entry);
|
|
132
|
-
if (idx !== -1)
|
|
195
|
+
if (idx !== -1) {
|
|
133
196
|
connectionWaiters.splice(idx, 1);
|
|
197
|
+
}
|
|
134
198
|
reject(signal.reason ?? new DOMException('Aborted', 'AbortError'));
|
|
135
199
|
}, { once: true });
|
|
136
200
|
});
|
|
@@ -140,10 +204,12 @@ export const createHarnessBridge = async (options) => {
|
|
|
140
204
|
dispose: () => {
|
|
141
205
|
bridgeLogger.debug('disposing bridge');
|
|
142
206
|
for (const { reject } of connectionWaiters.splice(0)) {
|
|
143
|
-
reject(new
|
|
207
|
+
reject(new AppBridgeDisconnectedError('bridge-disposed'));
|
|
144
208
|
}
|
|
145
|
-
|
|
209
|
+
activeSession?.disconnect(new AppBridgeDisconnectedError('bridge-disposed'));
|
|
210
|
+
for (const client of wss.clients) {
|
|
146
211
|
client.terminate();
|
|
212
|
+
}
|
|
147
213
|
wss.close();
|
|
148
214
|
emitter.removeAllListeners();
|
|
149
215
|
},
|
|
@@ -1,17 +1,21 @@
|
|
|
1
|
+
import type { HarnessTestContext } from './test-context.js';
|
|
1
2
|
export type TestStatus = 'active' | 'skipped' | 'todo';
|
|
2
|
-
export type
|
|
3
|
+
export type TestDeclarationMode = 'only' | 'skip' | 'todo';
|
|
4
|
+
export type TestFn = (context: HarnessTestContext) => void | Promise<void>;
|
|
5
|
+
export type SuiteHookFn = () => void | Promise<void>;
|
|
3
6
|
export type TestCase = {
|
|
4
7
|
name: string;
|
|
5
8
|
fn: TestFn;
|
|
6
9
|
status: TestStatus;
|
|
10
|
+
declarationMode?: TestDeclarationMode;
|
|
7
11
|
};
|
|
8
12
|
export type TestSuite = {
|
|
9
13
|
name: string;
|
|
10
14
|
tests: TestCase[];
|
|
11
15
|
suites: TestSuite[];
|
|
12
16
|
parent?: TestSuite;
|
|
13
|
-
beforeAll:
|
|
14
|
-
afterAll:
|
|
17
|
+
beforeAll: SuiteHookFn[];
|
|
18
|
+
afterAll: SuiteHookFn[];
|
|
15
19
|
beforeEach: TestFn[];
|
|
16
20
|
afterEach: TestFn[];
|
|
17
21
|
status?: TestStatus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-collector.d.ts","sourceRoot":"","sources":["../../src/shared/test-collector.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvD,MAAM,MAAM,MAAM,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"test-collector.d.ts","sourceRoot":"","sources":["../../src/shared/test-collector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvD,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3D,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3E,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,uFAAuF;IACvF,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC3B,0BAA0B,GAC1B,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type HarnessTaskContext = {
|
|
2
|
+
name: string;
|
|
3
|
+
type: 'test';
|
|
4
|
+
mode: 'run' | 'skip' | 'todo';
|
|
5
|
+
file: {
|
|
6
|
+
name: string;
|
|
7
|
+
};
|
|
8
|
+
suite: {
|
|
9
|
+
name: string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
export type HarnessTestContext = {
|
|
13
|
+
task: HarnessTaskContext;
|
|
14
|
+
onTestFailed: (fn: () => void | Promise<void>) => void;
|
|
15
|
+
onTestFinished: (fn: () => void | Promise<void>) => void;
|
|
16
|
+
skip: {
|
|
17
|
+
(note?: string): never;
|
|
18
|
+
(condition: boolean, note?: string): void;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=test-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-context.d.ts","sourceRoot":"","sources":["../../src/shared/test-context.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAC9B,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,kBAAkB,CAAC;IACzB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IACvD,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IACzD,IAAI,EAAE;QACJ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QACvB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3C,CAAC;CACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { TestDeclarationMode } from './test-collector.js';
|
|
1
2
|
export type CodeFrame = {
|
|
2
3
|
content: string;
|
|
3
4
|
location?: {
|
|
@@ -31,12 +32,20 @@ export type TestRunnerTestStartedEvent = {
|
|
|
31
32
|
name: string;
|
|
32
33
|
suite: string;
|
|
33
34
|
file: string;
|
|
35
|
+
ancestorTitles: string[];
|
|
36
|
+
fullName: string;
|
|
37
|
+
startedAt: number;
|
|
38
|
+
declarationMode?: TestDeclarationMode;
|
|
34
39
|
};
|
|
35
40
|
export type TestRunnerTestFinishedEvent = {
|
|
36
41
|
type: 'test-finished';
|
|
37
42
|
name: string;
|
|
38
43
|
suite: string;
|
|
39
44
|
file: string;
|
|
45
|
+
ancestorTitles: string[];
|
|
46
|
+
fullName: string;
|
|
47
|
+
startedAt: number;
|
|
48
|
+
declarationMode?: TestDeclarationMode;
|
|
40
49
|
duration: number;
|
|
41
50
|
error?: SerializedError;
|
|
42
51
|
status: TestResultStatus;
|
|
@@ -55,6 +64,10 @@ export type TestResult = {
|
|
|
55
64
|
status: TestResultStatus;
|
|
56
65
|
error?: SerializedError;
|
|
57
66
|
duration: number;
|
|
67
|
+
ancestorTitles?: string[];
|
|
68
|
+
fullName?: string;
|
|
69
|
+
startedAt?: number;
|
|
70
|
+
declarationMode?: TestDeclarationMode;
|
|
58
71
|
};
|
|
59
72
|
export type TestSuiteResult = {
|
|
60
73
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../src/shared/test-runner.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAExE,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../src/shared/test-runner.ts"],"names":[],"mappings":"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"}
|
package/dist/shared.d.ts
CHANGED
|
@@ -67,7 +67,8 @@ export type ImageSnapshotOptions = {
|
|
|
67
67
|
*/
|
|
68
68
|
diffColorAlt?: [number, number, number];
|
|
69
69
|
};
|
|
70
|
-
export type { TestCollectorEvents, TestCollectionStartedEvent, TestCollectionFinishedEvent, TestSuite, TestCase, CollectionResult, } from './shared/test-collector.js';
|
|
70
|
+
export type { TestCollectorEvents, TestCollectionStartedEvent, TestCollectionFinishedEvent, TestSuite, TestCase, CollectionResult, TestFn, SuiteHookFn, } from './shared/test-collector.js';
|
|
71
|
+
export type { HarnessTaskContext, HarnessTestContext, } from './shared/test-context.js';
|
|
71
72
|
export type { TestRunnerEvents, TestRunnerFileStartedEvent, TestRunnerFileFinishedEvent, TestRunnerSuiteStartedEvent, TestRunnerTestStartedEvent, TestRunnerTestFinishedEvent, TestRunnerSuiteFinishedEvent, TestSuiteResult, TestResult, TestResultStatus, SerializedError, CodeFrame, } from './shared/test-runner.js';
|
|
72
73
|
export type { ModuleBundlingStartedEvent, ModuleBundlingFinishedEvent, ModuleBundlingFailedEvent, SetupFileBundlingStartedEvent, SetupFileBundlingFinishedEvent, SetupFileBundlingFailedEvent, BundlerEvents, } from './shared/bundler.js';
|
|
73
74
|
export type DeviceDescriptor = {
|
|
@@ -99,8 +100,6 @@ export type BinaryDataReference = {
|
|
|
99
100
|
};
|
|
100
101
|
export type ScreenshotData = BinaryDataReference;
|
|
101
102
|
export type BridgeServerFunctions = {
|
|
102
|
-
reportReady: (device: DeviceDescriptor) => void;
|
|
103
|
-
emitEvent: (event: BridgeEvents['type'], data: BridgeEvents) => void;
|
|
104
103
|
'device.screenshot.receive': (reference: BinaryDataReference, metadata: {
|
|
105
104
|
width: number;
|
|
106
105
|
height: number;
|
package/dist/shared.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEvE,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,gBAAgB,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;IACzC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3C;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC;QACpB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC,CAAC;AAEF,YAAY,EACV,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,SAAS,EACT,QAAQ,EACR,gBAAgB,
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type BridgeTransportState = 'connecting' | 'open' | 'closing' | 'closed';
|
|
2
|
+
export type BridgeTransportMessage = string | Uint8Array;
|
|
3
|
+
export type BridgeTransportCloseEvent = {
|
|
4
|
+
code: number;
|
|
5
|
+
reason: string;
|
|
6
|
+
};
|
|
7
|
+
export type BridgeTransport = {
|
|
8
|
+
readonly state: BridgeTransportState;
|
|
9
|
+
send: (message: BridgeTransportMessage) => void;
|
|
10
|
+
close: (code?: number, reason?: string) => void;
|
|
11
|
+
onOpen: (listener: () => void) => () => void;
|
|
12
|
+
onMessage: (listener: (message: BridgeTransportMessage) => void) => () => void;
|
|
13
|
+
onClose: (listener: (event: BridgeTransportCloseEvent) => void) => () => void;
|
|
14
|
+
onError: (listener: (error: Error) => void) => () => void;
|
|
15
|
+
};
|
|
16
|
+
export type RpcTransport = {
|
|
17
|
+
readonly state: BridgeTransportState;
|
|
18
|
+
send: (message: string) => void;
|
|
19
|
+
};
|
|
20
|
+
export declare const toTransportState: (readyState: number) => BridgeTransportState;
|
|
21
|
+
export declare const createRpcTransport: (transport: BridgeTransport) => RpcTransport;
|
|
22
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEhF,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,UAAU,CAAC;AAEzD,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,IAAI,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAChD,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAC7C,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAC/E,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAC9E,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,YAAY,MAAM,KAAG,oBAWrD,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,WAAW,eAAe,KAAG,YAS/D,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const toTransportState = (readyState) => {
|
|
2
|
+
switch (readyState) {
|
|
3
|
+
case 0:
|
|
4
|
+
return 'connecting';
|
|
5
|
+
case 1:
|
|
6
|
+
return 'open';
|
|
7
|
+
case 2:
|
|
8
|
+
return 'closing';
|
|
9
|
+
default:
|
|
10
|
+
return 'closed';
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
export const createRpcTransport = (transport) => {
|
|
14
|
+
return {
|
|
15
|
+
get state() {
|
|
16
|
+
return transport.state;
|
|
17
|
+
},
|
|
18
|
+
send: (message) => {
|
|
19
|
+
transport.send(message);
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
};
|