@matter/testing 0.11.0-alpha.0-20241027-de3c9d280
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/LICENSE +201 -0
- package/README.md +40 -0
- package/bin/test.js +7 -0
- package/chip/Dockerfile +23 -0
- package/dist/cjs/chip/pics-file.d.ts +20 -0
- package/dist/cjs/chip/pics-file.d.ts.map +1 -0
- package/dist/cjs/chip/pics-file.js +79 -0
- package/dist/cjs/chip/pics-file.js.map +6 -0
- package/dist/cjs/chip.d.ts +60 -0
- package/dist/cjs/chip.d.ts.map +1 -0
- package/dist/cjs/chip.js +306 -0
- package/dist/cjs/chip.js.map +6 -0
- package/dist/cjs/cli.d.ts +9 -0
- package/dist/cjs/cli.d.ts.map +1 -0
- package/dist/cjs/cli.js +115 -0
- package/dist/cjs/cli.js.map +6 -0
- package/dist/cjs/failure-detail.d.ts +19 -0
- package/dist/cjs/failure-detail.d.ts.map +1 -0
- package/dist/cjs/failure-detail.js +143 -0
- package/dist/cjs/failure-detail.js.map +6 -0
- package/dist/cjs/global-declarations.d.ts +38 -0
- package/dist/cjs/global-declarations.d.ts.map +1 -0
- package/dist/cjs/global-declarations.js +8 -0
- package/dist/cjs/global-declarations.js.map +6 -0
- package/dist/cjs/global-definitions.d.ts +7 -0
- package/dist/cjs/global-definitions.d.ts.map +1 -0
- package/dist/cjs/global-definitions.js +50 -0
- package/dist/cjs/global-definitions.js.map +6 -0
- package/dist/cjs/index.d.ts +10 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +27 -0
- package/dist/cjs/index.js.map +6 -0
- package/dist/cjs/mocha.d.ts +36 -0
- package/dist/cjs/mocha.d.ts.map +1 -0
- package/dist/cjs/mocha.js +155 -0
- package/dist/cjs/mocha.js.map +6 -0
- package/dist/cjs/mocharc.cjs +68 -0
- package/dist/cjs/mocharc.d.cts +7 -0
- package/dist/cjs/mocks/crypto.d.ts +7 -0
- package/dist/cjs/mocks/crypto.d.ts.map +1 -0
- package/dist/cjs/mocks/crypto.js +79 -0
- package/dist/cjs/mocks/crypto.js.map +6 -0
- package/dist/cjs/mocks/environment.d.ts +7 -0
- package/dist/cjs/mocks/environment.d.ts.map +1 -0
- package/dist/cjs/mocks/environment.js +7 -0
- package/dist/cjs/mocks/environment.js.map +6 -0
- package/dist/cjs/mocks/index.d.ts +10 -0
- package/dist/cjs/mocks/index.d.ts.map +1 -0
- package/dist/cjs/mocks/index.js +27 -0
- package/dist/cjs/mocks/index.js.map +6 -0
- package/dist/cjs/mocks/logging.d.ts +28 -0
- package/dist/cjs/mocks/logging.d.ts.map +1 -0
- package/dist/cjs/mocks/logging.js +93 -0
- package/dist/cjs/mocks/logging.js.map +6 -0
- package/dist/cjs/mocks/time.d.ts +88 -0
- package/dist/cjs/mocks/time.d.ts.map +1 -0
- package/dist/cjs/mocks/time.js +251 -0
- package/dist/cjs/mocks/time.js.map +6 -0
- package/dist/cjs/node.d.ts +9 -0
- package/dist/cjs/node.d.ts.map +1 -0
- package/dist/cjs/node.js +112 -0
- package/dist/cjs/node.js.map +6 -0
- package/dist/cjs/options.d.ts +19 -0
- package/dist/cjs/options.d.ts.map +1 -0
- package/dist/cjs/options.js +62 -0
- package/dist/cjs/options.js.map +6 -0
- package/dist/cjs/package.json +6 -0
- package/dist/cjs/reporter.d.ts +50 -0
- package/dist/cjs/reporter.d.ts.map +1 -0
- package/dist/cjs/reporter.js +137 -0
- package/dist/cjs/reporter.js.map +6 -0
- package/dist/cjs/runner.d.ts +21 -0
- package/dist/cjs/runner.d.ts.map +1 -0
- package/dist/cjs/runner.js +113 -0
- package/dist/cjs/runner.js.map +6 -0
- package/dist/cjs/util/docker.d.ts +27 -0
- package/dist/cjs/util/docker.d.ts.map +1 -0
- package/dist/cjs/util/docker.js +163 -0
- package/dist/cjs/util/docker.js.map +6 -0
- package/dist/cjs/util/files.d.ts +7 -0
- package/dist/cjs/util/files.d.ts.map +1 -0
- package/dist/cjs/util/files.js +42 -0
- package/dist/cjs/util/files.js.map +6 -0
- package/dist/cjs/util/node-shims.d.ts +7 -0
- package/dist/cjs/util/node-shims.d.ts.map +1 -0
- package/dist/cjs/util/node-shims.js +12 -0
- package/dist/cjs/util/node-shims.js.map +6 -0
- package/dist/cjs/util/trace-unhandled.d.ts +9 -0
- package/dist/cjs/util/trace-unhandled.d.ts.map +1 -0
- package/dist/cjs/util/trace-unhandled.js +48 -0
- package/dist/cjs/util/trace-unhandled.js.map +6 -0
- package/dist/cjs/util/wtf.d.ts +10 -0
- package/dist/cjs/util/wtf.d.ts.map +1 -0
- package/dist/cjs/util/wtf.js +53 -0
- package/dist/cjs/util/wtf.js.map +6 -0
- package/dist/cjs/web.d.ts +8 -0
- package/dist/cjs/web.d.ts.map +1 -0
- package/dist/cjs/web.js +165 -0
- package/dist/cjs/web.js.map +6 -0
- package/dist/esm/chip/pics-file.d.ts +20 -0
- package/dist/esm/chip/pics-file.d.ts.map +1 -0
- package/dist/esm/chip/pics-file.js +59 -0
- package/dist/esm/chip/pics-file.js.map +6 -0
- package/dist/esm/chip.d.ts +60 -0
- package/dist/esm/chip.d.ts.map +1 -0
- package/dist/esm/chip.js +286 -0
- package/dist/esm/chip.js.map +6 -0
- package/dist/esm/cli.d.ts +9 -0
- package/dist/esm/cli.d.ts.map +1 -0
- package/dist/esm/cli.js +85 -0
- package/dist/esm/cli.js.map +6 -0
- package/dist/esm/failure-detail.d.ts +19 -0
- package/dist/esm/failure-detail.d.ts.map +1 -0
- package/dist/esm/failure-detail.js +113 -0
- package/dist/esm/failure-detail.js.map +6 -0
- package/dist/esm/global-declarations.d.ts +38 -0
- package/dist/esm/global-declarations.d.ts.map +1 -0
- package/dist/esm/global-declarations.js +7 -0
- package/dist/esm/global-declarations.js.map +6 -0
- package/dist/esm/global-definitions.d.ts +7 -0
- package/dist/esm/global-definitions.d.ts.map +1 -0
- package/dist/esm/global-definitions.js +27 -0
- package/dist/esm/global-definitions.js.map +6 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +6 -0
- package/dist/esm/mocha.d.ts +36 -0
- package/dist/esm/mocha.d.ts.map +1 -0
- package/dist/esm/mocha.js +135 -0
- package/dist/esm/mocha.js.map +6 -0
- package/dist/esm/mocharc.cjs +68 -0
- package/dist/esm/mocharc.d.cts +7 -0
- package/dist/esm/mocks/crypto.d.ts +7 -0
- package/dist/esm/mocks/crypto.d.ts.map +1 -0
- package/dist/esm/mocks/crypto.js +59 -0
- package/dist/esm/mocks/crypto.js.map +6 -0
- package/dist/esm/mocks/environment.d.ts +7 -0
- package/dist/esm/mocks/environment.d.ts.map +1 -0
- package/dist/esm/mocks/environment.js +6 -0
- package/dist/esm/mocks/environment.js.map +6 -0
- package/dist/esm/mocks/index.d.ts +10 -0
- package/dist/esm/mocks/index.d.ts.map +1 -0
- package/dist/esm/mocks/index.js +10 -0
- package/dist/esm/mocks/index.js.map +6 -0
- package/dist/esm/mocks/logging.d.ts +28 -0
- package/dist/esm/mocks/logging.d.ts.map +1 -0
- package/dist/esm/mocks/logging.js +63 -0
- package/dist/esm/mocks/logging.js.map +6 -0
- package/dist/esm/mocks/time.d.ts +88 -0
- package/dist/esm/mocks/time.d.ts.map +1 -0
- package/dist/esm/mocks/time.js +231 -0
- package/dist/esm/mocks/time.js.map +6 -0
- package/dist/esm/node.d.ts +9 -0
- package/dist/esm/node.d.ts.map +1 -0
- package/dist/esm/node.js +82 -0
- package/dist/esm/node.js.map +6 -0
- package/dist/esm/options.d.ts +19 -0
- package/dist/esm/options.d.ts.map +1 -0
- package/dist/esm/options.js +42 -0
- package/dist/esm/options.js.map +6 -0
- package/dist/esm/package.json +6 -0
- package/dist/esm/reporter.d.ts +50 -0
- package/dist/esm/reporter.d.ts.map +1 -0
- package/dist/esm/reporter.js +107 -0
- package/dist/esm/reporter.js.map +6 -0
- package/dist/esm/runner.d.ts +21 -0
- package/dist/esm/runner.d.ts.map +1 -0
- package/dist/esm/runner.js +83 -0
- package/dist/esm/runner.js.map +6 -0
- package/dist/esm/util/docker.d.ts +27 -0
- package/dist/esm/util/docker.d.ts.map +1 -0
- package/dist/esm/util/docker.js +133 -0
- package/dist/esm/util/docker.js.map +6 -0
- package/dist/esm/util/files.d.ts +7 -0
- package/dist/esm/util/files.d.ts.map +1 -0
- package/dist/esm/util/files.js +22 -0
- package/dist/esm/util/files.js.map +6 -0
- package/dist/esm/util/node-shims.d.ts +7 -0
- package/dist/esm/util/node-shims.d.ts.map +1 -0
- package/dist/esm/util/node-shims.js +11 -0
- package/dist/esm/util/node-shims.js.map +6 -0
- package/dist/esm/util/trace-unhandled.d.ts +9 -0
- package/dist/esm/util/trace-unhandled.d.ts.map +1 -0
- package/dist/esm/util/trace-unhandled.js +18 -0
- package/dist/esm/util/trace-unhandled.js.map +6 -0
- package/dist/esm/util/wtf.d.ts +10 -0
- package/dist/esm/util/wtf.d.ts.map +1 -0
- package/dist/esm/util/wtf.js +23 -0
- package/dist/esm/util/wtf.js.map +6 -0
- package/dist/esm/web.d.ts +8 -0
- package/dist/esm/web.d.ts.map +1 -0
- package/dist/esm/web.js +135 -0
- package/dist/esm/web.js.map +6 -0
- package/package.json +72 -0
- package/src/chip/pics-file.ts +71 -0
- package/src/chip/pics.properties +52 -0
- package/src/chip.ts +420 -0
- package/src/cli.ts +122 -0
- package/src/failure-detail.ts +126 -0
- package/src/global-declarations.ts +50 -0
- package/src/global-definitions.ts +35 -0
- package/src/index.html +16 -0
- package/src/index.ts +10 -0
- package/src/mocha.ts +162 -0
- package/src/mocharc.cjs +68 -0
- package/src/mocharc.d.cts +7 -0
- package/src/mocks/crypto.ts +70 -0
- package/src/mocks/environment.ts +7 -0
- package/src/mocks/index.ts +10 -0
- package/src/mocks/logging.ts +99 -0
- package/src/mocks/time.ts +295 -0
- package/src/node.ts +106 -0
- package/src/options.ts +58 -0
- package/src/reporter.ts +144 -0
- package/src/runner.ts +92 -0
- package/src/tsconfig.json +12 -0
- package/src/util/docker.ts +176 -0
- package/src/util/files.ts +25 -0
- package/src/util/node-shims.ts +13 -0
- package/src/util/trace-unhandled.ts +17 -0
- package/src/util/wtf.ts +25 -0
- package/src/web.ts +174 -0
- package/test/mocks/MockTimeTest.ts +113 -0
- package/test/tsconfig.json +18 -0
- package/tsconfig.json +5 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
class MockTimer {
|
|
7
|
+
constructor(mockTime, durationMs, callback) {
|
|
8
|
+
this.mockTime = mockTime;
|
|
9
|
+
this.durationMs = durationMs;
|
|
10
|
+
if (this instanceof MockInterval) {
|
|
11
|
+
this.callback = callback;
|
|
12
|
+
} else {
|
|
13
|
+
this.callback = () => {
|
|
14
|
+
this.isRunning = false;
|
|
15
|
+
callback();
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
name = "Test";
|
|
20
|
+
systemId = 0;
|
|
21
|
+
intervalMs = 0;
|
|
22
|
+
isPeriodic = false;
|
|
23
|
+
isRunning = false;
|
|
24
|
+
callback;
|
|
25
|
+
start() {
|
|
26
|
+
this.mockTime.callbackAtTime(this.mockTime.nowMs() + this.durationMs, this.callback);
|
|
27
|
+
this.isRunning = true;
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
stop() {
|
|
31
|
+
this.mockTime.removeCallback(this.callback);
|
|
32
|
+
this.isRunning = false;
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
class MockInterval extends MockTimer {
|
|
37
|
+
constructor(mockTime, durationMs, callback) {
|
|
38
|
+
const intervalCallback = async () => {
|
|
39
|
+
mockTime.callbackAtTime(mockTime.nowMs() + durationMs, intervalCallback);
|
|
40
|
+
await callback();
|
|
41
|
+
};
|
|
42
|
+
super(mockTime, durationMs, intervalCallback);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function isAsync(fn) {
|
|
46
|
+
return fn.constructor.name === "AsyncFunction";
|
|
47
|
+
}
|
|
48
|
+
let callbacks = new Array();
|
|
49
|
+
let nowMs = 0;
|
|
50
|
+
let real = void 0;
|
|
51
|
+
let enabled = true;
|
|
52
|
+
const MockTime = {
|
|
53
|
+
get activeImplementation() {
|
|
54
|
+
return enabled ? this : real ?? this;
|
|
55
|
+
},
|
|
56
|
+
disable() {
|
|
57
|
+
enabled = false;
|
|
58
|
+
reinstallTime?.();
|
|
59
|
+
},
|
|
60
|
+
enable() {
|
|
61
|
+
enabled = true;
|
|
62
|
+
reinstallTime?.();
|
|
63
|
+
},
|
|
64
|
+
reset(time = 0) {
|
|
65
|
+
callbacks = [];
|
|
66
|
+
nowMs = time;
|
|
67
|
+
reinstallTime?.();
|
|
68
|
+
},
|
|
69
|
+
now() {
|
|
70
|
+
return new Date(nowMs);
|
|
71
|
+
},
|
|
72
|
+
nowMs() {
|
|
73
|
+
return nowMs;
|
|
74
|
+
},
|
|
75
|
+
getTimer(_name, durationMs, callback) {
|
|
76
|
+
return new MockTimer(this, durationMs, callback);
|
|
77
|
+
},
|
|
78
|
+
getPeriodicTimer(_name, intervalMs, callback) {
|
|
79
|
+
return new MockInterval(this, intervalMs, callback);
|
|
80
|
+
},
|
|
81
|
+
/**
|
|
82
|
+
* Resolve a promise with time dependency.
|
|
83
|
+
*
|
|
84
|
+
* Moves time forward until the promise resolves.
|
|
85
|
+
*/
|
|
86
|
+
async resolve(promise) {
|
|
87
|
+
let resolved = false;
|
|
88
|
+
let result;
|
|
89
|
+
let error;
|
|
90
|
+
promise.then(
|
|
91
|
+
(r) => {
|
|
92
|
+
resolved = true;
|
|
93
|
+
result = r;
|
|
94
|
+
},
|
|
95
|
+
(e) => {
|
|
96
|
+
resolved = true;
|
|
97
|
+
error = e;
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
let timeAdvanced = 0;
|
|
101
|
+
while (!resolved) {
|
|
102
|
+
await new Promise((resolve) => setTimeout(() => resolve(), 0));
|
|
103
|
+
if (resolved) {
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
if (timeAdvanced > 60 * 60 * 1e3) {
|
|
107
|
+
throw new Error(
|
|
108
|
+
"Mock timeout: Promise did not resolve within one (virtual) hour, probably not going to happen"
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
await this.advance(1e3);
|
|
112
|
+
timeAdvanced += 1e3;
|
|
113
|
+
if (resolved) {
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
await this.yield();
|
|
117
|
+
}
|
|
118
|
+
if (error !== void 0) {
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
121
|
+
return result;
|
|
122
|
+
},
|
|
123
|
+
/**
|
|
124
|
+
* Move time forward. Runs tasks scheduled during this interval.
|
|
125
|
+
*/
|
|
126
|
+
async advance(ms) {
|
|
127
|
+
const newTimeMs = nowMs + ms;
|
|
128
|
+
while (true) {
|
|
129
|
+
if (callbacks.length === 0) break;
|
|
130
|
+
const { atMs, callback } = callbacks[0];
|
|
131
|
+
if (atMs > newTimeMs) break;
|
|
132
|
+
callbacks.shift();
|
|
133
|
+
nowMs = atMs;
|
|
134
|
+
await callback();
|
|
135
|
+
}
|
|
136
|
+
nowMs = newTimeMs;
|
|
137
|
+
},
|
|
138
|
+
/**
|
|
139
|
+
* Yield to scheduled microtasks. This means that all code paths waiting
|
|
140
|
+
* on resolved promises (including await) will proceed before this method
|
|
141
|
+
* returns.
|
|
142
|
+
*/
|
|
143
|
+
async yield() {
|
|
144
|
+
await Promise.resolve();
|
|
145
|
+
},
|
|
146
|
+
/**
|
|
147
|
+
* Due to its implementation, an older version of yield() would actually
|
|
148
|
+
* yield to microtasks three times. Our tests then depended on this
|
|
149
|
+
* functionality -- one yield could trigger up to three nested awaits.
|
|
150
|
+
*
|
|
151
|
+
* To make this clear, the version of yield() that emulates old behavior
|
|
152
|
+
* is called "yield3".
|
|
153
|
+
*/
|
|
154
|
+
async yield3() {
|
|
155
|
+
await Promise.resolve();
|
|
156
|
+
await Promise.resolve();
|
|
157
|
+
await Promise.resolve();
|
|
158
|
+
},
|
|
159
|
+
/**
|
|
160
|
+
* Hook a method and invoke a callback just before the method completes.
|
|
161
|
+
* Unhooks after completion.
|
|
162
|
+
*
|
|
163
|
+
* Handles both synchronous and asynchronous methods. The interceptor
|
|
164
|
+
* should match the async-ness of the intercepted method.
|
|
165
|
+
*
|
|
166
|
+
* The interceptor can optionally access and/or replace the resolve/reject
|
|
167
|
+
* value.
|
|
168
|
+
*/
|
|
169
|
+
interceptOnce(obj, method, interceptor) {
|
|
170
|
+
const original = obj[method];
|
|
171
|
+
if (!original) {
|
|
172
|
+
throw new Error(`Interception method ${method} is not present`);
|
|
173
|
+
}
|
|
174
|
+
let result;
|
|
175
|
+
if (isAsync(interceptor)) {
|
|
176
|
+
obj[method] = async function(...args) {
|
|
177
|
+
try {
|
|
178
|
+
const resolve = await original.apply(this, args);
|
|
179
|
+
result = { resolve };
|
|
180
|
+
} catch (reject) {
|
|
181
|
+
result = { reject };
|
|
182
|
+
} finally {
|
|
183
|
+
obj[method] = original;
|
|
184
|
+
}
|
|
185
|
+
result = await interceptor(result) ?? result;
|
|
186
|
+
if (result.reject) {
|
|
187
|
+
throw result.reject;
|
|
188
|
+
}
|
|
189
|
+
return result.resolve;
|
|
190
|
+
};
|
|
191
|
+
} else {
|
|
192
|
+
obj[method] = function(...args) {
|
|
193
|
+
try {
|
|
194
|
+
const resolve = original.apply(this, args);
|
|
195
|
+
result = { resolve };
|
|
196
|
+
} catch (reject) {
|
|
197
|
+
result = { reject };
|
|
198
|
+
} finally {
|
|
199
|
+
obj[method] = original;
|
|
200
|
+
}
|
|
201
|
+
result = interceptor(result) ?? result;
|
|
202
|
+
if (result.reject) {
|
|
203
|
+
throw result.reject;
|
|
204
|
+
}
|
|
205
|
+
return result.resolve;
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
callbackAtTime(atMs, callback) {
|
|
210
|
+
callbacks.push({ atMs, callback });
|
|
211
|
+
callbacks.sort(({ atMs: atMsA }, { atMs: atMsB }) => atMsA - atMsB);
|
|
212
|
+
},
|
|
213
|
+
removeCallback(callbackToRemove) {
|
|
214
|
+
const index = callbacks.findIndex(({ callback }) => callbackToRemove === callback);
|
|
215
|
+
if (index === -1) return;
|
|
216
|
+
callbacks.splice(index, 1);
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
let reinstallTime;
|
|
220
|
+
function timeSetup(Time) {
|
|
221
|
+
real = Time.get();
|
|
222
|
+
MockTime.sleep = real.sleep;
|
|
223
|
+
reinstallTime = () => Time.get = () => MockTime.activeImplementation;
|
|
224
|
+
reinstallTime();
|
|
225
|
+
}
|
|
226
|
+
Object.assign(globalThis, { MockTime });
|
|
227
|
+
export {
|
|
228
|
+
MockTime,
|
|
229
|
+
timeSetup
|
|
230
|
+
};
|
|
231
|
+
//# sourceMappingURL=time.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/mocks/time.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { TestRunner } from "./runner.js";
|
|
7
|
+
import "./global-definitions.js";
|
|
8
|
+
export declare function testNode(runner: TestRunner, format: "cjs" | "esm"): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/node.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,OAAO,yBAAyB,CAAC;AAEjC,wBAAsB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,GAAG,KAAK,iBA+CvE"}
|
package/dist/esm/node.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { mkdir, writeFile } from "fs/promises";
|
|
7
|
+
import Mocha from "mocha";
|
|
8
|
+
import { relative } from "path";
|
|
9
|
+
import { adaptReporter, generalSetup } from "./mocha.js";
|
|
10
|
+
import { TestOptions } from "./options.js";
|
|
11
|
+
import { FailureDetail } from "./failure-detail.js";
|
|
12
|
+
import "./global-definitions.js";
|
|
13
|
+
async function testNode(runner, format) {
|
|
14
|
+
process.on("unhandledRejection", (e) => {
|
|
15
|
+
if (process.listenerCount("unhandledRejection") === 1) {
|
|
16
|
+
const error = new Error("Unhandled rejection (ignored by mocha)");
|
|
17
|
+
error.cause = e;
|
|
18
|
+
runner.reporter.failRun(FailureDetail(error));
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
const mocha = new Mocha({
|
|
22
|
+
inlineDiffs: true,
|
|
23
|
+
reporter: adaptReporter(Mocha, format.toUpperCase(), runner.reporter)
|
|
24
|
+
});
|
|
25
|
+
generalSetup(mocha);
|
|
26
|
+
TestOptions.apply(mocha, runner.options);
|
|
27
|
+
const files = await runner.loadFiles(format);
|
|
28
|
+
files.forEach((path) => {
|
|
29
|
+
path = relative(process.cwd(), path);
|
|
30
|
+
if (path[0] !== ".") {
|
|
31
|
+
path = `./${path}`;
|
|
32
|
+
}
|
|
33
|
+
mocha.addFile(path);
|
|
34
|
+
});
|
|
35
|
+
await mocha.loadFilesAsync();
|
|
36
|
+
const profiler = new Profiler();
|
|
37
|
+
if (runner.options.profile) {
|
|
38
|
+
await profiler.start();
|
|
39
|
+
}
|
|
40
|
+
await new Promise((resolve) => {
|
|
41
|
+
const runner2 = mocha.run(() => resolve(runner2));
|
|
42
|
+
});
|
|
43
|
+
if (runner.options.profile) {
|
|
44
|
+
await profiler.stop(runner.pkg.resolve("build/profiles"));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
class Profiler {
|
|
48
|
+
#session;
|
|
49
|
+
async start() {
|
|
50
|
+
if (this.#session) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
let Session;
|
|
54
|
+
try {
|
|
55
|
+
Session = (await import("inspector/promises")).Session;
|
|
56
|
+
} catch (e) {
|
|
57
|
+
console.error(`We don't support profiling on this version of Node.js: ${e}`);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
this.#session = new Session();
|
|
61
|
+
this.#session.connect();
|
|
62
|
+
await this.#session.post("Profiler.enable");
|
|
63
|
+
await this.#session.post("Profiler.start");
|
|
64
|
+
}
|
|
65
|
+
async stop(outputDir) {
|
|
66
|
+
if (!this.#session) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const { profile } = await this.#session.post("Profiler.stop");
|
|
70
|
+
await this.#session.post("Profiler.disable");
|
|
71
|
+
await mkdir(outputDir, { recursive: true });
|
|
72
|
+
await writeFile(
|
|
73
|
+
`${outputDir}/test-${(/* @__PURE__ */ new Date()).toISOString().slice(0, 19)}.cpuprofile`,
|
|
74
|
+
JSON.stringify(profile)
|
|
75
|
+
);
|
|
76
|
+
this.#session = void 0;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export {
|
|
80
|
+
testNode
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=node.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/node.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,OAAO,iBAAiB;AAEjC,OAAO,WAAW;AAClB,SAAS,gBAAgB;AACzB,SAAS,eAAe,oBAAoB;AAC5C,SAAS,mBAAmB;AAI5B,SAAS,qBAAqB;AAC9B,OAAO;AAEP,eAAsB,SAAS,QAAoB,QAAuB;AAOtE,UAAQ,GAAG,sBAAsB,OAAK;AAClC,QAAI,QAAQ,cAAc,oBAAoB,MAAM,GAAG;AACnD,YAAM,QAAQ,IAAI,MAAM,wCAAwC;AAChE,YAAM,QAAQ;AACd,aAAO,SAAS,QAAQ,cAAc,KAAK,CAAC;AAAA,IAChD;AAAA,EACJ,CAAC;AAED,QAAM,QAAQ,IAAI,MAAM;AAAA,IACpB,aAAa;AAAA,IACb,UAAU,cAAc,OAAO,OAAO,YAAY,GAAG,OAAO,QAAQ;AAAA,EACxE,CAAC;AAED,eAAa,KAAK;AAElB,cAAY,MAAM,OAAO,OAAO,OAAO;AAEvC,QAAM,QAAQ,MAAM,OAAO,UAAU,MAAM;AAC3C,QAAM,QAAQ,UAAQ;AAClB,WAAO,SAAS,QAAQ,IAAI,GAAG,IAAI;AACnC,QAAI,KAAK,CAAC,MAAM,KAAK;AACjB,aAAO,KAAK,IAAI;AAAA,IACpB;AACA,UAAM,QAAQ,IAAI;AAAA,EACtB,CAAC;AAED,QAAM,MAAM,eAAe;AAE3B,QAAM,WAAW,IAAI,SAAS;AAC9B,MAAI,OAAO,QAAQ,SAAS;AACxB,UAAM,SAAS,MAAM;AAAA,EACzB;AAEA,QAAM,IAAI,QAAsB,aAAW;AACvC,UAAMA,UAAS,MAAM,IAAI,MAAM,QAAQA,OAAM,CAAC;AAAA,EAClD,CAAC;AAED,MAAI,OAAO,QAAQ,SAAS;AACxB,UAAM,SAAS,KAAK,OAAO,IAAI,QAAQ,gBAAgB,CAAC;AAAA,EAC5D;AACJ;AAEA,MAAM,SAAS;AAAA,EACX;AAAA,EAEA,MAAM,QAAQ;AACV,QAAI,KAAK,UAAU;AACf;AAAA,IACJ;AAEA,QAAI;AACJ,QAAI;AACA,iBAAW,MAAM,OAAO,oBAAoB,GAAG;AAAA,IACnD,SAAS,GAAG;AACR,cAAQ,MAAM,0DAA0D,CAAC,EAAE;AAC3E;AAAA,IACJ;AAEA,SAAK,WAAW,IAAI,QAAQ;AAC5B,SAAK,SAAS,QAAQ;AACtB,UAAM,KAAK,SAAS,KAAK,iBAAiB;AAC1C,UAAM,KAAK,SAAS,KAAK,gBAAgB;AAAA,EAC7C;AAAA,EAEA,MAAM,KAAK,WAAmB;AAC1B,QAAI,CAAC,KAAK,UAAU;AAChB;AAAA,IACJ;AAEA,UAAM,EAAE,QAAQ,IAAI,MAAM,KAAK,SAAS,KAAK,eAAe;AAC5D,UAAM,KAAK,SAAS,KAAK,kBAAkB;AAE3C,UAAM,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAC1C,UAAM;AAAA,MACF,GAAG,SAAS,UAAS,oBAAI,KAAK,GAAE,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,MAC1D,KAAK,UAAU,OAAO;AAAA,IAC1B;AAEA,SAAK,WAAW;AAAA,EACpB;AACJ;",
|
|
5
|
+
"names": ["runner"]
|
|
6
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export type TestOptions = {
|
|
7
|
+
spec?: string | string[];
|
|
8
|
+
profile?: boolean;
|
|
9
|
+
grep?: string;
|
|
10
|
+
fgrep?: string;
|
|
11
|
+
invert?: boolean;
|
|
12
|
+
allLogs?: boolean;
|
|
13
|
+
wtf?: boolean;
|
|
14
|
+
debug?: boolean;
|
|
15
|
+
};
|
|
16
|
+
export declare namespace TestOptions {
|
|
17
|
+
function apply(mocha: Mocha, options: TestOptions): void;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/options.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,WAAW,GAAG;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAqBF,yBAAiB,WAAW,CAAC;IACzB,SAAgB,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,QAmBvD;CACJ"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
function option(options, name) {
|
|
7
|
+
if (options[name] !== void 0 && options[name] !== null) {
|
|
8
|
+
return options[name];
|
|
9
|
+
}
|
|
10
|
+
if (typeof process === "undefined") {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
return process.env?.["MATTER_" + name.match(/(.[^A-Z]+)/g)?.map((s) => s.toUpperCase()).join("_")];
|
|
14
|
+
}
|
|
15
|
+
var TestOptions;
|
|
16
|
+
((TestOptions2) => {
|
|
17
|
+
function apply(mocha, options) {
|
|
18
|
+
const grep = option(options, "grep");
|
|
19
|
+
if (grep) {
|
|
20
|
+
mocha.grep(grep);
|
|
21
|
+
}
|
|
22
|
+
const fgrep = option(options, "fgrep");
|
|
23
|
+
if (fgrep) {
|
|
24
|
+
mocha.fgrep(fgrep);
|
|
25
|
+
}
|
|
26
|
+
const invert = option(options, "invert");
|
|
27
|
+
if (invert) {
|
|
28
|
+
mocha.invert();
|
|
29
|
+
}
|
|
30
|
+
const allLogs = option(options, "allLogs");
|
|
31
|
+
if (allLogs) {
|
|
32
|
+
if (typeof MockLogger !== "undefined") {
|
|
33
|
+
MockLogger.emitAll = true;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
TestOptions2.apply = apply;
|
|
38
|
+
})(TestOptions || (TestOptions = {}));
|
|
39
|
+
export {
|
|
40
|
+
TestOptions
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/options.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA,SAAS,OAAoC,SAAsB,MAAS;AACxE,MAAI,QAAQ,IAAI,MAAM,UAAa,QAAQ,IAAI,MAAM,MAAM;AACvD,WAAO,QAAQ,IAAI;AAAA,EACvB;AAGA,MAAI,OAAO,YAAY,aAAa;AAChC;AAAA,EACJ;AAEA,SAAO,QAAQ,MACX,YACI,KACK,MAAM,aAAa,GAClB,IAAI,OAAK,EAAE,YAAY,CAAC,EACzB,KAAK,GAAG,CACrB;AACJ;AAEO,IAAU;AAAA,CAAV,CAAUA,iBAAV;AACI,WAAS,MAAM,OAAc,SAAsB;AACtD,UAAM,OAAO,OAAO,SAAS,MAAM;AACnC,QAAI,MAAM;AACN,YAAM,KAAK,IAAI;AAAA,IACnB;AACA,UAAM,QAAQ,OAAO,SAAS,OAAO;AACrC,QAAI,OAAO;AACP,YAAM,MAAM,KAAK;AAAA,IACrB;AACA,UAAM,SAAS,OAAO,SAAS,QAAQ;AACvC,QAAI,QAAQ;AACR,YAAM,OAAO;AAAA,IACjB;AACA,UAAM,UAAU,OAAO,SAAS,SAAS;AACzC,QAAI,SAAS;AACT,UAAI,OAAO,eAAe,aAAa;AACnC,mBAAW,UAAU;AAAA,MACzB;AAAA,IACJ;AAAA,EACJ;AAnBO,EAAAA,aAAS;AAAA,GADH;",
|
|
5
|
+
"names": ["TestOptions"]
|
|
6
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Progress } from "#tools";
|
|
7
|
+
import { FailureDetail } from "./failure-detail.js";
|
|
8
|
+
export type Stats = {
|
|
9
|
+
total: number;
|
|
10
|
+
complete: number;
|
|
11
|
+
failures: number;
|
|
12
|
+
};
|
|
13
|
+
export interface Reporter {
|
|
14
|
+
beginRun(name: string, stats?: Stats, supportsSuites?: boolean): void;
|
|
15
|
+
beginSuite(name: string[], stats?: Stats): void;
|
|
16
|
+
beginTest(name: string, stats?: Stats): void;
|
|
17
|
+
failTest(name: string, detail: FailureDetail): void;
|
|
18
|
+
endRun(stats?: Stats): void;
|
|
19
|
+
failRun(detail: FailureDetail): void;
|
|
20
|
+
}
|
|
21
|
+
export interface Failure {
|
|
22
|
+
suite: string[];
|
|
23
|
+
test: string;
|
|
24
|
+
detail: FailureDetail;
|
|
25
|
+
}
|
|
26
|
+
export declare abstract class ProgressReporter implements Reporter {
|
|
27
|
+
#private;
|
|
28
|
+
private progress;
|
|
29
|
+
private run;
|
|
30
|
+
private suite;
|
|
31
|
+
private failures;
|
|
32
|
+
private lastTitle?;
|
|
33
|
+
constructor(progress: Progress);
|
|
34
|
+
beginRun(name: string, stats: Stats | undefined, supportsSuites?: boolean): void;
|
|
35
|
+
beginSuite(name: string[]): void;
|
|
36
|
+
beginTest(name: string, stats?: Stats): void;
|
|
37
|
+
failTest(name: string, detail: FailureDetail): void;
|
|
38
|
+
abstract failRun(detail: FailureDetail): void;
|
|
39
|
+
endRun(stats?: Stats): void;
|
|
40
|
+
}
|
|
41
|
+
export declare class ConsoleProxyReporter implements Reporter {
|
|
42
|
+
static FLAG: string;
|
|
43
|
+
beginRun(name: string, stats?: Stats): void;
|
|
44
|
+
beginSuite(name: string[], stats?: Stats): void;
|
|
45
|
+
beginTest(name: string, stats?: Stats): void;
|
|
46
|
+
endRun(stats?: Stats): void;
|
|
47
|
+
failTest(name: string, detail: FailureDetail): void;
|
|
48
|
+
failRun(detail: FailureDetail): void;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=reporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,MAAM,KAAK,GAAG;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACtE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAChD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IACpD,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,OAAO;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;CACzB;AAED,8BAAsB,gBAAiB,YAAW,QAAQ;;IAM1C,OAAO,CAAC,QAAQ;IAL5B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,SAAS,CAAC,CAAS;gBAEP,QAAQ,EAAE,QAAQ;IAEtC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,EAAE,cAAc,UAAO,GAAG,IAAI;IAS7E,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAIhC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAS5C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;IAQ5C,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAE7C,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;CAqC9B;AASD,qBAAa,oBAAqB,YAAW,QAAQ;IACjD,MAAM,CAAC,IAAI,SAAiB;IAE5B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;IAIpC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,KAAK;IAIxC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;IAIrC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK;IAIpB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;IAI5C,OAAO,CAAC,MAAM,EAAE,aAAa;CAGhC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import colors from "ansi-colors";
|
|
7
|
+
import { FailureDetail } from "./failure-detail.js";
|
|
8
|
+
class ProgressReporter {
|
|
9
|
+
constructor(progress) {
|
|
10
|
+
this.progress = progress;
|
|
11
|
+
}
|
|
12
|
+
run = "";
|
|
13
|
+
suite = Array();
|
|
14
|
+
failures = Array();
|
|
15
|
+
lastTitle;
|
|
16
|
+
beginRun(name, stats, supportsSuites = true) {
|
|
17
|
+
this.run = name;
|
|
18
|
+
this.suite = [];
|
|
19
|
+
this.failures = [];
|
|
20
|
+
if (!supportsSuites) {
|
|
21
|
+
this.progress.update(this.#summarize(stats));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
beginSuite(name) {
|
|
25
|
+
this.suite = name;
|
|
26
|
+
}
|
|
27
|
+
beginTest(name, stats) {
|
|
28
|
+
const title = process.stdout.isTTY ? this.#formatName(this.suite, name) : this.suite[0];
|
|
29
|
+
if (this.lastTitle !== title) {
|
|
30
|
+
this.lastTitle = title;
|
|
31
|
+
this.progress.update(this.#summarize(stats), title);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
failTest(name, detail) {
|
|
35
|
+
this.failures.push({
|
|
36
|
+
suite: this.suite,
|
|
37
|
+
test: name,
|
|
38
|
+
detail
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
endRun(stats) {
|
|
42
|
+
if (this.failures.length) {
|
|
43
|
+
this.progress.failure(this.#summarize(stats));
|
|
44
|
+
this.#dumpFailures();
|
|
45
|
+
} else if (stats && !stats.complete) {
|
|
46
|
+
this.progress.failure("No tests found");
|
|
47
|
+
} else {
|
|
48
|
+
this.progress.success(this.#summarize(stats));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
#summarize(stats) {
|
|
52
|
+
let statStr;
|
|
53
|
+
if (stats) {
|
|
54
|
+
const complete = colors.dim(`${stats.complete}/${stats.total}`);
|
|
55
|
+
const failures = stats.failures ? colors.redBright(` ${stats.failures.toString()} failed`) : "";
|
|
56
|
+
statStr = ` ${complete}${failures}`;
|
|
57
|
+
} else {
|
|
58
|
+
statStr = "";
|
|
59
|
+
}
|
|
60
|
+
return `${colors.bold(this.run)}${statStr}`;
|
|
61
|
+
}
|
|
62
|
+
#dumpFailures() {
|
|
63
|
+
for (let i = 0; i < this.failures.length; i++) {
|
|
64
|
+
const failure = this.failures[i];
|
|
65
|
+
const index = `Failure ${colors.bold((i + 1).toString())} of ${this.failures.length}`;
|
|
66
|
+
process.stdout.write(`
|
|
67
|
+
${index} ${this.#formatName(failure.suite, failure.test)}
|
|
68
|
+
|
|
69
|
+
`);
|
|
70
|
+
FailureDetail.dump(failure.detail, " ");
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
#formatName(suite, test) {
|
|
74
|
+
return `${suite.join(" \u27A1 ")} \u27A1 ${colors.bold(test)}`;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const actualConsole = console;
|
|
78
|
+
const actualLog = actualConsole.log;
|
|
79
|
+
function proxy(...args) {
|
|
80
|
+
actualLog.call(actualConsole, `${ConsoleProxyReporter.FLAG}${JSON.stringify(args)}`);
|
|
81
|
+
}
|
|
82
|
+
class ConsoleProxyReporter {
|
|
83
|
+
static FLAG = "<<REPORT>> ";
|
|
84
|
+
beginRun(name, stats) {
|
|
85
|
+
proxy("beginRun", name, stats);
|
|
86
|
+
}
|
|
87
|
+
beginSuite(name, stats) {
|
|
88
|
+
proxy("beginSuite", name, stats);
|
|
89
|
+
}
|
|
90
|
+
beginTest(name, stats) {
|
|
91
|
+
proxy("beginTest", name, stats);
|
|
92
|
+
}
|
|
93
|
+
endRun(stats) {
|
|
94
|
+
proxy("endRun", stats);
|
|
95
|
+
}
|
|
96
|
+
failTest(name, detail) {
|
|
97
|
+
proxy("failTest", name, detail);
|
|
98
|
+
}
|
|
99
|
+
failRun(detail) {
|
|
100
|
+
proxy("failRun", detail);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
export {
|
|
104
|
+
ConsoleProxyReporter,
|
|
105
|
+
ProgressReporter
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=reporter.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/reporter.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Package, Progress } from "#tools";
|
|
7
|
+
import { TestOptions } from "./options.js";
|
|
8
|
+
import { Reporter } from "./reporter.js";
|
|
9
|
+
export declare class TestRunner {
|
|
10
|
+
readonly pkg: Package;
|
|
11
|
+
readonly progress: Progress;
|
|
12
|
+
readonly options: TestOptions;
|
|
13
|
+
readonly reporter: Reporter;
|
|
14
|
+
private spec;
|
|
15
|
+
constructor(pkg: Package, progress: Progress, options: TestOptions);
|
|
16
|
+
runNode(format?: "esm" | "cjs"): Promise<void>;
|
|
17
|
+
runWeb(manual?: boolean): Promise<void>;
|
|
18
|
+
loadFiles(format: "esm" | "cjs"): Promise<string[]>;
|
|
19
|
+
private run;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAO3C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAoB,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI3D,qBAAa,UAAU;IAKf,QAAQ,CAAC,GAAG,EAAE,OAAO;IACrB,QAAQ,CAAC,QAAQ,EAAE,QAAQ;IAC3B,QAAQ,CAAC,OAAO,EAAE,WAAW;IANjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,OAAO,CAAC,IAAI,CAAmB;gBAGlB,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,WAAW;IA4B3B,OAAO,CAAC,MAAM,GAAE,KAAK,GAAG,KAAa;IAIrC,MAAM,CAAC,MAAM,UAAQ;IAIrB,SAAS,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK;YAmBvB,GAAG;CAMpB"}
|