@react-native-harness/jest 1.4.0 → 1.5.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/execute-run.d.ts.map +1 -1
- package/dist/execute-run.js +2 -1
- package/dist/harness-session.d.ts.map +1 -1
- package/dist/harness-session.js +74 -30
- package/dist/resource-lock.d.ts.map +1 -1
- package/dist/resource-lock.js +12 -2
- package/dist/toJestStatus.d.ts +4 -0
- package/dist/toJestStatus.d.ts.map +1 -0
- package/dist/toJestStatus.js +2 -0
- package/dist/toTestResult.d.ts +3 -2
- package/dist/toTestResult.d.ts.map +1 -1
- package/dist/toTestResult.js +2 -1
- package/package.json +8 -8
- package/src/execute-run.ts +2 -1
- package/src/harness-session.ts +86 -27
- package/src/resource-lock.ts +15 -2
- package/src/toJestStatus.ts +6 -0
- package/src/toTestResult.ts +5 -3
- package/dist/__tests__/bridge.test.d.ts +0 -2
- package/dist/__tests__/bridge.test.d.ts.map +0 -1
- package/dist/__tests__/bridge.test.js +0 -167
- package/dist/__tests__/client-log-handler.test.d.ts +0 -2
- package/dist/__tests__/client-log-handler.test.d.ts.map +0 -1
- package/dist/__tests__/client-log-handler.test.js +0 -306
- package/dist/__tests__/crash-monitor.test.d.ts +0 -2
- package/dist/__tests__/crash-monitor.test.d.ts.map +0 -1
- package/dist/__tests__/crash-monitor.test.js +0 -230
- package/dist/__tests__/crash-supervisor.test.d.ts +0 -2
- package/dist/__tests__/crash-supervisor.test.d.ts.map +0 -1
- package/dist/__tests__/crash-supervisor.test.js +0 -151
- package/dist/__tests__/environment-reset.test.d.ts +0 -2
- package/dist/__tests__/environment-reset.test.d.ts.map +0 -1
- package/dist/__tests__/environment-reset.test.js +0 -238
- package/dist/__tests__/errors.test.d.ts +0 -2
- package/dist/__tests__/errors.test.d.ts.map +0 -1
- package/dist/__tests__/errors.test.js +0 -98
- package/dist/__tests__/execute-run.test.d.ts +0 -2
- package/dist/__tests__/execute-run.test.d.ts.map +0 -1
- package/dist/__tests__/execute-run.test.js +0 -639
- package/dist/__tests__/fixtures/mock-platform-runner.d.ts +0 -7
- package/dist/__tests__/fixtures/mock-platform-runner.d.ts.map +0 -1
- package/dist/__tests__/fixtures/mock-platform-runner.js +0 -6
- package/dist/__tests__/format-harness-error.test.d.ts +0 -2
- package/dist/__tests__/format-harness-error.test.d.ts.map +0 -1
- package/dist/__tests__/format-harness-error.test.js +0 -27
- package/dist/__tests__/harness-cache.test.d.ts +0 -2
- package/dist/__tests__/harness-cache.test.d.ts.map +0 -1
- package/dist/__tests__/harness-cache.test.js +0 -72
- package/dist/__tests__/harness-session-signal.test.d.ts +0 -2
- package/dist/__tests__/harness-session-signal.test.d.ts.map +0 -1
- package/dist/__tests__/harness-session-signal.test.js +0 -298
- package/dist/__tests__/harness-session.test.d.ts +0 -2
- package/dist/__tests__/harness-session.test.d.ts.map +0 -1
- package/dist/__tests__/harness-session.test.js +0 -233
- package/dist/__tests__/harness.test.d.ts +0 -2
- package/dist/__tests__/harness.test.d.ts.map +0 -1
- package/dist/__tests__/harness.test.js +0 -636
- package/dist/__tests__/hook-queue.test.d.ts +0 -2
- package/dist/__tests__/hook-queue.test.d.ts.map +0 -1
- package/dist/__tests__/hook-queue.test.js +0 -56
- package/dist/__tests__/index.test.d.ts +0 -2
- package/dist/__tests__/index.test.d.ts.map +0 -1
- package/dist/__tests__/index.test.js +0 -150
- package/dist/__tests__/metro-port.test.d.ts +0 -2
- package/dist/__tests__/metro-port.test.d.ts.map +0 -1
- package/dist/__tests__/metro-port.test.js +0 -54
- package/dist/__tests__/resource-lock.test.d.ts +0 -2
- package/dist/__tests__/resource-lock.test.d.ts.map +0 -1
- package/dist/__tests__/resource-lock.test.js +0 -138
- package/dist/__tests__/run.test.d.ts +0 -2
- package/dist/__tests__/run.test.d.ts.map +0 -1
- package/dist/__tests__/run.test.js +0 -48
- package/dist/__tests__/test-file-platform-filter.test.d.ts +0 -2
- package/dist/__tests__/test-file-platform-filter.test.d.ts.map +0 -1
- package/dist/__tests__/test-file-platform-filter.test.js +0 -47
- package/dist/cli-args.test.d.ts +0 -2
- package/dist/cli-args.test.d.ts.map +0 -1
- package/dist/cli-args.test.js +0 -1
- package/dist/crash-supervisor.d.ts +0 -21
- package/dist/crash-supervisor.d.ts.map +0 -1
- package/dist/crash-supervisor.js +0 -210
- package/dist/diagnostics/__tests__/derivers.test.d.ts +0 -2
- package/dist/diagnostics/__tests__/derivers.test.d.ts.map +0 -1
- package/dist/diagnostics/__tests__/derivers.test.js +0 -248
- package/dist/diagnostics/__tests__/report.test.d.ts +0 -2
- package/dist/diagnostics/__tests__/report.test.d.ts.map +0 -1
- package/dist/diagnostics/__tests__/report.test.js +0 -97
- package/dist/event-mapper.d.ts +0 -16
- package/dist/event-mapper.d.ts.map +0 -1
- package/dist/event-mapper.js +0 -120
- package/dist/global-setup.d.ts +0 -3
- package/dist/global-setup.d.ts.map +0 -1
- package/dist/global-setup.js +0 -60
- package/dist/global-teardown.d.ts +0 -3
- package/dist/global-teardown.d.ts.map +0 -1
- package/dist/global-teardown.js +0 -11
- package/dist/harness-reporter.d.ts +0 -8
- package/dist/harness-reporter.d.ts.map +0 -1
- package/dist/harness-reporter.js +0 -12
- package/dist/harness.d.ts +0 -47
- package/dist/harness.d.ts.map +0 -1
- package/dist/harness.js +0 -619
- package/dist/jest-options.d.ts +0 -2
- package/dist/jest-options.d.ts.map +0 -1
- package/dist/jest-options.js +0 -1
- package/dist/setup.d.ts +0 -3
- package/dist/setup.d.ts.map +0 -1
- package/dist/setup.js +0 -80
- package/dist/teardown.d.ts +0 -3
- package/dist/teardown.d.ts.map +0 -1
- package/dist/teardown.js +0 -10
- package/dist/tsconfig.lib.tsbuildinfo +0 -1
- package/dist/types.d.ts +0 -17
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -1
- package/src/__tests__/bridge.test.ts +0 -224
- package/src/__tests__/client-log-handler.test.ts +0 -364
- package/src/__tests__/crash-monitor.test.ts +0 -323
- package/src/__tests__/environment-reset.test.ts +0 -308
- package/src/__tests__/errors.test.ts +0 -157
- package/src/__tests__/execute-run.test.ts +0 -849
- package/src/__tests__/format-harness-error.test.ts +0 -32
- package/src/__tests__/harness-cache.test.ts +0 -91
- package/src/__tests__/harness-session.test.ts +0 -303
- package/src/__tests__/hook-queue.test.ts +0 -77
- package/src/__tests__/index.test.ts +0 -221
- package/src/__tests__/metro-port.test.ts +0 -63
- package/src/__tests__/resource-lock.test.ts +0 -179
- package/src/__tests__/run.test.ts +0 -74
- package/src/__tests__/test-file-platform-filter.test.ts +0 -83
- package/src/diagnostics/__tests__/derivers.test.ts +0 -300
- package/src/diagnostics/__tests__/report.test.ts +0 -128
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Integration test pairing createHarnessBridge (CLI side) with
|
|
3
|
-
* connectToHarness (app side). Tests the full connection lifecycle and
|
|
4
|
-
* RPC round-trip without coupling tests to the transport internals.
|
|
5
|
-
*/
|
|
6
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
7
|
-
import { createHarnessBridge } from '@react-native-harness/bridge/server';
|
|
8
|
-
import { connectToHarness } from '@react-native-harness/bridge/client';
|
|
9
|
-
const makeContext = () => ({
|
|
10
|
-
platform: {
|
|
11
|
-
name: 'ios',
|
|
12
|
-
platformId: 'ios',
|
|
13
|
-
runner: '/dev/null',
|
|
14
|
-
config: {},
|
|
15
|
-
},
|
|
16
|
-
});
|
|
17
|
-
// ---------------------------------------------------------------------------
|
|
18
|
-
// Test setup
|
|
19
|
-
// ---------------------------------------------------------------------------
|
|
20
|
-
let bridge;
|
|
21
|
-
let bridgePort;
|
|
22
|
-
beforeEach(async () => {
|
|
23
|
-
bridge = await createHarnessBridge({ port: 0, context: makeContext() });
|
|
24
|
-
bridgePort = bridge.ws.address().port;
|
|
25
|
-
});
|
|
26
|
-
afterEach(async () => {
|
|
27
|
-
bridge.dispose();
|
|
28
|
-
// Allow the server to close cleanly.
|
|
29
|
-
await new Promise((r) => setTimeout(r, 10));
|
|
30
|
-
});
|
|
31
|
-
const connect = (callbacks = {
|
|
32
|
-
runTests: vi.fn(),
|
|
33
|
-
resetEnvironment: vi.fn(),
|
|
34
|
-
}) => connectToHarness(`ws://127.0.0.1:${bridgePort}`, callbacks);
|
|
35
|
-
const device = {
|
|
36
|
-
platform: 'ios',
|
|
37
|
-
manufacturer: 'Apple',
|
|
38
|
-
model: 'iPhone 17 Pro Simulator',
|
|
39
|
-
osVersion: '18.0',
|
|
40
|
-
};
|
|
41
|
-
// ---------------------------------------------------------------------------
|
|
42
|
-
// Tests
|
|
43
|
-
// ---------------------------------------------------------------------------
|
|
44
|
-
describe('bridge: createHarnessBridge + connectToHarness', () => {
|
|
45
|
-
describe('connection lifecycle', () => {
|
|
46
|
-
it('nextConnection() resolves once the app reports ready', async () => {
|
|
47
|
-
const connectionPromise = bridge.nextConnection();
|
|
48
|
-
const handle = await connect();
|
|
49
|
-
handle.reportReady(device);
|
|
50
|
-
const conn = await connectionPromise;
|
|
51
|
-
expect(conn.device).toEqual(device);
|
|
52
|
-
handle.disconnect();
|
|
53
|
-
});
|
|
54
|
-
it('bridge.connection is set after reportReady and cleared on disconnect', async () => {
|
|
55
|
-
const connectionPromise = bridge.nextConnection();
|
|
56
|
-
const handle = await connect();
|
|
57
|
-
handle.reportReady(device);
|
|
58
|
-
await connectionPromise;
|
|
59
|
-
expect(bridge.connection).not.toBeNull();
|
|
60
|
-
handle.disconnect();
|
|
61
|
-
// Allow close event to propagate.
|
|
62
|
-
await new Promise((r) => setTimeout(r, 20));
|
|
63
|
-
expect(bridge.connection).toBeNull();
|
|
64
|
-
});
|
|
65
|
-
it('nextConnection() returns immediately if app already connected', async () => {
|
|
66
|
-
// App connects before nextConnection() is called.
|
|
67
|
-
const handle = await connect();
|
|
68
|
-
handle.reportReady(device);
|
|
69
|
-
// Yield so the server processes the reportReady before we ask.
|
|
70
|
-
await new Promise((r) => setTimeout(r, 10));
|
|
71
|
-
const conn = await bridge.nextConnection();
|
|
72
|
-
expect(conn.device.platform).toBe('ios');
|
|
73
|
-
handle.disconnect();
|
|
74
|
-
});
|
|
75
|
-
it('emits connected / disconnected events', async () => {
|
|
76
|
-
const onConnected = vi.fn();
|
|
77
|
-
const onDisconnected = vi.fn();
|
|
78
|
-
bridge.on('connected', onConnected);
|
|
79
|
-
bridge.on('disconnected', onDisconnected);
|
|
80
|
-
const handle = await connect();
|
|
81
|
-
handle.reportReady(device);
|
|
82
|
-
await new Promise((r) => setTimeout(r, 10));
|
|
83
|
-
expect(onConnected).toHaveBeenCalledOnce();
|
|
84
|
-
handle.disconnect();
|
|
85
|
-
await new Promise((r) => setTimeout(r, 20));
|
|
86
|
-
expect(onDisconnected).toHaveBeenCalledOnce();
|
|
87
|
-
});
|
|
88
|
-
it('nextConnection() rejects when signal is already aborted', async () => {
|
|
89
|
-
const controller = new AbortController();
|
|
90
|
-
controller.abort();
|
|
91
|
-
await expect(bridge.nextConnection(controller.signal)).rejects.toMatchObject({
|
|
92
|
-
name: 'AbortError',
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
it('nextConnection() rejects when signal is aborted while waiting', async () => {
|
|
96
|
-
const controller = new AbortController();
|
|
97
|
-
const promise = bridge.nextConnection(controller.signal);
|
|
98
|
-
controller.abort();
|
|
99
|
-
await expect(promise).rejects.toMatchObject({ name: 'AbortError' });
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
describe('runTests round-trip', () => {
|
|
103
|
-
it('CLI conn.runTests() invokes the app-side runTests callback', async () => {
|
|
104
|
-
const suiteResult = {
|
|
105
|
-
name: 'suite',
|
|
106
|
-
tests: [{ name: 'passes', status: 'passed', duration: 10 }],
|
|
107
|
-
suites: [],
|
|
108
|
-
status: 'passed',
|
|
109
|
-
duration: 30,
|
|
110
|
-
};
|
|
111
|
-
const runTestsCb = vi.fn(async () => suiteResult);
|
|
112
|
-
const connectionPromise = bridge.nextConnection();
|
|
113
|
-
const handle = await connect({ runTests: runTestsCb, resetEnvironment: vi.fn() });
|
|
114
|
-
handle.reportReady(device);
|
|
115
|
-
const conn = await connectionPromise;
|
|
116
|
-
const result = await conn.runTests('example.ts', {
|
|
117
|
-
runner: '/runner.js',
|
|
118
|
-
});
|
|
119
|
-
expect(runTestsCb).toHaveBeenCalledWith('example.ts', expect.objectContaining({ runner: '/runner.js' }));
|
|
120
|
-
expect(result.tests[0].name).toBe('passes');
|
|
121
|
-
handle.disconnect();
|
|
122
|
-
});
|
|
123
|
-
it('rejects pending app calls when a newer client replaces the session', async () => {
|
|
124
|
-
const firstHandle = await connect({
|
|
125
|
-
runTests: async () => await new Promise(() => undefined),
|
|
126
|
-
resetEnvironment: vi.fn(),
|
|
127
|
-
});
|
|
128
|
-
firstHandle.reportReady(device);
|
|
129
|
-
const firstConnection = await bridge.nextConnection();
|
|
130
|
-
const pendingRun = firstConnection.runTests('example.ts', {
|
|
131
|
-
runner: '/runner.js',
|
|
132
|
-
});
|
|
133
|
-
const pendingRunAssertion = expect(pendingRun).rejects.toThrow('The app bridge was replaced by a newer app connection.');
|
|
134
|
-
const secondHandle = await connect();
|
|
135
|
-
secondHandle.reportReady({
|
|
136
|
-
...device,
|
|
137
|
-
model: 'iPhone 17 Pro Replacement',
|
|
138
|
-
});
|
|
139
|
-
await pendingRunAssertion;
|
|
140
|
-
await new Promise((r) => setTimeout(r, 20));
|
|
141
|
-
expect(bridge.connection?.device.model).toBe('iPhone 17 Pro Replacement');
|
|
142
|
-
secondHandle.disconnect();
|
|
143
|
-
firstHandle.disconnect();
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
describe('bridge events', () => {
|
|
147
|
-
it('emitEvent on app side fires the event listener on bridge', async () => {
|
|
148
|
-
const onEvent = vi.fn();
|
|
149
|
-
bridge.on('event', onEvent);
|
|
150
|
-
const connectionPromise = bridge.nextConnection();
|
|
151
|
-
const handle = await connect();
|
|
152
|
-
handle.reportReady(device);
|
|
153
|
-
await connectionPromise;
|
|
154
|
-
handle.emitEvent({ type: 'collection-started', file: 'example.ts' });
|
|
155
|
-
await new Promise((r) => setTimeout(r, 10));
|
|
156
|
-
expect(onEvent).toHaveBeenCalledWith(expect.objectContaining({ type: 'collection-started', file: 'example.ts' }));
|
|
157
|
-
handle.disconnect();
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
describe('dispose', () => {
|
|
161
|
-
it('rejects pending nextConnection() waiters', async () => {
|
|
162
|
-
const pending = bridge.nextConnection();
|
|
163
|
-
bridge.dispose();
|
|
164
|
-
await expect(pending).rejects.toThrow('The app bridge was disposed before the test file finished running.');
|
|
165
|
-
});
|
|
166
|
-
});
|
|
167
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client-log-handler.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/client-log-handler.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
-
import { createClientLogCollector, formatClientLogMessage, formatClientLogEntry, } from '../client-log-handler.js';
|
|
3
|
-
describe('client-log-handler', () => {
|
|
4
|
-
beforeEach(() => {
|
|
5
|
-
vi.clearAllMocks();
|
|
6
|
-
});
|
|
7
|
-
describe('formatClientLogMessage', () => {
|
|
8
|
-
it('should format a single string', () => {
|
|
9
|
-
const result = formatClientLogMessage(['Hello, world!']);
|
|
10
|
-
expect(result).toBe('Hello, world!');
|
|
11
|
-
});
|
|
12
|
-
it('should join multiple strings with spaces', () => {
|
|
13
|
-
const result = formatClientLogMessage(['Hello', 'world', '!']);
|
|
14
|
-
expect(result).toBe('Hello world !');
|
|
15
|
-
});
|
|
16
|
-
it('should format objects', () => {
|
|
17
|
-
const result = formatClientLogMessage([{ key: 'value' }]);
|
|
18
|
-
// util.format uses inspect-style output for objects
|
|
19
|
-
expect(result).toContain('key');
|
|
20
|
-
expect(result).toContain('value');
|
|
21
|
-
});
|
|
22
|
-
it('should format arrays', () => {
|
|
23
|
-
const result = formatClientLogMessage([[1, 2, 3]]);
|
|
24
|
-
expect(result).toContain('1');
|
|
25
|
-
expect(result).toContain('2');
|
|
26
|
-
expect(result).toContain('3');
|
|
27
|
-
});
|
|
28
|
-
it('should handle mixed types', () => {
|
|
29
|
-
const result = formatClientLogMessage([
|
|
30
|
-
'Message:',
|
|
31
|
-
{ count: 42 },
|
|
32
|
-
'items',
|
|
33
|
-
]);
|
|
34
|
-
expect(result).toContain('Message:');
|
|
35
|
-
expect(result).toContain('count');
|
|
36
|
-
expect(result).toContain('42');
|
|
37
|
-
expect(result).toContain('items');
|
|
38
|
-
});
|
|
39
|
-
it('should format numbers', () => {
|
|
40
|
-
const result = formatClientLogMessage([123, 456]);
|
|
41
|
-
expect(result).toBe('123 456');
|
|
42
|
-
});
|
|
43
|
-
it('should format booleans', () => {
|
|
44
|
-
const result = formatClientLogMessage([true, false]);
|
|
45
|
-
expect(result).toBe('true false');
|
|
46
|
-
});
|
|
47
|
-
it('should format null and undefined', () => {
|
|
48
|
-
const result = formatClientLogMessage([null, undefined]);
|
|
49
|
-
expect(result).toBe('null undefined');
|
|
50
|
-
});
|
|
51
|
-
it('should handle empty array', () => {
|
|
52
|
-
const result = formatClientLogMessage([]);
|
|
53
|
-
expect(result).toBe('');
|
|
54
|
-
});
|
|
55
|
-
describe('printf-style format specifiers', () => {
|
|
56
|
-
it('should handle %s string substitution', () => {
|
|
57
|
-
const result = formatClientLogMessage(['%s world', 'hello']);
|
|
58
|
-
expect(result).toBe('hello world');
|
|
59
|
-
});
|
|
60
|
-
it('should handle %d integer substitution', () => {
|
|
61
|
-
const result = formatClientLogMessage(['Count: %d', 42]);
|
|
62
|
-
expect(result).toBe('Count: 42');
|
|
63
|
-
});
|
|
64
|
-
it('should handle %i integer substitution', () => {
|
|
65
|
-
const result = formatClientLogMessage(['Value: %i', 123]);
|
|
66
|
-
expect(result).toBe('Value: 123');
|
|
67
|
-
});
|
|
68
|
-
it('should handle %f float substitution', () => {
|
|
69
|
-
const result = formatClientLogMessage(['Pi: %f', 3.14159]);
|
|
70
|
-
expect(result).toContain('3.14159');
|
|
71
|
-
});
|
|
72
|
-
it('should handle multiple substitutions', () => {
|
|
73
|
-
const result = formatClientLogMessage([
|
|
74
|
-
'Hello %s, you have %d messages',
|
|
75
|
-
'Alice',
|
|
76
|
-
5,
|
|
77
|
-
]);
|
|
78
|
-
expect(result).toBe('Hello Alice, you have 5 messages');
|
|
79
|
-
});
|
|
80
|
-
it('should handle %j JSON substitution', () => {
|
|
81
|
-
const result = formatClientLogMessage(['Data: %j', { key: 'value' }]);
|
|
82
|
-
expect(result).toBe('Data: {"key":"value"}');
|
|
83
|
-
});
|
|
84
|
-
it('should handle %o object substitution', () => {
|
|
85
|
-
const result = formatClientLogMessage(['Object: %o', { a: 1 }]);
|
|
86
|
-
// %o produces inspect-style output, just check it contains the key
|
|
87
|
-
expect(result).toContain('a');
|
|
88
|
-
});
|
|
89
|
-
it('should handle %% as literal percent when substituting', () => {
|
|
90
|
-
// %% is only converted to % when there are substitutions
|
|
91
|
-
const result = formatClientLogMessage(['%s is 100%% complete', 'Task']);
|
|
92
|
-
expect(result).toBe('Task is 100% complete');
|
|
93
|
-
});
|
|
94
|
-
it('should append extra arguments after substitution', () => {
|
|
95
|
-
const result = formatClientLogMessage([
|
|
96
|
-
'Hello %s',
|
|
97
|
-
'world',
|
|
98
|
-
'extra',
|
|
99
|
-
'args',
|
|
100
|
-
]);
|
|
101
|
-
expect(result).toBe('Hello world extra args');
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
describe('formatClientLogEntry', () => {
|
|
106
|
-
it('should format log level event', () => {
|
|
107
|
-
const event = {
|
|
108
|
-
type: 'client_log',
|
|
109
|
-
level: 'log',
|
|
110
|
-
data: ['Test message'],
|
|
111
|
-
};
|
|
112
|
-
const result = formatClientLogEntry(event);
|
|
113
|
-
expect(result).toEqual({
|
|
114
|
-
message: 'Test message',
|
|
115
|
-
origin: '',
|
|
116
|
-
type: 'log',
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
it('should format error level event', () => {
|
|
120
|
-
const event = {
|
|
121
|
-
type: 'client_log',
|
|
122
|
-
level: 'error',
|
|
123
|
-
data: ['Error occurred'],
|
|
124
|
-
};
|
|
125
|
-
const result = formatClientLogEntry(event);
|
|
126
|
-
expect(result).toEqual({
|
|
127
|
-
message: 'Error occurred',
|
|
128
|
-
origin: '',
|
|
129
|
-
type: 'error',
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
it('should format warn level event', () => {
|
|
133
|
-
const event = {
|
|
134
|
-
type: 'client_log',
|
|
135
|
-
level: 'warn',
|
|
136
|
-
data: ['Warning message'],
|
|
137
|
-
};
|
|
138
|
-
const result = formatClientLogEntry(event);
|
|
139
|
-
expect(result).toEqual({
|
|
140
|
-
message: 'Warning message',
|
|
141
|
-
origin: '',
|
|
142
|
-
type: 'warn',
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
it('should format info level event', () => {
|
|
146
|
-
const event = {
|
|
147
|
-
type: 'client_log',
|
|
148
|
-
level: 'info',
|
|
149
|
-
data: ['Info message'],
|
|
150
|
-
};
|
|
151
|
-
const result = formatClientLogEntry(event);
|
|
152
|
-
expect(result).toEqual({
|
|
153
|
-
message: 'Info message',
|
|
154
|
-
origin: '',
|
|
155
|
-
type: 'info',
|
|
156
|
-
});
|
|
157
|
-
});
|
|
158
|
-
it('should format debug level event', () => {
|
|
159
|
-
const event = {
|
|
160
|
-
type: 'client_log',
|
|
161
|
-
level: 'debug',
|
|
162
|
-
data: ['Debug message'],
|
|
163
|
-
};
|
|
164
|
-
const result = formatClientLogEntry(event);
|
|
165
|
-
expect(result).toEqual({
|
|
166
|
-
message: 'Debug message',
|
|
167
|
-
origin: '',
|
|
168
|
-
type: 'debug',
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
it('should format trace level event', () => {
|
|
172
|
-
const event = {
|
|
173
|
-
type: 'client_log',
|
|
174
|
-
level: 'trace',
|
|
175
|
-
data: ['Trace message'],
|
|
176
|
-
};
|
|
177
|
-
const result = formatClientLogEntry(event);
|
|
178
|
-
expect(result).toEqual({
|
|
179
|
-
message: 'Trace message',
|
|
180
|
-
origin: '',
|
|
181
|
-
type: 'log',
|
|
182
|
-
});
|
|
183
|
-
});
|
|
184
|
-
it('should handle multiple data items', () => {
|
|
185
|
-
const event = {
|
|
186
|
-
type: 'client_log',
|
|
187
|
-
level: 'log',
|
|
188
|
-
data: ['User:', { id: 1, name: 'Test' }],
|
|
189
|
-
};
|
|
190
|
-
const result = formatClientLogEntry(event);
|
|
191
|
-
expect(result?.message).toContain('User:');
|
|
192
|
-
expect(result?.message).toContain('id');
|
|
193
|
-
expect(result?.message).toContain('Test');
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
describe('createClientLogCollector', () => {
|
|
197
|
-
it('collects client_log events and flushes them', () => {
|
|
198
|
-
const collector = createClientLogCollector();
|
|
199
|
-
const event = {
|
|
200
|
-
type: 'client_log',
|
|
201
|
-
level: 'log',
|
|
202
|
-
data: ['Test message'],
|
|
203
|
-
};
|
|
204
|
-
collector.handleEvent(event);
|
|
205
|
-
expect(collector.flush()).toEqual([
|
|
206
|
-
{
|
|
207
|
-
message: 'Test message',
|
|
208
|
-
origin: '',
|
|
209
|
-
type: 'log',
|
|
210
|
-
},
|
|
211
|
-
]);
|
|
212
|
-
});
|
|
213
|
-
it('returns an empty array for non-client_log events', () => {
|
|
214
|
-
const collector = createClientLogCollector();
|
|
215
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
216
|
-
const event = { type: 'bundle_build_started' };
|
|
217
|
-
collector.handleEvent(event);
|
|
218
|
-
expect(collector.flush()).toEqual([]);
|
|
219
|
-
});
|
|
220
|
-
it('collects error level logs', () => {
|
|
221
|
-
const collector = createClientLogCollector();
|
|
222
|
-
const event = {
|
|
223
|
-
type: 'client_log',
|
|
224
|
-
level: 'error',
|
|
225
|
-
data: ['Something went wrong'],
|
|
226
|
-
};
|
|
227
|
-
collector.handleEvent(event);
|
|
228
|
-
expect(collector.flush()).toEqual([
|
|
229
|
-
{
|
|
230
|
-
message: 'Something went wrong',
|
|
231
|
-
origin: '',
|
|
232
|
-
type: 'error',
|
|
233
|
-
},
|
|
234
|
-
]);
|
|
235
|
-
});
|
|
236
|
-
it('collects warn level logs', () => {
|
|
237
|
-
const collector = createClientLogCollector();
|
|
238
|
-
const event = {
|
|
239
|
-
type: 'client_log',
|
|
240
|
-
level: 'warn',
|
|
241
|
-
data: ['Deprecation warning'],
|
|
242
|
-
};
|
|
243
|
-
collector.handleEvent(event);
|
|
244
|
-
expect(collector.flush()).toEqual([
|
|
245
|
-
{
|
|
246
|
-
message: 'Deprecation warning',
|
|
247
|
-
origin: '',
|
|
248
|
-
type: 'warn',
|
|
249
|
-
},
|
|
250
|
-
]);
|
|
251
|
-
});
|
|
252
|
-
it('flush clears the buffer', () => {
|
|
253
|
-
const collector = createClientLogCollector();
|
|
254
|
-
collector.handleEvent({
|
|
255
|
-
type: 'client_log',
|
|
256
|
-
level: 'info',
|
|
257
|
-
data: ['Listener test'],
|
|
258
|
-
});
|
|
259
|
-
expect(collector.flush()).toEqual([
|
|
260
|
-
{
|
|
261
|
-
message: 'Listener test',
|
|
262
|
-
origin: '',
|
|
263
|
-
type: 'info',
|
|
264
|
-
},
|
|
265
|
-
]);
|
|
266
|
-
expect(collector.flush()).toEqual([]);
|
|
267
|
-
});
|
|
268
|
-
it('ignores non-client_log events', () => {
|
|
269
|
-
const collector = createClientLogCollector();
|
|
270
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
271
|
-
const event = { type: 'initialize_done' };
|
|
272
|
-
collector.handleEvent(event);
|
|
273
|
-
expect(collector.flush()).toEqual([]);
|
|
274
|
-
});
|
|
275
|
-
it('ignores group events', () => {
|
|
276
|
-
const collector = createClientLogCollector();
|
|
277
|
-
const event = {
|
|
278
|
-
type: 'client_log',
|
|
279
|
-
level: 'group',
|
|
280
|
-
data: ['Group label'],
|
|
281
|
-
};
|
|
282
|
-
collector.handleEvent(event);
|
|
283
|
-
expect(collector.flush()).toEqual([]);
|
|
284
|
-
});
|
|
285
|
-
it('ignores groupCollapsed events', () => {
|
|
286
|
-
const collector = createClientLogCollector();
|
|
287
|
-
const event = {
|
|
288
|
-
type: 'client_log',
|
|
289
|
-
level: 'groupCollapsed',
|
|
290
|
-
data: ['Collapsed'],
|
|
291
|
-
};
|
|
292
|
-
collector.handleEvent(event);
|
|
293
|
-
expect(collector.flush()).toEqual([]);
|
|
294
|
-
});
|
|
295
|
-
it('ignores groupEnd events', () => {
|
|
296
|
-
const collector = createClientLogCollector();
|
|
297
|
-
const event = {
|
|
298
|
-
type: 'client_log',
|
|
299
|
-
level: 'groupEnd',
|
|
300
|
-
data: [],
|
|
301
|
-
};
|
|
302
|
-
collector.handleEvent(event);
|
|
303
|
-
expect(collector.flush()).toEqual([]);
|
|
304
|
-
});
|
|
305
|
-
});
|
|
306
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crash-monitor.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/crash-monitor.test.ts"],"names":[],"mappings":""}
|