@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.
Files changed (73) hide show
  1. package/dist/__tests__/client.test.d.ts +2 -0
  2. package/dist/__tests__/client.test.d.ts.map +1 -0
  3. package/dist/__tests__/client.test.js +81 -0
  4. package/dist/__tests__/heartbeat.test.d.ts +2 -0
  5. package/dist/__tests__/heartbeat.test.d.ts.map +1 -0
  6. package/dist/__tests__/heartbeat.test.js +37 -0
  7. package/dist/__tests__/protocol.test.d.ts +2 -0
  8. package/dist/__tests__/protocol.test.d.ts.map +1 -0
  9. package/dist/__tests__/protocol.test.js +37 -0
  10. package/dist/__tests__/rpc-peer.test.d.ts +2 -0
  11. package/dist/__tests__/rpc-peer.test.d.ts.map +1 -0
  12. package/dist/__tests__/rpc-peer.test.js +127 -0
  13. package/dist/client.d.ts +7 -14
  14. package/dist/client.d.ts.map +1 -1
  15. package/dist/client.js +96 -42
  16. package/dist/errors.d.ts +5 -0
  17. package/dist/errors.d.ts.map +1 -1
  18. package/dist/errors.js +23 -0
  19. package/dist/heartbeat.d.ts +13 -0
  20. package/dist/heartbeat.d.ts.map +1 -0
  21. package/dist/heartbeat.js +49 -0
  22. package/dist/index.d.ts +1 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +1 -0
  25. package/dist/protocol.d.ts +51 -0
  26. package/dist/protocol.d.ts.map +1 -0
  27. package/dist/protocol.js +132 -0
  28. package/dist/rpc-peer.d.ts +28 -0
  29. package/dist/rpc-peer.d.ts.map +1 -0
  30. package/dist/rpc-peer.js +146 -0
  31. package/dist/server.d.ts +1 -20
  32. package/dist/server.d.ts.map +1 -1
  33. package/dist/server.js +133 -67
  34. package/dist/shared/test-collector.d.ts +7 -3
  35. package/dist/shared/test-collector.d.ts.map +1 -1
  36. package/dist/shared/test-context.d.ts +21 -0
  37. package/dist/shared/test-context.d.ts.map +1 -0
  38. package/dist/shared/test-context.js +1 -0
  39. package/dist/shared/test-runner.d.ts +13 -0
  40. package/dist/shared/test-runner.d.ts.map +1 -1
  41. package/dist/shared.d.ts +2 -3
  42. package/dist/shared.d.ts.map +1 -1
  43. package/dist/transport.d.ts +22 -0
  44. package/dist/transport.d.ts.map +1 -0
  45. package/dist/transport.js +22 -0
  46. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  47. package/dist/websocket-client-transport.d.ts +3 -0
  48. package/dist/websocket-client-transport.d.ts.map +1 -0
  49. package/dist/websocket-client-transport.js +45 -0
  50. package/dist/websocket-server-transport.d.ts +4 -0
  51. package/dist/websocket-server-transport.d.ts.map +1 -0
  52. package/dist/websocket-server-transport.js +43 -0
  53. package/eslint.config.mjs +5 -1
  54. package/package.json +6 -5
  55. package/src/__tests__/client.test.ts +99 -0
  56. package/src/__tests__/heartbeat.test.ts +47 -0
  57. package/src/__tests__/protocol.test.ts +51 -0
  58. package/src/__tests__/rpc-peer.test.ts +181 -0
  59. package/src/client.ts +146 -57
  60. package/src/errors.ts +32 -0
  61. package/src/heartbeat.ts +67 -0
  62. package/src/index.ts +1 -0
  63. package/src/protocol.ts +233 -0
  64. package/src/rpc-peer.ts +222 -0
  65. package/src/server.ts +191 -109
  66. package/src/shared/test-collector.ts +10 -3
  67. package/src/shared/test-context.ts +21 -0
  68. package/src/shared/test-runner.ts +14 -0
  69. package/src/shared.ts +6 -2
  70. package/src/transport.ts +47 -0
  71. package/src/websocket-client-transport.ts +85 -0
  72. package/src/websocket-server-transport.ts +54 -0
  73. 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 { deserialize, serialize } from './serializer.js';
11
- import { DeviceNotRespondingError } from './errors.js';
9
+ import { AppBridgeDisconnectedError, DeviceNotRespondingError, } from './errors.js';
10
+ import { createHeartbeat } from './heartbeat.js';
12
11
  import { matchImageSnapshot } from './image-snapshot.js';
13
- export { DeviceNotRespondingError } from './errors.js';
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, ...transport } = options;
43
- const wss = await createWss(transport);
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
- const serverFunctions = {
52
- reportReady: (device) => {
53
- const conn = {
54
- device,
55
- runTests: (testPath, opts) => rpc.runTests(testPath, opts),
56
- };
57
- currentConnection = conn;
58
- bridgeLogger.debug('app ready: platform=%s model=%s', device.platform, device.model);
59
- emitter.emit('connected', conn);
60
- for (const { resolve } of connectionWaiters.splice(0))
61
- resolve(conn);
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
- emitEvent: (_, data) => {
64
- emitter.emit('event', data);
71
+ transport: createRpcTransport(transport),
72
+ onEvent: (event) => {
73
+ emitter.emit('event', event);
65
74
  },
66
- 'device.screenshot.receive': (ref) => receiveScreenshot(binaryStore, ref),
67
- 'test.matchImageSnapshot': (screenshot, testPath, opts) => matchImageSnapshot(screenshot, testPath, opts, context.platform.name),
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
- serialize,
93
- deserialize,
94
- timeout,
95
- onFunctionError: (error, functionName, args) => {
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
- onTimeoutError: (fn, args) => {
100
- throw new DeviceNotRespondingError(fn, args);
84
+ onTimeout: () => {
85
+ bridgeLogger.warn('app heartbeat timed out');
86
+ disconnect(new AppBridgeDisconnectedError('heartbeat-timeout'));
101
87
  },
102
88
  });
103
- ws.on('close', () => {
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
- currentConnection = null;
107
- emitter.emit('disconnected');
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 Error('Bridge disposed'));
207
+ reject(new AppBridgeDisconnectedError('bridge-disposed'));
144
208
  }
145
- for (const client of wss.clients)
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 TestFn = () => void | Promise<void>;
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: TestFn[];
14
- afterAll: TestFn[];
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;AAEhD,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,CAAC;CACpB,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,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,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
+ {"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;CACd,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB,0BAA0B,GAC1B,2BAA2B,GAC3B,0BAA0B,GAC1B,2BAA2B,GAC3B,2BAA2B,GAC3B,4BAA4B,CAAC;AAEjC,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,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;
@@ -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
+ };