@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.
Files changed (226) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +40 -0
  3. package/bin/test.js +7 -0
  4. package/chip/Dockerfile +23 -0
  5. package/dist/cjs/chip/pics-file.d.ts +20 -0
  6. package/dist/cjs/chip/pics-file.d.ts.map +1 -0
  7. package/dist/cjs/chip/pics-file.js +79 -0
  8. package/dist/cjs/chip/pics-file.js.map +6 -0
  9. package/dist/cjs/chip.d.ts +60 -0
  10. package/dist/cjs/chip.d.ts.map +1 -0
  11. package/dist/cjs/chip.js +306 -0
  12. package/dist/cjs/chip.js.map +6 -0
  13. package/dist/cjs/cli.d.ts +9 -0
  14. package/dist/cjs/cli.d.ts.map +1 -0
  15. package/dist/cjs/cli.js +115 -0
  16. package/dist/cjs/cli.js.map +6 -0
  17. package/dist/cjs/failure-detail.d.ts +19 -0
  18. package/dist/cjs/failure-detail.d.ts.map +1 -0
  19. package/dist/cjs/failure-detail.js +143 -0
  20. package/dist/cjs/failure-detail.js.map +6 -0
  21. package/dist/cjs/global-declarations.d.ts +38 -0
  22. package/dist/cjs/global-declarations.d.ts.map +1 -0
  23. package/dist/cjs/global-declarations.js +8 -0
  24. package/dist/cjs/global-declarations.js.map +6 -0
  25. package/dist/cjs/global-definitions.d.ts +7 -0
  26. package/dist/cjs/global-definitions.d.ts.map +1 -0
  27. package/dist/cjs/global-definitions.js +50 -0
  28. package/dist/cjs/global-definitions.js.map +6 -0
  29. package/dist/cjs/index.d.ts +10 -0
  30. package/dist/cjs/index.d.ts.map +1 -0
  31. package/dist/cjs/index.js +27 -0
  32. package/dist/cjs/index.js.map +6 -0
  33. package/dist/cjs/mocha.d.ts +36 -0
  34. package/dist/cjs/mocha.d.ts.map +1 -0
  35. package/dist/cjs/mocha.js +155 -0
  36. package/dist/cjs/mocha.js.map +6 -0
  37. package/dist/cjs/mocharc.cjs +68 -0
  38. package/dist/cjs/mocharc.d.cts +7 -0
  39. package/dist/cjs/mocks/crypto.d.ts +7 -0
  40. package/dist/cjs/mocks/crypto.d.ts.map +1 -0
  41. package/dist/cjs/mocks/crypto.js +79 -0
  42. package/dist/cjs/mocks/crypto.js.map +6 -0
  43. package/dist/cjs/mocks/environment.d.ts +7 -0
  44. package/dist/cjs/mocks/environment.d.ts.map +1 -0
  45. package/dist/cjs/mocks/environment.js +7 -0
  46. package/dist/cjs/mocks/environment.js.map +6 -0
  47. package/dist/cjs/mocks/index.d.ts +10 -0
  48. package/dist/cjs/mocks/index.d.ts.map +1 -0
  49. package/dist/cjs/mocks/index.js +27 -0
  50. package/dist/cjs/mocks/index.js.map +6 -0
  51. package/dist/cjs/mocks/logging.d.ts +28 -0
  52. package/dist/cjs/mocks/logging.d.ts.map +1 -0
  53. package/dist/cjs/mocks/logging.js +93 -0
  54. package/dist/cjs/mocks/logging.js.map +6 -0
  55. package/dist/cjs/mocks/time.d.ts +88 -0
  56. package/dist/cjs/mocks/time.d.ts.map +1 -0
  57. package/dist/cjs/mocks/time.js +251 -0
  58. package/dist/cjs/mocks/time.js.map +6 -0
  59. package/dist/cjs/node.d.ts +9 -0
  60. package/dist/cjs/node.d.ts.map +1 -0
  61. package/dist/cjs/node.js +112 -0
  62. package/dist/cjs/node.js.map +6 -0
  63. package/dist/cjs/options.d.ts +19 -0
  64. package/dist/cjs/options.d.ts.map +1 -0
  65. package/dist/cjs/options.js +62 -0
  66. package/dist/cjs/options.js.map +6 -0
  67. package/dist/cjs/package.json +6 -0
  68. package/dist/cjs/reporter.d.ts +50 -0
  69. package/dist/cjs/reporter.d.ts.map +1 -0
  70. package/dist/cjs/reporter.js +137 -0
  71. package/dist/cjs/reporter.js.map +6 -0
  72. package/dist/cjs/runner.d.ts +21 -0
  73. package/dist/cjs/runner.d.ts.map +1 -0
  74. package/dist/cjs/runner.js +113 -0
  75. package/dist/cjs/runner.js.map +6 -0
  76. package/dist/cjs/util/docker.d.ts +27 -0
  77. package/dist/cjs/util/docker.d.ts.map +1 -0
  78. package/dist/cjs/util/docker.js +163 -0
  79. package/dist/cjs/util/docker.js.map +6 -0
  80. package/dist/cjs/util/files.d.ts +7 -0
  81. package/dist/cjs/util/files.d.ts.map +1 -0
  82. package/dist/cjs/util/files.js +42 -0
  83. package/dist/cjs/util/files.js.map +6 -0
  84. package/dist/cjs/util/node-shims.d.ts +7 -0
  85. package/dist/cjs/util/node-shims.d.ts.map +1 -0
  86. package/dist/cjs/util/node-shims.js +12 -0
  87. package/dist/cjs/util/node-shims.js.map +6 -0
  88. package/dist/cjs/util/trace-unhandled.d.ts +9 -0
  89. package/dist/cjs/util/trace-unhandled.d.ts.map +1 -0
  90. package/dist/cjs/util/trace-unhandled.js +48 -0
  91. package/dist/cjs/util/trace-unhandled.js.map +6 -0
  92. package/dist/cjs/util/wtf.d.ts +10 -0
  93. package/dist/cjs/util/wtf.d.ts.map +1 -0
  94. package/dist/cjs/util/wtf.js +53 -0
  95. package/dist/cjs/util/wtf.js.map +6 -0
  96. package/dist/cjs/web.d.ts +8 -0
  97. package/dist/cjs/web.d.ts.map +1 -0
  98. package/dist/cjs/web.js +165 -0
  99. package/dist/cjs/web.js.map +6 -0
  100. package/dist/esm/chip/pics-file.d.ts +20 -0
  101. package/dist/esm/chip/pics-file.d.ts.map +1 -0
  102. package/dist/esm/chip/pics-file.js +59 -0
  103. package/dist/esm/chip/pics-file.js.map +6 -0
  104. package/dist/esm/chip.d.ts +60 -0
  105. package/dist/esm/chip.d.ts.map +1 -0
  106. package/dist/esm/chip.js +286 -0
  107. package/dist/esm/chip.js.map +6 -0
  108. package/dist/esm/cli.d.ts +9 -0
  109. package/dist/esm/cli.d.ts.map +1 -0
  110. package/dist/esm/cli.js +85 -0
  111. package/dist/esm/cli.js.map +6 -0
  112. package/dist/esm/failure-detail.d.ts +19 -0
  113. package/dist/esm/failure-detail.d.ts.map +1 -0
  114. package/dist/esm/failure-detail.js +113 -0
  115. package/dist/esm/failure-detail.js.map +6 -0
  116. package/dist/esm/global-declarations.d.ts +38 -0
  117. package/dist/esm/global-declarations.d.ts.map +1 -0
  118. package/dist/esm/global-declarations.js +7 -0
  119. package/dist/esm/global-declarations.js.map +6 -0
  120. package/dist/esm/global-definitions.d.ts +7 -0
  121. package/dist/esm/global-definitions.d.ts.map +1 -0
  122. package/dist/esm/global-definitions.js +27 -0
  123. package/dist/esm/global-definitions.js.map +6 -0
  124. package/dist/esm/index.d.ts +10 -0
  125. package/dist/esm/index.d.ts.map +1 -0
  126. package/dist/esm/index.js +10 -0
  127. package/dist/esm/index.js.map +6 -0
  128. package/dist/esm/mocha.d.ts +36 -0
  129. package/dist/esm/mocha.d.ts.map +1 -0
  130. package/dist/esm/mocha.js +135 -0
  131. package/dist/esm/mocha.js.map +6 -0
  132. package/dist/esm/mocharc.cjs +68 -0
  133. package/dist/esm/mocharc.d.cts +7 -0
  134. package/dist/esm/mocks/crypto.d.ts +7 -0
  135. package/dist/esm/mocks/crypto.d.ts.map +1 -0
  136. package/dist/esm/mocks/crypto.js +59 -0
  137. package/dist/esm/mocks/crypto.js.map +6 -0
  138. package/dist/esm/mocks/environment.d.ts +7 -0
  139. package/dist/esm/mocks/environment.d.ts.map +1 -0
  140. package/dist/esm/mocks/environment.js +6 -0
  141. package/dist/esm/mocks/environment.js.map +6 -0
  142. package/dist/esm/mocks/index.d.ts +10 -0
  143. package/dist/esm/mocks/index.d.ts.map +1 -0
  144. package/dist/esm/mocks/index.js +10 -0
  145. package/dist/esm/mocks/index.js.map +6 -0
  146. package/dist/esm/mocks/logging.d.ts +28 -0
  147. package/dist/esm/mocks/logging.d.ts.map +1 -0
  148. package/dist/esm/mocks/logging.js +63 -0
  149. package/dist/esm/mocks/logging.js.map +6 -0
  150. package/dist/esm/mocks/time.d.ts +88 -0
  151. package/dist/esm/mocks/time.d.ts.map +1 -0
  152. package/dist/esm/mocks/time.js +231 -0
  153. package/dist/esm/mocks/time.js.map +6 -0
  154. package/dist/esm/node.d.ts +9 -0
  155. package/dist/esm/node.d.ts.map +1 -0
  156. package/dist/esm/node.js +82 -0
  157. package/dist/esm/node.js.map +6 -0
  158. package/dist/esm/options.d.ts +19 -0
  159. package/dist/esm/options.d.ts.map +1 -0
  160. package/dist/esm/options.js +42 -0
  161. package/dist/esm/options.js.map +6 -0
  162. package/dist/esm/package.json +6 -0
  163. package/dist/esm/reporter.d.ts +50 -0
  164. package/dist/esm/reporter.d.ts.map +1 -0
  165. package/dist/esm/reporter.js +107 -0
  166. package/dist/esm/reporter.js.map +6 -0
  167. package/dist/esm/runner.d.ts +21 -0
  168. package/dist/esm/runner.d.ts.map +1 -0
  169. package/dist/esm/runner.js +83 -0
  170. package/dist/esm/runner.js.map +6 -0
  171. package/dist/esm/util/docker.d.ts +27 -0
  172. package/dist/esm/util/docker.d.ts.map +1 -0
  173. package/dist/esm/util/docker.js +133 -0
  174. package/dist/esm/util/docker.js.map +6 -0
  175. package/dist/esm/util/files.d.ts +7 -0
  176. package/dist/esm/util/files.d.ts.map +1 -0
  177. package/dist/esm/util/files.js +22 -0
  178. package/dist/esm/util/files.js.map +6 -0
  179. package/dist/esm/util/node-shims.d.ts +7 -0
  180. package/dist/esm/util/node-shims.d.ts.map +1 -0
  181. package/dist/esm/util/node-shims.js +11 -0
  182. package/dist/esm/util/node-shims.js.map +6 -0
  183. package/dist/esm/util/trace-unhandled.d.ts +9 -0
  184. package/dist/esm/util/trace-unhandled.d.ts.map +1 -0
  185. package/dist/esm/util/trace-unhandled.js +18 -0
  186. package/dist/esm/util/trace-unhandled.js.map +6 -0
  187. package/dist/esm/util/wtf.d.ts +10 -0
  188. package/dist/esm/util/wtf.d.ts.map +1 -0
  189. package/dist/esm/util/wtf.js +23 -0
  190. package/dist/esm/util/wtf.js.map +6 -0
  191. package/dist/esm/web.d.ts +8 -0
  192. package/dist/esm/web.d.ts.map +1 -0
  193. package/dist/esm/web.js +135 -0
  194. package/dist/esm/web.js.map +6 -0
  195. package/package.json +72 -0
  196. package/src/chip/pics-file.ts +71 -0
  197. package/src/chip/pics.properties +52 -0
  198. package/src/chip.ts +420 -0
  199. package/src/cli.ts +122 -0
  200. package/src/failure-detail.ts +126 -0
  201. package/src/global-declarations.ts +50 -0
  202. package/src/global-definitions.ts +35 -0
  203. package/src/index.html +16 -0
  204. package/src/index.ts +10 -0
  205. package/src/mocha.ts +162 -0
  206. package/src/mocharc.cjs +68 -0
  207. package/src/mocharc.d.cts +7 -0
  208. package/src/mocks/crypto.ts +70 -0
  209. package/src/mocks/environment.ts +7 -0
  210. package/src/mocks/index.ts +10 -0
  211. package/src/mocks/logging.ts +99 -0
  212. package/src/mocks/time.ts +295 -0
  213. package/src/node.ts +106 -0
  214. package/src/options.ts +58 -0
  215. package/src/reporter.ts +144 -0
  216. package/src/runner.ts +92 -0
  217. package/src/tsconfig.json +12 -0
  218. package/src/util/docker.ts +176 -0
  219. package/src/util/files.ts +25 -0
  220. package/src/util/node-shims.ts +13 -0
  221. package/src/util/trace-unhandled.ts +17 -0
  222. package/src/util/wtf.ts +25 -0
  223. package/src/web.ts +174 -0
  224. package/test/mocks/MockTimeTest.ts +113 -0
  225. package/test/tsconfig.json +18 -0
  226. 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"}
@@ -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,6 @@
1
+ {
2
+ "type": "module",
3
+ "imports": {
4
+ "#tools": "@matter/tools"
5
+ }
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"}