@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,286 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Package } from "#tools";
7
+ import { parse } from "path";
8
+ import { PicsFile } from "./chip/pics-file.js";
9
+ import { Docker } from "./util/docker.js";
10
+ var Constants;
11
+ ((Constants2) => {
12
+ Constants2.chip = "/connectedhomeip";
13
+ Constants2.chipTool = `${Constants2.chip}/scripts/tests/chipyaml/chiptool.py`;
14
+ Constants2.yamlTests = `${Constants2.chip}/src/app/tests/suites/certification`;
15
+ Constants2.pythonTests = `${Constants2.chip}/src/python_testing`;
16
+ Constants2.python = ["/usr/bin/env", "-S", "python3", "-B"];
17
+ Constants2.pythonRunner = `${Constants2.chip}/scripts/tests/run_python_test.py`;
18
+ Constants2.pics = "/matter.js/packages/tools/build/pics.properties";
19
+ Constants2.chipPics = "/connectedhomeip/src/app/tests/suites/certification/ci-pics-values";
20
+ Constants2.buildTimeout = 6e5;
21
+ Constants2.defaultTimeout = 6e4;
22
+ Constants2.dockerBuildPath = "chip";
23
+ Constants2.dockerName = "matterjs-chip";
24
+ })(Constants || (Constants = {}));
25
+ const State = {
26
+ configured: false,
27
+ options: void 0,
28
+ docker: void 0,
29
+ yamlTests: Array(),
30
+ pythonTests: Array()
31
+ };
32
+ const Config = {
33
+ set options(options) {
34
+ State.options = options;
35
+ },
36
+ get runner() {
37
+ const runner = State.options?.runner;
38
+ if (runner === void 0) {
39
+ throw new Error("No test runner configured");
40
+ }
41
+ return runner;
42
+ },
43
+ async docker() {
44
+ if (State.docker) {
45
+ return State.docker;
46
+ }
47
+ const docker = new Docker();
48
+ const { progress } = Config.runner;
49
+ await progress.run(
50
+ `Build ${progress.emphasize("CHIP image")}`,
51
+ () => docker.buildImage(Constants.dockerName, Package.tools.resolve(Constants.dockerBuildPath))
52
+ );
53
+ State.docker = docker;
54
+ return docker;
55
+ }
56
+ };
57
+ const Chip = {
58
+ /**
59
+ * Configure CHIP testing. Invoke prior to use of other methods.
60
+ */
61
+ set config(config) {
62
+ Config.options = config;
63
+ },
64
+ /**
65
+ * Initialize. This must run before defining tests to enable test definition via globs.
66
+ */
67
+ async initialize() {
68
+ await initialize();
69
+ },
70
+ /**
71
+ * Define YAML tests. This is a declarative CHIP test defined in a YAML file.
72
+ */
73
+ yaml(testee, includeGlob, excludeGlob) {
74
+ let tests = filterWithGlob(State.yamlTests, includeGlob);
75
+ if (excludeGlob !== void 0) {
76
+ tests = filterWithGlob(tests, excludeGlob, true);
77
+ }
78
+ if (tests.length === 0) {
79
+ throw new Error(`YAML test glob ${includeGlob} matched no tests`);
80
+ }
81
+ for (const file of tests) {
82
+ implementTest(testee, {
83
+ name: parse(file).base,
84
+ command: [Constants.pythonRunner, file],
85
+ // TODO - complete argument set
86
+ args: {
87
+ "--pics-file": Constants.pics,
88
+ "--discriminator": "1234",
89
+ "--passcode": "20202021"
90
+ }
91
+ });
92
+ }
93
+ },
94
+ /**
95
+ * Define a "python" test. This is a CHIP test implemented as a python script.
96
+ */
97
+ python(testee, tester, excludeGlob) {
98
+ if (typeof tester === "string") {
99
+ tester = {
100
+ name: tester
101
+ };
102
+ } else {
103
+ tester = { ...tester };
104
+ }
105
+ tester.args = {
106
+ "--commissioning-method": "on-network",
107
+ "--PICS": Constants.pics,
108
+ "--discriminator": "1234",
109
+ "--passcode": "20202021",
110
+ ...tester.args
111
+ };
112
+ let files = filterWithGlob(State.pythonTests, tester.name, false);
113
+ if (excludeGlob !== void 0) {
114
+ files = filterWithGlob(files, excludeGlob, true);
115
+ }
116
+ if (files.length === 0) {
117
+ throw new Error(`Python test glob ${tester.name} matched no tests`);
118
+ }
119
+ for (const file of files) {
120
+ const name = parse(file).name;
121
+ implementTest(testee, { ...tester, name, command: [file] });
122
+ }
123
+ }
124
+ };
125
+ let containerInitializerInstalled = false;
126
+ function implementTest(testee, tester) {
127
+ if (!containerInitializerInstalled) {
128
+ containerInitializerInstalled = true;
129
+ before(async function() {
130
+ this.timeout(Constants.buildTimeout);
131
+ await initialize();
132
+ });
133
+ }
134
+ it(tester.description ?? tester.name, async () => {
135
+ await testee.setup();
136
+ await testee.start();
137
+ try {
138
+ await invokeTester(tester);
139
+ } finally {
140
+ try {
141
+ await testee.stop();
142
+ } catch (e) {
143
+ console.warn("Error stopping test subject", e);
144
+ }
145
+ }
146
+ }).timeout(tester.timeout ?? Constants.defaultTimeout);
147
+ }
148
+ async function invokeTester(tester) {
149
+ const docker = await Config.docker();
150
+ const args = Array();
151
+ if (tester.command) {
152
+ args.push(...tester.command);
153
+ }
154
+ if (tester.args) {
155
+ args.push(...Object.entries(tester.args).flat());
156
+ }
157
+ const output = docker.run(Constants.dockerName, {
158
+ args,
159
+ env: tester.environment,
160
+ binds: {
161
+ [Package.workspace.path]: "/matter.js"
162
+ },
163
+ network: "host"
164
+ });
165
+ await translateTestOutput(Config.runner, output);
166
+ }
167
+ function deansify(text) {
168
+ return text.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, "");
169
+ }
170
+ async function translateTestOutput(runner, output) {
171
+ let testCount = 0;
172
+ let capture = Array();
173
+ let partial;
174
+ function reportFailures() {
175
+ let testName;
176
+ let testLogs;
177
+ for (const line of capture) {
178
+ const subtestBoundary = deansify(line).match(/\*{5} (Test Step \d+|Test Failure) : (.*)/);
179
+ if (subtestBoundary) {
180
+ if (subtestBoundary[1] === "Test Failure") {
181
+ if (testName === void 0) {
182
+ continue;
183
+ }
184
+ runner.reporter.failTest(testName, {
185
+ message: subtestBoundary[2],
186
+ logs: testLogs?.join("\n")
187
+ });
188
+ } else {
189
+ testName = subtestBoundary[2];
190
+ testLogs = [];
191
+ }
192
+ } else if (testLogs) {
193
+ const appOut = line.match(/^.* APP {2}OUT {2}: (.*)$/);
194
+ if (appOut) {
195
+ testLogs.push(appOut[1]);
196
+ continue;
197
+ }
198
+ const testOut = line.match(/(\d{4}-\d\d-\d\d) .*(\d\d:\d\d:\d\d\.\d\d\d) - TEST OUT {2}: (.*)$/);
199
+ if (testOut) {
200
+ if (deansify(testOut[3]).match(/^(?:✗ \d+.\d+ms$|\s+\d+\. Running )/)) {
201
+ continue;
202
+ }
203
+ const date = testOut[1];
204
+ const time = testOut[2];
205
+ const message = testOut[3].replace(" ", "").replace(/\t/g, " ");
206
+ testLogs.push(`CHIP ${date} ${time} ${message}`);
207
+ continue;
208
+ }
209
+ testLogs.push(line);
210
+ }
211
+ }
212
+ }
213
+ function processLine(line) {
214
+ MockLogger.injectExternalMessage("CHIP", line);
215
+ line = line.trim();
216
+ const plain = deansify(line);
217
+ const testBoundary = plain.match(
218
+ /^\d{4}-\d\d-\d\d \d\d:\d\d:\d\d\.\d{3} [A-Z ]{7} ([a-zA-Z0-9_]+)\s+- (Starting test|(?:Completed|FAILED) in \d+\.\d+ seconds)$/
219
+ );
220
+ if (testBoundary) {
221
+ if (testBoundary[2].startsWith("Start")) {
222
+ testCount++;
223
+ capture = [];
224
+ runner.reporter.beginRun(testBoundary[1], void 0, false);
225
+ } else if (testBoundary[2].startsWith("Completed")) {
226
+ runner.reporter.endRun();
227
+ } else {
228
+ reportFailures();
229
+ runner.reporter.endRun();
230
+ }
231
+ }
232
+ capture.push(line);
233
+ }
234
+ for await (const chunk of output) {
235
+ const lines = chunk.split("\n");
236
+ if (partial) {
237
+ lines[0] = partial + lines[0];
238
+ }
239
+ partial = lines.pop();
240
+ for (const line of lines) {
241
+ processLine(line);
242
+ }
243
+ }
244
+ if (partial !== void 0) {
245
+ processLine(partial);
246
+ }
247
+ }
248
+ async function initialize() {
249
+ if (State.configured) {
250
+ return;
251
+ }
252
+ await Config.docker();
253
+ await configurePics();
254
+ await configureYaml();
255
+ await configurePython();
256
+ State.configured = true;
257
+ }
258
+ async function configurePics() {
259
+ const docker = await Config.docker();
260
+ const ciPics = await docker.readFileFromImage(Constants.dockerName, Constants.chipPics);
261
+ const pics = new PicsFile(ciPics, true);
262
+ const overrides = new PicsFile(Package.tools.resolve("src/testing/chip/pics.properties"));
263
+ pics.patch(overrides);
264
+ pics.save(Package.tools.resolve("build/pics.properties"));
265
+ }
266
+ async function configureYaml() {
267
+ const docker = await Config.docker();
268
+ const tests = await docker.resolveGlobFromImage(Constants.dockerName, `${Constants.yamlTests}/Test_*.yaml`);
269
+ State.yamlTests.push(...tests);
270
+ }
271
+ async function configurePython() {
272
+ const docker = await Config.docker();
273
+ const tests = (await docker.resolveGlobFromImage(Constants.dockerName, `${Constants.pythonTests}/*.py`)).filter(
274
+ (name) => name.match(/(?:TC_|Test)[^/]\.py$/)
275
+ );
276
+ State.pythonTests.push(...tests);
277
+ }
278
+ function filterWithGlob(list, glob, invert = false) {
279
+ const globPattern = glob.replace(/\*/g, "[^\\/]+");
280
+ const pattern = new RegExp(`^.*/(?:Test_TC_|TC|Test)${globPattern}\\.(?:py|yaml)$`);
281
+ return list.filter((s) => !!s.match(pattern) === !invert);
282
+ }
283
+ export {
284
+ Chip
285
+ };
286
+ //# sourceMappingURL=chip.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/chip.ts"],
4
+ "mappings": "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",
5
+ "names": ["Constants"]
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 "./util/node-shims.js";
7
+ import "./global-definitions.js";
8
+ export declare function main(argv?: string[]): Promise<void>;
9
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,sBAAsB,CAAC;AAE9B,OAAO,yBAAyB,CAAC;AAejC,wBAAsB,IAAI,CAAC,IAAI,WAAe,iBAiG7C"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import "./util/node-shims.js";
7
+ import "./global-definitions.js";
8
+ import { Builder, Graph, Project } from "#tools";
9
+ import yargs from "yargs";
10
+ import { hideBin } from "yargs/helpers";
11
+ import { TestRunner } from "./runner.js";
12
+ var TestType = /* @__PURE__ */ ((TestType2) => {
13
+ TestType2["esm"] = "esm";
14
+ TestType2["cjs"] = "cjs";
15
+ TestType2["web"] = "web";
16
+ return TestType2;
17
+ })(TestType || {});
18
+ Error.stackTraceLimit = 50;
19
+ async function main(argv = process.argv) {
20
+ const testTypes = /* @__PURE__ */ new Set();
21
+ let manual = false;
22
+ const args = await yargs(hideBin(argv)).usage("Runs tests in packages adhering to matter.js standards.").option("prefix", {
23
+ alias: "p",
24
+ default: ".",
25
+ type: "string",
26
+ describe: "specify directory of package to test"
27
+ }).option("web", {
28
+ alias: "w",
29
+ default: false,
30
+ type: "boolean",
31
+ describe: "enable web tests in default test mode"
32
+ }).option("spec", {
33
+ type: "array",
34
+ string: true,
35
+ describe: "One or more paths of tests to run",
36
+ default: "./test/**/*Test.ts"
37
+ }).option("all-logs", { type: "boolean", describe: "Emit log messages in real time" }).option("debug", { type: "boolean", describe: "Enable Mocha debugging" }).option("environment", { alias: "e", type: "string", describe: "Select named test environment" }).option("fgrep", { alias: "f", type: "string", describe: "Only run tests matching this string" }).option("force-exit", { type: "boolean", describe: "Force Node to exit after tests complete" }).option("grep", { alias: "g", type: "string", describe: "Only run tests matching this regexp" }).option("invert", { alias: "i", type: "boolean", describe: "Inverts --grep and --fgrep matches" }).option("profile", { type: "boolean", describe: "Write profiling data to build/profiles (node only)" }).option("wtf", { type: "boolean", describe: "Enlist wtfnode to detect test leaks" }).option("trace-unhandled", { type: "boolean", describe: "Detail unhandled rejections with trace-unhandled" }).command("*", "run all supported test types").command("esm", "run tests on node (ES6 modules)", () => testTypes.add("esm" /* esm */)).command("cjs", "run tests on node (CommonJS modules)", () => testTypes.add("cjs" /* cjs */)).command("web", "run tests in web browser", () => testTypes.add("web" /* web */)).command("manual", "start test server and print URL for manual testing", () => {
38
+ testTypes.add("web" /* web */);
39
+ manual = true;
40
+ }).strict().argv;
41
+ let packageLocation = args.prefix;
42
+ if (packageLocation === "." && args.spec) {
43
+ const firstSpec = Array.isArray(args.spec) ? args.spec[0] : args.spec;
44
+ packageLocation = firstSpec;
45
+ }
46
+ const project = new Project(packageLocation);
47
+ process.chdir(project.pkg.path);
48
+ if (!testTypes.size) {
49
+ if (project.pkg.supportsEsm) {
50
+ testTypes.add("esm" /* esm */);
51
+ }
52
+ if (project.pkg.supportsCjs) {
53
+ testTypes.add("cjs" /* cjs */);
54
+ }
55
+ if (args.web) {
56
+ testTypes.add("web" /* web */);
57
+ }
58
+ }
59
+ const builder = new Builder();
60
+ const dependencies = await Graph.forProject(packageLocation);
61
+ if (dependencies) {
62
+ await dependencies.build(builder, false);
63
+ } else {
64
+ await builder.build(project);
65
+ }
66
+ const progress = project.pkg.start("Testing");
67
+ const runner = new TestRunner(project.pkg, progress, args);
68
+ if (testTypes.has("esm" /* esm */)) {
69
+ await runner.runNode("esm");
70
+ }
71
+ if (testTypes.has("cjs" /* cjs */)) {
72
+ await runner.runNode("cjs");
73
+ }
74
+ if (testTypes.has("web" /* web */)) {
75
+ await runner.runWeb(manual);
76
+ }
77
+ progress.shutdown();
78
+ if (args.forceExit) {
79
+ process.exit(0);
80
+ }
81
+ }
82
+ export {
83
+ main
84
+ };
85
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/cli.ts"],
4
+ "mappings": "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",
5
+ "names": ["TestType"]
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 interface FailureDetail {
7
+ message: string;
8
+ stack?: string;
9
+ diff?: string;
10
+ logs?: string;
11
+ cause?: FailureDetail;
12
+ errors?: FailureDetail[];
13
+ }
14
+ export declare function FailureDetail(error: any, logs?: string[]): FailureDetail;
15
+ export declare namespace FailureDetail {
16
+ function dump(failure: FailureDetail, prefix?: string): void;
17
+ let diff: undefined | ((actual: string, expected: string) => string);
18
+ }
19
+ //# sourceMappingURL=failure-detail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure-detail.d.ts","sourceRoot":"","sources":["../../src/failure-detail.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,iBAgCxD;AAED,yBAAiB,aAAa,CAAC;IAC3B,SAAgB,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,GAAE,MAAW,QA2B/D;IAEM,IAAI,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;CAC/E"}
@@ -0,0 +1,113 @@
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
+ function FailureDetail(error, logs) {
8
+ let diff;
9
+ const { message, stack, cause, errors } = parseError(error);
10
+ if (error.expected && error.actual) {
11
+ if (FailureDetail.diff === void 0) {
12
+ diff = "(no diff implementation installed)";
13
+ } else {
14
+ diff = FailureDetail.diff(error.actual.toString(), error.expected.toString());
15
+ diff = diff.trim().replace(/^ {6}/gms, "");
16
+ }
17
+ }
18
+ const result = { message };
19
+ if (diff) {
20
+ result.diff = diff;
21
+ }
22
+ if (stack) {
23
+ result.stack = stack;
24
+ }
25
+ if (logs?.length) {
26
+ result.logs = logs.join("\n");
27
+ }
28
+ if (cause) {
29
+ result.cause = cause;
30
+ }
31
+ if (errors) {
32
+ result.errors = errors;
33
+ }
34
+ return result;
35
+ }
36
+ ((FailureDetail2) => {
37
+ function dump(failure, prefix = "") {
38
+ process.stdout.write(colors.redBright(`${prefix}${failure.message}
39
+
40
+ `));
41
+ if (failure.diff) {
42
+ process.stdout.write(`${prefix} ${failure.diff.replace(/\n/gm, "\n ")}
43
+
44
+ `);
45
+ }
46
+ if (failure.stack) {
47
+ process.stdout.write(`${prefix}${colors.dim(failure.stack.replace(/\n/gm, `
48
+ ${prefix}`))}
49
+
50
+ `);
51
+ }
52
+ if (failure.cause) {
53
+ process.stdout.write(`${prefix}Caused by:
54
+
55
+ `);
56
+ dump(failure.cause, prefix);
57
+ }
58
+ if (failure.errors?.length) {
59
+ let num = 0;
60
+ for (const cause of failure.errors) {
61
+ process.stdout.write(`${prefix}Cause #${++num}:
62
+
63
+ `);
64
+ dump(cause, `${prefix} `);
65
+ }
66
+ }
67
+ if (failure.logs) {
68
+ process.stdout.write(` ${failure.logs.replace(/\n/gm, "\n ")}
69
+
70
+ `);
71
+ }
72
+ }
73
+ FailureDetail2.dump = dump;
74
+ })(FailureDetail || (FailureDetail = {}));
75
+ function parseError(error) {
76
+ let message, stack, cause, errors;
77
+ if (error === void 0 || error === null) {
78
+ message = `(error is ${error})`;
79
+ } else {
80
+ message = error.message;
81
+ }
82
+ if (error.stack) {
83
+ let lines = error.stack.trim().split("\n");
84
+ if (!message) {
85
+ message = lines[0];
86
+ }
87
+ lines = lines.filter((line) => line.match(/:\d+:\d+\)?/));
88
+ if (lines.length) {
89
+ stack = lines.map((line) => line.trim()).join("\n");
90
+ }
91
+ } else if (error.message) {
92
+ message = error.message;
93
+ } else {
94
+ message = error.toString();
95
+ }
96
+ message = message.trim().replace(/Error: /, "");
97
+ if (message.endsWith(":")) {
98
+ message = message.slice(0, message.length - 1);
99
+ }
100
+ const errorCause = error.cause;
101
+ if (errorCause) {
102
+ cause = FailureDetail(errorCause);
103
+ }
104
+ const errorErrors = error.errors;
105
+ if (Array.isArray(errorErrors)) {
106
+ errors = errorErrors.map((e) => FailureDetail(e));
107
+ }
108
+ return { message, stack, cause, errors };
109
+ }
110
+ export {
111
+ FailureDetail
112
+ };
113
+ //# sourceMappingURL=failure-detail.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/failure-detail.ts"],
4
+ "mappings": "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",
5
+ "names": ["FailureDetail"]
6
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type Chai from "chai";
7
+ import "chai-as-promised";
8
+ import type { MockLogger } from "./mocks/logging.js";
9
+ import type { MockTime } from "./mocks/time.js";
10
+ declare global {
11
+ const expect: typeof Chai.expect;
12
+ let MockTime: MockTime;
13
+ let MockLogger: MockLogger;
14
+ /**
15
+ * If present, the following hooks are engaged by matter.js packages to
16
+ * enable mocking. We use globals rather than imports so we can hook the
17
+ * modules regardless of whether they're loaded as CommonJS or ESM.
18
+ */
19
+ let MatterHooks: undefined | {
20
+ /**
21
+ * Configure time.
22
+ */
23
+ timeSetup?: (Time: any) => void;
24
+ /**
25
+ * Configure logging.
26
+ */
27
+ loggerSetup?: (Logger: any) => void;
28
+ /**
29
+ * Configure crypto.
30
+ */
31
+ cryptoSetup?: (Crypto: any) => void;
32
+ /**
33
+ * Receive intercepted log messages. The logging mocks
34
+ */
35
+ loggerSink?: (level: number, message: string) => void;
36
+ };
37
+ }
38
+ //# sourceMappingURL=global-declarations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-declarations.d.ts","sourceRoot":"","sources":["../../src/global-declarations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,CAAC,MAAM,CAAC;IAEX,MAAM,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC;IAGjC,IAAI,QAAQ,EAAE,QAAQ,CAAC;IAGvB,IAAI,UAAU,EAAE,UAAU,CAAC;IAE3B;;;;OAIG;IACH,IAAI,WAAW,EACT,SAAS,GACT;QACI;;WAEG;QACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;QAEhC;;WAEG;QACH,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;QAEpC;;WAEG;QACH,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;QAEpC;;WAEG;QACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;KACzD,CAAC;CACX"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import "chai-as-promised";
7
+ //# sourceMappingURL=global-declarations.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/global-declarations.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,OAAO;",
5
+ "names": []
6
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=global-definitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-definitions.d.ts","sourceRoot":"","sources":["../../src/global-definitions.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import Chai from "chai";
7
+ import ChaiAsPromised from "chai-as-promised";
8
+ import { browserSetup, generalSetup } from "./mocha.js";
9
+ import { cryptoSetup } from "./mocks/crypto.js";
10
+ import { TheMockLogger, loggerSetup } from "./mocks/logging.js";
11
+ import { timeSetup } from "./mocks/time.js";
12
+ Chai.config.truncateThreshold = 200;
13
+ Chai.use(ChaiAsPromised);
14
+ Object.assign(globalThis, {
15
+ expect: Chai.expect,
16
+ MatterHooks: {
17
+ loggerSetup,
18
+ timeSetup,
19
+ cryptoSetup
20
+ },
21
+ MockLogger: TheMockLogger
22
+ });
23
+ if (typeof window === "object" && globalThis === window) {
24
+ generalSetup(mocha);
25
+ browserSetup(mocha);
26
+ }
27
+ //# sourceMappingURL=global-definitions.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/global-definitions.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AASA,OAAO,UAAU;AACjB,OAAO,oBAAoB;AAC3B,SAAS,cAAc,oBAAoB;AAC3C,SAAS,mBAAmB;AAC5B,SAAS,eAAe,mBAAmB;AAC3C,SAAS,iBAAiB;AAE1B,KAAK,OAAO,oBAAoB;AAChC,KAAK,IAAI,cAAc;AAEvB,OAAO,OAAO,YAAY;AAAA,EACtB,QAAQ,KAAK;AAAA,EAEb,aAAa;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAAA,EAEA,YAAY;AAChB,CAAC;AAED,IAAI,OAAO,WAAW,YAAY,eAAe,QAAQ;AACrD,eAAa,KAAK;AAClB,eAAa,KAAK;AACtB;",
5
+ "names": []
6
+ }