@react-native-harness/bridge 1.3.0 → 1.4.0
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 +144 -0
- package/dist/client.d.ts +8 -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 +149 -0
- package/dist/server.d.ts +2 -20
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +123 -71
- package/dist/shared/test-collector.d.ts +2 -0
- package/dist/shared/test-collector.d.ts.map +1 -1
- package/dist/shared/test-runner.d.ts +23 -0
- package/dist/shared/test-runner.d.ts.map +1 -1
- package/dist/shared.d.ts +2 -2
- 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 +206 -0
- package/src/client.ts +147 -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 +227 -0
- package/src/server.ts +181 -114
- package/src/shared/test-collector.ts +3 -0
- package/src/shared/test-runner.ts +24 -0
- package/src/shared.ts +2 -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,91 +36,142 @@ 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
55
|
let readyConnection = null;
|
|
52
56
|
let disconnected = false;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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),
|
|
65
70
|
},
|
|
66
|
-
|
|
67
|
-
|
|
71
|
+
transport: createRpcTransport(transport),
|
|
72
|
+
onEvent: (event) => {
|
|
73
|
+
emitter.emit('event', event);
|
|
68
74
|
},
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const rpc = createBirpc(serverFunctions, {
|
|
73
|
-
post: (data) => ws.send(data),
|
|
74
|
-
on: (handler) => {
|
|
75
|
-
ws.on('message', (msg, isBinary) => {
|
|
76
|
-
if (isBinary) {
|
|
77
|
-
try {
|
|
78
|
-
const messageBuffer = Array.isArray(msg)
|
|
79
|
-
? Buffer.concat(msg)
|
|
80
|
-
: Buffer.isBuffer(msg)
|
|
81
|
-
? msg
|
|
82
|
-
: Buffer.from(msg);
|
|
83
|
-
const { transferId, data } = parseBinaryFrame(new Uint8Array(messageBuffer));
|
|
84
|
-
binaryStore.add(transferId, data);
|
|
85
|
-
}
|
|
86
|
-
catch (err) {
|
|
87
|
-
bridgeLogger.warn('failed to parse binary frame: %s', err);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
handler(msg.toString());
|
|
92
|
-
}
|
|
93
|
-
});
|
|
75
|
+
callTimeoutMs: (method) => method === 'runTests' ? undefined : timeout,
|
|
76
|
+
createTimeoutError: (functionName, args) => {
|
|
77
|
+
return new DeviceNotRespondingError(functionName, args);
|
|
94
78
|
},
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
bridgeLogger.error('rpc function failed: %s args=%o', functionName, args);
|
|
100
|
-
throw error;
|
|
79
|
+
});
|
|
80
|
+
const heartbeat = createHeartbeat({
|
|
81
|
+
sendPing: (id) => {
|
|
82
|
+
transport.send(serializeBridgeMessage({ type: 'ping', id }));
|
|
101
83
|
},
|
|
102
|
-
|
|
103
|
-
|
|
84
|
+
onTimeout: () => {
|
|
85
|
+
bridgeLogger.warn('app heartbeat timed out');
|
|
86
|
+
disconnect(new AppBridgeDisconnectedError('heartbeat-timeout'));
|
|
104
87
|
},
|
|
105
88
|
});
|
|
106
89
|
const disconnect = (reason) => {
|
|
107
|
-
if (disconnected)
|
|
90
|
+
if (disconnected) {
|
|
108
91
|
return;
|
|
92
|
+
}
|
|
109
93
|
disconnected = true;
|
|
94
|
+
offMessage();
|
|
95
|
+
offClose();
|
|
96
|
+
offError();
|
|
110
97
|
bridgeLogger.debug('app disconnected');
|
|
98
|
+
heartbeat.dispose();
|
|
111
99
|
binaryStore.dispose();
|
|
100
|
+
if (activeSession?.transport === transport) {
|
|
101
|
+
activeSession = null;
|
|
102
|
+
}
|
|
112
103
|
if (currentConnection === readyConnection) {
|
|
113
104
|
currentConnection = null;
|
|
114
105
|
}
|
|
115
|
-
rpc
|
|
116
|
-
|
|
106
|
+
rpc.close(reason ?? new AppBridgeDisconnectedError('app-disconnected'));
|
|
107
|
+
closeTransport();
|
|
108
|
+
if (readyConnection) {
|
|
109
|
+
emitter.emit('disconnected');
|
|
110
|
+
}
|
|
117
111
|
};
|
|
118
|
-
|
|
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
|
+
resetEnvironment: () => rpc.invoke('resetEnvironment'),
|
|
127
|
+
};
|
|
128
|
+
readyConnection = conn;
|
|
129
|
+
currentConnection = conn;
|
|
130
|
+
bridgeLogger.debug('app ready: platform=%s model=%s', controlMessage.device.platform, controlMessage.device.model);
|
|
131
|
+
emitter.emit('connected', conn);
|
|
132
|
+
for (const { resolve } of connectionWaiters.splice(0)) {
|
|
133
|
+
resolve(conn);
|
|
134
|
+
}
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
case 'ping': {
|
|
138
|
+
transport.send(serializeBridgeMessage({ type: 'pong', id: controlMessage.id }));
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
case 'pong': {
|
|
142
|
+
heartbeat.notifyPong(controlMessage.id);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
const handleBinaryMessage = (message) => {
|
|
148
|
+
try {
|
|
149
|
+
const { transferId, data } = parseBinaryFrame(message);
|
|
150
|
+
binaryStore.add(transferId, data);
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
bridgeLogger.warn('failed to parse binary frame: %s', error);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
offMessage = transport.onMessage((message) => {
|
|
157
|
+
if (typeof message !== 'string') {
|
|
158
|
+
handleBinaryMessage(message);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
void handleControlMessage(message).catch((error) => {
|
|
162
|
+
bridgeLogger.warn('failed to handle bridge message: %s', error);
|
|
163
|
+
disconnect(error instanceof Error
|
|
164
|
+
? error
|
|
165
|
+
: new Error('Received invalid app bridge message'));
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
offClose = transport.onClose(() => {
|
|
119
169
|
disconnect();
|
|
120
170
|
});
|
|
121
|
-
|
|
122
|
-
disconnect(error instanceof Error
|
|
171
|
+
offError = transport.onError((error) => {
|
|
172
|
+
disconnect(error instanceof Error
|
|
173
|
+
? error
|
|
174
|
+
: new AppBridgeDisconnectedError('socket-error'));
|
|
123
175
|
});
|
|
124
176
|
});
|
|
125
177
|
return {
|
|
@@ -133,9 +185,6 @@ export const createHarnessBridge = async (options) => {
|
|
|
133
185
|
if (signal?.aborted) {
|
|
134
186
|
return Promise.reject(signal.reason ?? new DOMException('Aborted', 'AbortError'));
|
|
135
187
|
}
|
|
136
|
-
// If the app already connected before this call (e.g. fast simulator
|
|
137
|
-
// startup between startAttempt and waitForReady), return it immediately
|
|
138
|
-
// rather than waiting for a second reportReady that will never come.
|
|
139
188
|
if (currentConnection) {
|
|
140
189
|
return Promise.resolve(currentConnection);
|
|
141
190
|
}
|
|
@@ -144,8 +193,9 @@ export const createHarnessBridge = async (options) => {
|
|
|
144
193
|
connectionWaiters.push(entry);
|
|
145
194
|
signal?.addEventListener('abort', () => {
|
|
146
195
|
const idx = connectionWaiters.indexOf(entry);
|
|
147
|
-
if (idx !== -1)
|
|
196
|
+
if (idx !== -1) {
|
|
148
197
|
connectionWaiters.splice(idx, 1);
|
|
198
|
+
}
|
|
149
199
|
reject(signal.reason ?? new DOMException('Aborted', 'AbortError'));
|
|
150
200
|
}, { once: true });
|
|
151
201
|
});
|
|
@@ -155,10 +205,12 @@ export const createHarnessBridge = async (options) => {
|
|
|
155
205
|
dispose: () => {
|
|
156
206
|
bridgeLogger.debug('disposing bridge');
|
|
157
207
|
for (const { reject } of connectionWaiters.splice(0)) {
|
|
158
|
-
reject(new
|
|
208
|
+
reject(new AppBridgeDisconnectedError('bridge-disposed'));
|
|
159
209
|
}
|
|
160
|
-
|
|
210
|
+
activeSession?.disconnect(new AppBridgeDisconnectedError('bridge-disposed'));
|
|
211
|
+
for (const client of wss.clients) {
|
|
161
212
|
client.terminate();
|
|
213
|
+
}
|
|
162
214
|
wss.close();
|
|
163
215
|
emitter.removeAllListeners();
|
|
164
216
|
},
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { HarnessTestContext } from './test-context.js';
|
|
2
2
|
export type TestStatus = 'active' | 'skipped' | 'todo';
|
|
3
|
+
export type TestDeclarationMode = 'only' | 'skip' | 'todo';
|
|
3
4
|
export type TestFn = (context: HarnessTestContext) => void | Promise<void>;
|
|
4
5
|
export type SuiteHookFn = () => void | Promise<void>;
|
|
5
6
|
export type TestCase = {
|
|
6
7
|
name: string;
|
|
7
8
|
fn: TestFn;
|
|
8
9
|
status: TestStatus;
|
|
10
|
+
declarationMode?: TestDeclarationMode;
|
|
9
11
|
};
|
|
10
12
|
export type TestSuite = {
|
|
11
13
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
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,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;
|
|
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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { TestDeclarationMode } from './test-collector.js';
|
|
1
2
|
export type CodeFrame = {
|
|
2
3
|
content: string;
|
|
3
4
|
location?: {
|
|
@@ -11,6 +12,16 @@ export type SerializedError = {
|
|
|
11
12
|
name: string;
|
|
12
13
|
message: string;
|
|
13
14
|
codeFrame?: CodeFrame;
|
|
15
|
+
diagnostics?: {
|
|
16
|
+
pendingPromises?: {
|
|
17
|
+
total: number;
|
|
18
|
+
items: Array<{
|
|
19
|
+
id: number;
|
|
20
|
+
createdAt: number;
|
|
21
|
+
stack?: string;
|
|
22
|
+
}>;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
14
25
|
};
|
|
15
26
|
export type TestRunnerFileStartedEvent = {
|
|
16
27
|
type: 'file-started';
|
|
@@ -31,12 +42,20 @@ export type TestRunnerTestStartedEvent = {
|
|
|
31
42
|
name: string;
|
|
32
43
|
suite: string;
|
|
33
44
|
file: string;
|
|
45
|
+
ancestorTitles: string[];
|
|
46
|
+
fullName: string;
|
|
47
|
+
startedAt: number;
|
|
48
|
+
declarationMode?: TestDeclarationMode;
|
|
34
49
|
};
|
|
35
50
|
export type TestRunnerTestFinishedEvent = {
|
|
36
51
|
type: 'test-finished';
|
|
37
52
|
name: string;
|
|
38
53
|
suite: string;
|
|
39
54
|
file: string;
|
|
55
|
+
ancestorTitles: string[];
|
|
56
|
+
fullName: string;
|
|
57
|
+
startedAt: number;
|
|
58
|
+
declarationMode?: TestDeclarationMode;
|
|
40
59
|
duration: number;
|
|
41
60
|
error?: SerializedError;
|
|
42
61
|
status: TestResultStatus;
|
|
@@ -55,6 +74,10 @@ export type TestResult = {
|
|
|
55
74
|
status: TestResultStatus;
|
|
56
75
|
error?: SerializedError;
|
|
57
76
|
duration: number;
|
|
77
|
+
ancestorTitles?: string[];
|
|
78
|
+
fullName?: string;
|
|
79
|
+
startedAt?: number;
|
|
80
|
+
declarationMode?: TestDeclarationMode;
|
|
58
81
|
};
|
|
59
82
|
export type TestSuiteResult = {
|
|
60
83
|
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;
|
|
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
|
@@ -87,10 +87,12 @@ export type TestExecutionOptions = {
|
|
|
87
87
|
testNamePattern?: string;
|
|
88
88
|
setupFiles?: string[];
|
|
89
89
|
setupFilesAfterEnv?: string[];
|
|
90
|
+
testTimeout?: number;
|
|
90
91
|
runner: string;
|
|
91
92
|
};
|
|
92
93
|
export type BridgeClientFunctions = {
|
|
93
94
|
runTests: (path: string, options: TestExecutionOptions) => Promise<TestSuiteResult>;
|
|
95
|
+
resetEnvironment: () => Promise<void>;
|
|
94
96
|
};
|
|
95
97
|
export type BinaryDataReference = {
|
|
96
98
|
type: 'binary';
|
|
@@ -100,8 +102,6 @@ export type BinaryDataReference = {
|
|
|
100
102
|
};
|
|
101
103
|
export type ScreenshotData = BinaryDataReference;
|
|
102
104
|
export type BridgeServerFunctions = {
|
|
103
|
-
reportReady: (device: DeviceDescriptor) => void;
|
|
104
|
-
emitEvent: (event: BridgeEvents['type'], data: BridgeEvents) => void;
|
|
105
105
|
'device.screenshot.receive': (reference: BinaryDataReference, metadata: {
|
|
106
106
|
width: number;
|
|
107
107
|
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":"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
|
|
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
|
+
};
|