@matter/testing 0.14.1-alpha.0-20250607-a93593303 → 0.15.0-alpha.0-20250613-a55f991d4

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 (84) hide show
  1. package/dist/cjs/chip/config.d.ts.map +1 -1
  2. package/dist/cjs/chip/config.js +2 -6
  3. package/dist/cjs/chip/config.js.map +1 -1
  4. package/dist/cjs/chip/container-command-pipe.d.ts +1 -0
  5. package/dist/cjs/chip/container-command-pipe.d.ts.map +1 -1
  6. package/dist/cjs/chip/container-command-pipe.js +2 -1
  7. package/dist/cjs/chip/container-command-pipe.js.map +1 -1
  8. package/dist/cjs/cli.d.ts.map +1 -1
  9. package/dist/cjs/cli.js +10 -0
  10. package/dist/cjs/cli.js.map +1 -1
  11. package/dist/cjs/global-declarations.d.ts +9 -2
  12. package/dist/cjs/global-declarations.d.ts.map +1 -1
  13. package/dist/cjs/global-definitions.js +5 -1
  14. package/dist/cjs/global-definitions.js.map +1 -1
  15. package/dist/cjs/mocha.d.ts.map +1 -1
  16. package/dist/cjs/mocha.js +10 -6
  17. package/dist/cjs/mocha.js.map +1 -1
  18. package/dist/cjs/mocks/boot.d.ts +4 -1
  19. package/dist/cjs/mocks/boot.d.ts.map +1 -1
  20. package/dist/cjs/mocks/boot.js +5 -5
  21. package/dist/cjs/mocks/boot.js.map +1 -1
  22. package/dist/cjs/mocks/crypto.d.ts +27 -1
  23. package/dist/cjs/mocks/crypto.d.ts.map +1 -1
  24. package/dist/cjs/mocks/crypto.js +56 -43
  25. package/dist/cjs/mocks/crypto.js.map +1 -1
  26. package/dist/cjs/mocks/logging.d.ts +1 -1
  27. package/dist/cjs/mocks/logging.d.ts.map +1 -1
  28. package/dist/cjs/mocks/logging.js +5 -5
  29. package/dist/cjs/mocks/logging.js.map +1 -1
  30. package/dist/cjs/mocks/time.d.ts +16 -1
  31. package/dist/cjs/mocks/time.d.ts.map +1 -1
  32. package/dist/cjs/mocks/time.js +48 -9
  33. package/dist/cjs/mocks/time.js.map +2 -2
  34. package/dist/cjs/nodejs.d.ts.map +1 -1
  35. package/dist/cjs/nodejs.js +2 -0
  36. package/dist/cjs/nodejs.js.map +1 -1
  37. package/dist/esm/chip/config.d.ts.map +1 -1
  38. package/dist/esm/chip/config.js +2 -6
  39. package/dist/esm/chip/config.js.map +1 -1
  40. package/dist/esm/chip/container-command-pipe.d.ts +1 -0
  41. package/dist/esm/chip/container-command-pipe.d.ts.map +1 -1
  42. package/dist/esm/chip/container-command-pipe.js +2 -1
  43. package/dist/esm/chip/container-command-pipe.js.map +1 -1
  44. package/dist/esm/cli.d.ts.map +1 -1
  45. package/dist/esm/cli.js +11 -1
  46. package/dist/esm/cli.js.map +1 -1
  47. package/dist/esm/global-declarations.d.ts +9 -2
  48. package/dist/esm/global-declarations.d.ts.map +1 -1
  49. package/dist/esm/global-definitions.js +7 -3
  50. package/dist/esm/global-definitions.js.map +1 -1
  51. package/dist/esm/mocha.d.ts.map +1 -1
  52. package/dist/esm/mocha.js +10 -6
  53. package/dist/esm/mocha.js.map +1 -1
  54. package/dist/esm/mocks/boot.d.ts +4 -1
  55. package/dist/esm/mocks/boot.d.ts.map +1 -1
  56. package/dist/esm/mocks/boot.js +5 -5
  57. package/dist/esm/mocks/boot.js.map +1 -1
  58. package/dist/esm/mocks/crypto.d.ts +27 -1
  59. package/dist/esm/mocks/crypto.d.ts.map +1 -1
  60. package/dist/esm/mocks/crypto.js +56 -43
  61. package/dist/esm/mocks/crypto.js.map +1 -1
  62. package/dist/esm/mocks/logging.d.ts +1 -1
  63. package/dist/esm/mocks/logging.d.ts.map +1 -1
  64. package/dist/esm/mocks/logging.js +5 -5
  65. package/dist/esm/mocks/logging.js.map +1 -1
  66. package/dist/esm/mocks/time.d.ts +16 -1
  67. package/dist/esm/mocks/time.d.ts.map +1 -1
  68. package/dist/esm/mocks/time.js +48 -9
  69. package/dist/esm/mocks/time.js.map +2 -2
  70. package/dist/esm/nodejs.d.ts.map +1 -1
  71. package/dist/esm/nodejs.js +2 -0
  72. package/dist/esm/nodejs.js.map +1 -1
  73. package/package.json +4 -4
  74. package/src/chip/config.ts +2 -6
  75. package/src/chip/container-command-pipe.ts +1 -1
  76. package/src/cli.ts +13 -1
  77. package/src/global-declarations.ts +10 -2
  78. package/src/global-definitions.ts +10 -3
  79. package/src/mocha.ts +14 -9
  80. package/src/mocks/boot.ts +15 -5
  81. package/src/mocks/crypto.ts +95 -49
  82. package/src/mocks/logging.ts +4 -4
  83. package/src/mocks/time.ts +56 -11
  84. package/src/nodejs.ts +3 -0
@@ -3,57 +3,70 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- const subtle = globalThis.crypto.subtle;
7
- const TheCrypto = {
8
- getRandomData: (length) => {
9
- const bytes = new Uint8Array(length);
10
- return bytes;
6
+ import { Boot } from "./boot.js";
7
+ const FILL_BYTE = 128;
8
+ let RealCrypto;
9
+ let restoreRandomness;
10
+ const MockCrypto = {
11
+ set random(value) {
12
+ if (RealCrypto === void 0) {
13
+ return;
14
+ }
15
+ if (value === this.random) {
16
+ return;
17
+ }
18
+ restoreRandomness?.();
19
+ if (!value) {
20
+ const instance = RealCrypto.default;
21
+ const realGetRandomData = instance.getRandomData;
22
+ instance.getRandomData = (length) => {
23
+ const result = new Uint8Array(length);
24
+ result.fill(FILL_BYTE);
25
+ return result;
26
+ };
27
+ restoreRandomness = () => {
28
+ instance.getRandomData = realGetRandomData;
29
+ restoreRandomness = void 0;
30
+ };
31
+ }
11
32
  },
12
- async pbkdf2(secret, salt, iteration, keyLength) {
13
- const key = await subtle.importKey("raw", secret, "PBKDF2", false, ["deriveBits"]);
14
- const bits = await subtle.deriveBits(
15
- {
16
- name: "PBKDF2",
17
- hash: "SHA-256",
18
- salt,
19
- iterations: iteration
20
- },
21
- key,
22
- keyLength * 8
23
- );
24
- return new Uint8Array(bits);
33
+ get random() {
34
+ return !restoreRandomness;
25
35
  },
26
- async hkdf(secret, salt, info, length = 16) {
27
- const key = await subtle.importKey("raw", secret, "HKDF", false, ["deriveBits"]);
28
- return new Uint8Array(
29
- await subtle.deriveBits(
30
- {
31
- name: "HKDF",
32
- hash: "SHA-256",
33
- salt,
34
- info
35
- },
36
- key,
37
- length
38
- )
39
- );
36
+ withRandom(value, actor) {
37
+ const revertTo = !!restoreRandomness;
38
+ let isAsync = false;
39
+ try {
40
+ MockCrypto.random = value;
41
+ const result = actor();
42
+ if (typeof result?.then === "function") {
43
+ isAsync = true;
44
+ return Promise.resolve(result).finally(() => {
45
+ MockCrypto.random = revertTo;
46
+ });
47
+ }
48
+ return result;
49
+ } finally {
50
+ if (!isAsync) {
51
+ MockCrypto.random = revertTo;
52
+ }
53
+ }
40
54
  },
41
- verify() {
42
- return;
55
+ enable() {
56
+ MockCrypto.random = false;
43
57
  },
44
- mock: true
45
- };
46
- function cryptoSetup(Crypto) {
47
- try {
48
- Crypto.get();
49
- } catch (e) {
50
- if (e.constructor.name !== "NoProviderError") {
51
- throw e;
58
+ init() {
59
+ if (MockCrypto.random) {
60
+ MockCrypto.enable();
52
61
  }
53
- Crypto.get = () => TheCrypto;
54
62
  }
63
+ };
64
+ function cryptoSetup(Crypto) {
65
+ RealCrypto = Crypto;
55
66
  }
67
+ Boot.init(() => MockCrypto.random = true);
56
68
  export {
69
+ MockCrypto,
57
70
  cryptoSetup
58
71
  };
59
72
  //# sourceMappingURL=crypto.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/mocks/crypto.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,MAAM,SAAS,WAAW,OAAO;AAOjC,MAAM,YAAY;AAAA,EACd,eAAe,CAAC,WAAmB;AAE/B,UAAM,QAAQ,IAAI,WAAW,MAAM;AAEnC,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,OAAO,QAAoB,MAAkB,WAAmB,WAAmB;AACrF,UAAM,MAAM,MAAM,OAAO,UAAU,OAAO,QAAQ,UAAU,OAAO,CAAC,YAAY,CAAC;AACjF,UAAM,OAAO,MAAM,OAAO;AAAA,MACtB;AAAA,QACI,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,QACA,YAAY;AAAA,MAChB;AAAA,MACA;AAAA,MACA,YAAY;AAAA,IAChB;AACA,WAAO,IAAI,WAAW,IAAI;AAAA,EAC9B;AAAA,EAEA,MAAM,KAAK,QAAoB,MAAkB,MAAkB,SAAiB,IAAI;AACpF,UAAM,MAAM,MAAM,OAAO,UAAU,OAAO,QAAQ,QAAQ,OAAO,CAAC,YAAY,CAAC;AAC/E,WAAO,IAAI;AAAA,MACP,MAAM,OAAO;AAAA,QACT;AAAA,UACI,MAAM;AAAA,UACN,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,SAAS;AAEL;AAAA,EACJ;AAAA,EAEA,MAAM;AACV;AAEO,SAAS,YAAY,QAAa;AACrC,MAAI;AACA,WAAO,IAAI;AAAA,EACf,SAAS,GAAG;AACR,QAAK,EAAY,YAAY,SAAS,mBAAmB;AACrD,YAAM;AAAA,IACV;AACA,WAAO,MAAM,MAAM;AAAA,EACvB;AACJ;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,YAAY;AAMrB,MAAM,YAAY;AAUlB,IAAI;AAEJ,IAAI;AAEG,MAAM,aAAyB;AAAA,EAClC,IAAI,OAAO,OAAgB;AACvB,QAAI,eAAe,QAAW;AAC1B;AAAA,IACJ;AAEA,QAAI,UAAU,KAAK,QAAQ;AACvB;AAAA,IACJ;AAEA,wBAAoB;AACpB,QAAI,CAAC,OAAO;AACR,YAAM,WAAW,WAAW;AAE5B,YAAM,oBAAoB,SAAS;AACnC,eAAS,gBAAgB,YAAU;AAC/B,cAAM,SAAS,IAAI,WAAW,MAAM;AACpC,eAAO,KAAK,SAAS;AACrB,eAAO;AAAA,MACX;AAEA,0BAAoB,MAAM;AACtB,iBAAS,gBAAgB;AACzB,4BAAoB;AAAA,MACxB;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,IAAI,SAAS;AACT,WAAO,CAAC;AAAA,EACZ;AAAA,EAEA,WAAc,OAAgB,OAAmB;AAC7C,UAAM,WAAW,CAAC,CAAC;AACnB,QAAI,UAAU;AACd,QAAI;AACA,iBAAW,SAAS;AACpB,YAAM,SAAS,MAAM;AACrB,UAAI,OAAQ,QAAgB,SAAS,YAAY;AAC7C,kBAAU;AACV,eAAO,QAAQ,QAAQ,MAAM,EAAE,QAAQ,MAAM;AACzC,qBAAW,SAAS;AAAA,QACxB,CAAC;AAAA,MACL;AACA,aAAO;AAAA,IACX,UAAE;AACE,UAAI,CAAC,SAAS;AACV,mBAAW,SAAS;AAAA,MACxB;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,SAAS;AACL,eAAW,SAAS;AAAA,EACxB;AAAA,EAEA,OAAO;AACH,QAAI,WAAW,QAAQ;AACnB,iBAAW,OAAO;AAAA,IACtB;AAAA,EACJ;AACJ;AAEO,SAAS,YAAY,QAAyB;AACjD,eAAa;AACjB;AAEA,KAAK,KAAK,MAAO,WAAW,SAAS,IAAK;",
5
5
  "names": []
6
6
  }
@@ -16,7 +16,7 @@ export interface MockLogger {
16
16
  emitAll: boolean;
17
17
  injectExternalMessage: (source: string, text: string) => void;
18
18
  }
19
- export declare const TheMockLogger: MockLogger;
19
+ export declare const MockLogger: MockLogger;
20
20
  /**
21
21
  * These functions are invoked by beforeEach/afterEach handlers in generalSetup for Mocha.
22
22
  *
@@ -1 +1 @@
1
- {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../../src/mocks/logging.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,qBAAqB;IAClC,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,UAAU;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAChB,MAAM,EACN;QACI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAC;KAC7D,CACJ,CAAC;CACL;AAED,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,qBAAqB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjE;AAED,eAAO,MAAM,aAAa,EAAE,UAG3B,CAAC;AAMF;;;;;;GAMG;AACH,eAAO,MAAM,WAAW;yBACM,KAAK,KAAK,IAAI;wBACf,KAAK,KAAK,IAAI;CAC1C,CAAC;AAEF,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,QA4D7C"}
1
+ {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../../src/mocks/logging.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,qBAAqB;IAClC,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,UAAU;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAChB,MAAM,EACN;QACI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAC;KAC7D,CACJ,CAAC;CACL;AAED,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,qBAAqB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjE;AAED,eAAO,MAAM,UAAU,EAAE,UAGxB,CAAC;AAMF;;;;;;GAMG;AACH,eAAO,MAAM,WAAW;yBACM,KAAK,KAAK,IAAI;wBACf,KAAK,KAAK,IAAI;CAC1C,CAAC;AAEF,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,QA4D7C"}
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { ansi, Wrapper } from "#tools/ansi-text";
7
- const TheMockLogger = {
7
+ const MockLogger = {
8
8
  emitAll: false,
9
9
  injectExternalMessage: (source, text) => console.log(formatExternalMessage(source, text))
10
10
  };
@@ -23,7 +23,7 @@ function loggerSetup(Logger) {
23
23
  defaultWrite.apply(Logger, args);
24
24
  }
25
25
  function interceptingWriter(...args) {
26
- let emitAll = TheMockLogger.emitAll;
26
+ let emitAll = MockLogger.emitAll;
27
27
  if (MatterHooks?.loggerSink) {
28
28
  MatterHooks.loggerSink(...args);
29
29
  } else if (!emitAll) {
@@ -37,10 +37,10 @@ function loggerSetup(Logger) {
37
37
  passMessage(args);
38
38
  }
39
39
  }
40
- TheMockLogger.injectExternalMessage = (source, text) => interceptingWriter(formatExternalMessage(source, text), { level: 0 });
40
+ MockLogger.injectExternalMessage = (source, text) => interceptingWriter(formatExternalMessage(source, text), { level: 0 });
41
41
  Logger.destinations.default.write = interceptingWriter;
42
42
  LoggerHooks.beforeEach.push(function() {
43
- if (!TheMockLogger.emitAll) {
43
+ if (!MockLogger.emitAll) {
44
44
  messageBuffer = [];
45
45
  }
46
46
  });
@@ -57,7 +57,7 @@ function loggerSetup(Logger) {
57
57
  }
58
58
  export {
59
59
  LoggerHooks,
60
- TheMockLogger,
60
+ MockLogger,
61
61
  loggerSetup
62
62
  };
63
63
  //# sourceMappingURL=logging.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/mocks/logging.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,MAAM,eAAe;AAqBvB,MAAM,gBAA4B;AAAA,EACrC,SAAS;AAAA,EACT,uBAAuB,CAAC,QAAgB,SAAiB,QAAQ,IAAI,sBAAsB,QAAQ,IAAI,CAAC;AAC5G;AAEA,SAAS,sBAAsB,QAAgB,MAAc;AACzD,SAAO,GAAG,QAAQ,WAAW,GAAG,KAAK,MAAM,GAAG,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC,IAAI,QAAQ,UAAU,GAAG,KAAK,IAAI,IAAI,CAAC;AACjH;AASO,MAAM,cAAc;AAAA,EACvB,YAAY,MAA8B;AAAA,EAC1C,WAAW,MAA8B;AAC7C;AAEO,SAAS,YAAY,QAAoB;AAU5C,SAAO,SAAS;AAEhB,MAAI;AAEJ,QAAM,eAAe,OAAO,aAAa,QAAQ;AAEjD,WAAS,YAAY,MAAuC;AACxD,iBAAa,MAAM,QAAQ,IAAI;AAAA,EACnC;AAEA,WAAS,sBAAsB,MAAuC;AAClE,QAAI,UAAU,cAAc;AAC5B,QAAI,aAAa,YAAY;AACzB,kBAAY,WAAW,GAAG,IAAI;AAAA,IAClC,WAAW,CAAC,SAAS;AACjB,UAAI,eAAe;AACf,sBAAc,KAAK,IAAI;AAAA,MAC3B,OAAO;AACH,kBAAU;AAAA,MACd;AAAA,IACJ;AAEA,QAAI,SAAS;AACT,kBAAY,IAAI;AAAA,IACpB;AAAA,EACJ;AAEA,gBAAc,wBAAwB,CAAC,QAAQ,SAC3C,mBAAmB,sBAAsB,QAAQ,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC;AAExE,SAAO,aAAa,QAAQ,QAAQ;AAGpC,cAAY,WAAW,KAAK,WAAY;AACpC,QAAI,CAAC,cAAc,SAAS;AACxB,sBAAgB,CAAC;AAAA,IACrB;AAAA,EACJ,CAAC;AAGD,cAAY,UAAU,KAAK,WAAS;AAChC,QAAI,eAAe,QAAQ;AACvB,UAAI,MAAM,MAAM,IAAI,aAAa,SAAS,GAAG;AACzC,mBAAW,QAAQ,eAAe;AAC9B,sBAAY,IAAI;AAAA,QACpB;AAAA,MACJ;AACA,sBAAgB;AAAA,IACpB;AAAA,EACJ,CAAC;AACL;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,MAAM,eAAe;AAqBvB,MAAM,aAAyB;AAAA,EAClC,SAAS;AAAA,EACT,uBAAuB,CAAC,QAAgB,SAAiB,QAAQ,IAAI,sBAAsB,QAAQ,IAAI,CAAC;AAC5G;AAEA,SAAS,sBAAsB,QAAgB,MAAc;AACzD,SAAO,GAAG,QAAQ,WAAW,GAAG,KAAK,MAAM,GAAG,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC,IAAI,QAAQ,UAAU,GAAG,KAAK,IAAI,IAAI,CAAC;AACjH;AASO,MAAM,cAAc;AAAA,EACvB,YAAY,MAA8B;AAAA,EAC1C,WAAW,MAA8B;AAC7C;AAEO,SAAS,YAAY,QAAoB;AAU5C,SAAO,SAAS;AAEhB,MAAI;AAEJ,QAAM,eAAe,OAAO,aAAa,QAAQ;AAEjD,WAAS,YAAY,MAAuC;AACxD,iBAAa,MAAM,QAAQ,IAAI;AAAA,EACnC;AAEA,WAAS,sBAAsB,MAAuC;AAClE,QAAI,UAAU,WAAW;AACzB,QAAI,aAAa,YAAY;AACzB,kBAAY,WAAW,GAAG,IAAI;AAAA,IAClC,WAAW,CAAC,SAAS;AACjB,UAAI,eAAe;AACf,sBAAc,KAAK,IAAI;AAAA,MAC3B,OAAO;AACH,kBAAU;AAAA,MACd;AAAA,IACJ;AAEA,QAAI,SAAS;AACT,kBAAY,IAAI;AAAA,IACpB;AAAA,EACJ;AAEA,aAAW,wBAAwB,CAAC,QAAQ,SACxC,mBAAmB,sBAAsB,QAAQ,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC;AAExE,SAAO,aAAa,QAAQ,QAAQ;AAGpC,cAAY,WAAW,KAAK,WAAY;AACpC,QAAI,CAAC,WAAW,SAAS;AACrB,sBAAgB,CAAC;AAAA,IACrB;AAAA,EACJ,CAAC;AAGD,cAAY,UAAU,KAAK,WAAS;AAChC,QAAI,eAAe,QAAQ;AACvB,UAAI,MAAM,MAAM,IAAI,aAAa,SAAS,GAAG;AACzC,mBAAW,QAAQ,eAAe;AAC9B,sBAAY,IAAI;AAAA,QACpB;AAAA,MACJ;AACA,sBAAgB;AAAA,IACpB;AAAA,EACJ,CAAC;AACL;",
5
5
  "names": []
6
6
  }
@@ -33,10 +33,25 @@ type InterceptResult<T> = T extends Promise<T> ? {
33
33
  reject: {};
34
34
  };
35
35
  export declare const MockTime: {
36
+ epoch: Date;
36
37
  readonly activeImplementation: unknown;
38
+ /**
39
+ * Revert to standard time implementation.
40
+ */
37
41
  disable(): void;
42
+ /**
43
+ * Enable time mocking. Reverts to disabled for each test file.
44
+ */
38
45
  enable(): void;
39
- reset(time?: number): void;
46
+ /**
47
+ * Sets mock time to specific time and enable the mock.
48
+ */
49
+ reset(time?: ConstructorParameters<typeof Date>[0]): void;
50
+ /**
51
+ * Enable and reset if not already enabled.
52
+ */
53
+ init(): void;
54
+ atTime<T>(time: number | Date, actor: () => T): T;
40
55
  now(): Date;
41
56
  nowMs(): number;
42
57
  getTimer(name: string, durationMs: number, callback: TimerCallback): MockTimer;
@@ -1 +1 @@
1
- {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../../src/mocks/time.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,KAAK,aAAa,GAAG,MAAM,GAAG,CAAC;AAE/B,KAAK,YAAY,GAAG,OAAO,QAAQ,CAAC;AACpC,MAAM,WAAW,QAAS,SAAQ,YAAY;CAAG;AASjD,cAAM,SAAS;;IACX,IAAI,SAAU;IACd,QAAQ,SAAK;IACb,UAAU,SAAK;IACf,UAAU,UAAS;IAKnB,SAAS,UAAS;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;gBAE7B,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa;IAgBzF,KAAK;IAOL,IAAI;CAMP;AAYD,KAAK,eAAe,CAAC,CAAC,IAClB,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,GACd;IAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,OAAO,CAAC,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,EAAE,CAAA;CAAE,GACjF;IAAE,OAAO,EAAE,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,OAAO,CAAC,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,EAAE,CAAA;CAAE,CAAC;AAY9E,eAAO,MAAM,QAAQ;mCACW,OAAO;;;;WAsB5B,IAAI;;mBAQI,MAAM,cAAc,MAAM,YAAY,aAAa,GAAG,SAAS;2BAIvD,MAAM,cAAc,MAAM,YAAY,aAAa,GAAG,SAAS;IAItF;;;;OAIG;YACW,CAAC,WAAW,WAAW,CAAC,CAAC,CAAC,2BAA0B;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE;IAgE3G;;OAEG;gBACe,MAAM;IAcxB;;;OAGG;;IAKH;;;;;OAKG;;IAOH;;;;;;;OAOG;kBACW,KAAK,SAAS,MAAM,EAAE,OAAO,EAAE,IAAI,SAAS,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,OAAO,GAAE,OAC5F,IAAI,UACD,KAAK,eACA,CACT,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,KAC/B,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IA0C5F;;OAEG;wBACiB,MAAM;yBAIL,MAAM,YAAY,aAAa;qCAKnB,aAAa;CAKjD,CAAC;AAIF,wBAAgB,SAAS,CAAC,IAAI,EAAE;IAC5B,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,GAAG,IAAI,OAAO,CAAC;IACf,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;CAC1B,QASA"}
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../../src/mocks/time.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,KAAK,aAAa,GAAG,MAAM,GAAG,CAAC;AAE/B,KAAK,YAAY,GAAG,OAAO,QAAQ,CAAC;AACpC,MAAM,WAAW,QAAS,SAAQ,YAAY;CAAG;AASjD,cAAM,SAAS;;IACX,IAAI,SAAU;IACd,QAAQ,SAAK;IACb,UAAU,SAAK;IACf,UAAU,UAAS;IAKnB,SAAS,UAAS;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;gBAE7B,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa;IAgBzF,KAAK;IAOL,IAAI;CAMP;AAYD,KAAK,eAAe,CAAC,CAAC,IAClB,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,GACd;IAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,OAAO,CAAC,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,EAAE,CAAA;CAAE,GACjF;IAAE,OAAO,EAAE,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,OAAO,CAAC,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,EAAE,CAAA;CAAE,CAAC;AAkB9E,eAAO,MAAM,QAAQ;;mCAGW,OAAO;IAInC;;OAEG;;IAMH;;OAEG;;IAMH;;OAEG;iBACS,qBAAqB,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IAMjD;;OAEG;;WAOI,CAAC,QAAQ,MAAM,GAAG,IAAI,SAAS,MAAM,CAAC,GAAG,CAAC;WAoB1C,IAAI;;mBAQI,MAAM,cAAc,MAAM,YAAY,aAAa,GAAG,SAAS;2BAIvD,MAAM,cAAc,MAAM,YAAY,aAAa,GAAG,SAAS;IAItF;;;;OAIG;YACW,CAAC,WAAW,WAAW,CAAC,CAAC,CAAC,2BAA0B;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE;IAgE3G;;OAEG;gBACe,MAAM;IAcxB;;;OAGG;;IAKH;;;;;OAKG;;IAOH;;;;;;;OAOG;kBACW,KAAK,SAAS,MAAM,EAAE,OAAO,EAAE,IAAI,SAAS,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,OAAO,GAAE,OAC5F,IAAI,UACD,KAAK,eACA,CACT,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,KAC/B,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IA0C5F;;OAEG;wBACiB,MAAM;yBAIL,MAAM,YAAY,aAAa;qCAKnB,aAAa;CAKjD,CAAC;AAIF,wBAAgB,SAAS,CAAC,IAAI,EAAE;IAC5B,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,GAAG,IAAI,OAAO,CAAC;IACf,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;CAC1B,QASA"}
@@ -61,23 +61,61 @@ function isAsync(fn) {
61
61
  let callbacks = new Array();
62
62
  let nowMs = 0;
63
63
  let real = void 0;
64
- let enabled = true;
64
+ let enabled = false;
65
+ const epoch = /* @__PURE__ */ new Date("2025-01-01 12:34:56Z");
65
66
  const MockTime = {
67
+ epoch,
66
68
  get activeImplementation() {
67
69
  return enabled ? this : real ?? this;
68
70
  },
71
+ /**
72
+ * Revert to standard time implementation.
73
+ */
69
74
  disable() {
70
75
  enabled = false;
71
- reinstallTime?.();
76
+ installActiveImplementation?.();
72
77
  },
78
+ /**
79
+ * Enable time mocking. Reverts to disabled for each test file.
80
+ */
73
81
  enable() {
74
82
  enabled = true;
75
- reinstallTime?.();
83
+ installActiveImplementation?.();
76
84
  },
77
- reset(time = 0) {
85
+ /**
86
+ * Sets mock time to specific time and enable the mock.
87
+ */
88
+ reset(time = epoch) {
78
89
  callbacks = [];
79
- nowMs = time;
80
- this.enable();
90
+ nowMs = new Date(time).getTime();
91
+ MockTime.enable();
92
+ },
93
+ /**
94
+ * Enable and reset if not already enabled.
95
+ */
96
+ init() {
97
+ if (!enabled) {
98
+ MockTime.enable();
99
+ }
100
+ },
101
+ atTime(time, actor) {
102
+ const revertTo = nowMs;
103
+ let isAsync2 = false;
104
+ try {
105
+ nowMs = typeof time === "number" ? time : time.getTime();
106
+ const result = actor();
107
+ if (typeof result?.then === "function") {
108
+ isAsync2 = true;
109
+ return Promise.resolve(result).finally(() => {
110
+ nowMs = revertTo;
111
+ });
112
+ }
113
+ return result;
114
+ } finally {
115
+ if (!isAsync2) {
116
+ nowMs = revertTo;
117
+ }
118
+ }
81
119
  },
82
120
  now() {
83
121
  return new Date(nowMs);
@@ -237,7 +275,7 @@ const MockTime = {
237
275
  callbacks.splice(index, 1);
238
276
  }
239
277
  };
240
- let reinstallTime;
278
+ let installActiveImplementation;
241
279
  function timeSetup(Time) {
242
280
  registry.register = Time.register;
243
281
  registry.unregister = Time.unregister;
@@ -245,12 +283,13 @@ function timeSetup(Time) {
245
283
  Time.startup.systemMs = Time.startup.processMs = 0;
246
284
  real = Time.get();
247
285
  MockTime.sleep = real.sleep;
248
- reinstallTime = () => Time.get = () => MockTime.activeImplementation;
249
- reinstallTime();
286
+ installActiveImplementation = () => Time.get = () => MockTime.activeImplementation;
287
+ installActiveImplementation();
250
288
  }
251
289
  Object.assign(globalThis, { MockTime });
252
290
  Boot.init(() => {
253
291
  MockTime.reset();
292
+ MockTime.disable();
254
293
  });
255
294
  export {
256
295
  MockTime,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/mocks/time.ts"],
4
- "mappings": "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",
5
- "names": []
4
+ "mappings": "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",
5
+ "names": ["isAsync"]
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"nodejs.d.ts","sourceRoot":"","sources":["../../src/nodejs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,OAAO,yBAAyB,CAAC;AAKjC,wBAAsB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,GAAG,KAAK,+DAgDzE;AAID,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,GAAG,KAAK,kBA0BhF;AAED,wBAAgB,qBAAqB,UAKpC"}
1
+ {"version":3,"file":"nodejs.d.ts","sourceRoot":"","sources":["../../src/nodejs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,OAAO,yBAAyB,CAAC;AAMjC,wBAAsB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,GAAG,KAAK,+DAkDzE;AAID,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,GAAG,KAAK,kBA0BhF;AAED,wBAAgB,qBAAqB,UAKpC"}
@@ -10,9 +10,11 @@ import { adaptReporter, afterRun, beforeRun, extendApi, generalSetup, runMocha }
10
10
  import { TestOptions } from "./options.js";
11
11
  import { FailureDetail } from "./failure-detail.js";
12
12
  import "./global-definitions.js";
13
+ import { Boot } from "./mocks/boot.js";
13
14
  import { TestDescriptor } from "./test-descriptor.js";
14
15
  extendApi(Mocha);
15
16
  async function testNodejs(runner, format) {
17
+ Boot.format = format;
16
18
  function unhandledRejection(e) {
17
19
  if (process.listenerCount("unhandledRejection") === 1) {
18
20
  const error = new Error("Unhandled rejection (ignored by mocha)");
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/nodejs.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/testing",
3
- "version": "0.14.1-alpha.0-20250607-a93593303",
3
+ "version": "0.15.0-alpha.0-20250613-a55f991d4",
4
4
  "description": "Test harness for running JavaScript and Matter certification tests",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -45,12 +45,12 @@
45
45
  "#tools/ansi-text": "@matter/tools/ansi-text"
46
46
  },
47
47
  "dependencies": {
48
- "@matter/tools": "0.14.1-alpha.0-20250607-a93593303",
49
- "@types/express": "^5.0.2",
48
+ "@matter/tools": "0.15.0-alpha.0-20250613-a55f991d4",
49
+ "@types/express": "^5.0.3",
50
50
  "ansi-colors": "^4.1.3",
51
51
  "chai": "^4.5.0",
52
52
  "chai-as-promised": "^7.1.2",
53
- "dockerode": "^4.0.6",
53
+ "dockerode": "^4.0.7",
54
54
  "express": "^5.1.0",
55
55
  "mocha": "^11.5.0",
56
56
  "playwright": "^1.51.1",
@@ -5,6 +5,7 @@
5
5
  */
6
6
 
7
7
  import { env } from "node:process";
8
+ import { FIFO_PATH } from "./container-command-pipe.js";
8
9
  import { PicsSource } from "./pics/source.js";
9
10
 
10
11
  /**
@@ -87,12 +88,7 @@ export namespace Constants {
87
88
  /**
88
89
  * Default arguments provided to the Python runner.
89
90
  */
90
- export const PythonRunnerArgs = [
91
- // Our PID is meaningless within the container but Python uses in the name of the command pipe. We pass in our
92
- // actual PID to ensure no collision if multiple instances run
93
- "--app-pid",
94
- process.pid.toString(),
95
- ];
91
+ export const PythonRunnerArgs = ["--app-pipe", FIFO_PATH];
96
92
 
97
93
  export const defaultPics: PicsSource = {
98
94
  kind: "composite",
@@ -9,7 +9,7 @@ import { Container } from "../docker/container.js";
9
9
  import { Terminal } from "../docker/terminal.js";
10
10
  import { CommandPipe } from "./command-pipe.js";
11
11
 
12
- const FIFO_PATH = "/command-pipe.fifo";
12
+ export const FIFO_PATH = "/command-pipe.fifo";
13
13
 
14
14
  /**
15
15
  * A command pipe that reads commands from a Docker container.
package/src/cli.ts CHANGED
@@ -9,7 +9,7 @@ import "./util/node-shims.js";
9
9
 
10
10
  import "./global-definitions.js";
11
11
 
12
- import { Graph, JsonNotFoundError, Package, Project, ProjectBuilder } from "#tools";
12
+ import { ansi, Graph, JsonNotFoundError, Package, Project, ProjectBuilder } from "#tools";
13
13
  import { clear } from "node:console";
14
14
  import yargs from "yargs";
15
15
  import { hideBin } from "yargs/helpers";
@@ -34,6 +34,9 @@ interface Config {
34
34
  }
35
35
 
36
36
  export async function main(argv = process.argv) {
37
+ process.on("SIGINT", interrupt);
38
+ process.on("SIGTERM", interrupt);
39
+
37
40
  const testTypes = new Set<TestType>();
38
41
 
39
42
  let ls = false;
@@ -217,3 +220,12 @@ function supportsWebTests(pkg: Package) {
217
220
  }
218
221
  return testScript.split(" ").includes("-w");
219
222
  }
223
+
224
+ function interrupt() {
225
+ process.stderr.write(`💥 ${ansi.red("Aborted")}\n`);
226
+ process.exit(1);
227
+ }
228
+
229
+ if (typeof MatterHooks !== "undefined") {
230
+ MatterHooks.interrupt = interrupt;
231
+ }
@@ -6,7 +6,7 @@
6
6
 
7
7
  import type Chai from "chai";
8
8
  import "chai-as-promised";
9
- import type { Boot } from "./mocks/boot.js";
9
+ import type { MockCrypto } from "./mocks/crypto.js";
10
10
  import type { DiagnosticMessageLike, MockLogger } from "./mocks/logging.js";
11
11
  import type { MockTime } from "./mocks/time.js";
12
12
  import type { TestDescriptor, TestSuiteDescriptor } from "./test-descriptor.js";
@@ -21,6 +21,9 @@ declare global {
21
21
  // Expose API for controlling logging
22
22
  let MockLogger: MockLogger;
23
23
 
24
+ // Expose API for controlling crypto
25
+ let MockCrypto: MockCrypto;
26
+
24
27
  /**
25
28
  * If present, the following hooks are engaged by matter.js packages to enable mocking. We use globals rather than
26
29
  * imports so we can hook the modules regardless of whether they're loaded as CommonJS or ESM.
@@ -28,10 +31,15 @@ declare global {
28
31
  let MatterHooks:
29
32
  | undefined
30
33
  | {
34
+ /**
35
+ * Abort test run.
36
+ */
37
+ interrupt(): void;
38
+
31
39
  /**
32
40
  * Set boot manager.
33
41
  */
34
- bootSetup(boot: Boot): void;
42
+ bootSetup(boot: { reboot(): void | Promise<void> }): void;
35
43
 
36
44
  /**
37
45
  * Configure time.
@@ -11,8 +11,8 @@ import Chai from "chai";
11
11
  import ChaiAsPromised from "chai-as-promised";
12
12
  import { browserSetup, extendApi, generalSetup } from "./mocha.js";
13
13
  import { bootSetup } from "./mocks/boot.js";
14
- import { cryptoSetup } from "./mocks/crypto.js";
15
- import { TheMockLogger, loggerSetup } from "./mocks/logging.js";
14
+ import { MockCrypto, cryptoSetup } from "./mocks/crypto.js";
15
+ import { MockLogger, loggerSetup } from "./mocks/logging.js";
16
16
  import { timeSetup } from "./mocks/time.js";
17
17
 
18
18
  Chai.config.truncateThreshold = 200;
@@ -22,13 +22,16 @@ Object.assign(globalThis, {
22
22
  expect: Chai.expect,
23
23
 
24
24
  MatterHooks: {
25
+ interrupt,
25
26
  bootSetup,
26
27
  loggerSetup,
27
28
  timeSetup,
28
29
  cryptoSetup,
29
30
  },
30
31
 
31
- MockLogger: TheMockLogger,
32
+ MockLogger,
33
+
34
+ MockCrypto,
32
35
  });
33
36
 
34
37
  if (globalThis === (globalThis as any).window) {
@@ -36,3 +39,7 @@ if (globalThis === (globalThis as any).window) {
36
39
  generalSetup(mocha);
37
40
  browserSetup(mocha);
38
41
  }
42
+
43
+ function interrupt() {
44
+ // Interrupt handling is platform dependent
45
+ }
package/src/mocha.ts CHANGED
@@ -72,15 +72,6 @@ export function generalSetup(mocha: Mocha) {
72
72
  filterLogs("beforeEach");
73
73
  filterLogs("afterEach");
74
74
 
75
- for (const suite of mocha.suite.suites) {
76
- suite.beforeAll(beforeEachFile);
77
-
78
- // Move our beforeAll hook so it runs before the suite's beforeAll hooks
79
- const hooks = (suite as any)._beforeAll as unknown[];
80
- const myHook = hooks.pop();
81
- hooks.unshift(myHook);
82
- }
83
-
84
75
  mocha.suite.beforeEach(function (done) {
85
76
  this.timeout(TEST_HOOK_TIMEOUT);
86
77
  return (this.currentTest as HookableTest)[beforeOneHook]?.call(this, done);
@@ -168,7 +159,20 @@ export function extendApi(Mocha: typeof MochaType) {
168
159
  });
169
160
  }
170
161
 
162
+ function instrumentSuites(mocha: Mocha) {
163
+ for (const suite of mocha.suite.suites) {
164
+ suite.beforeAll(beforeEachFile);
165
+
166
+ // Move our beforeAll hook so it runs before the suite's beforeAll hooks
167
+ const hooks = (suite as any)._beforeAll as unknown[];
168
+ const myHook = hooks.pop();
169
+ hooks.unshift(myHook);
170
+ }
171
+ }
172
+
171
173
  export async function runMocha(mocha: Mocha) {
174
+ instrumentSuites(mocha);
175
+
172
176
  await onlyLogFailure(async () => {
173
177
  for (const hook of beforeRunHooks) {
174
178
  await hook();
@@ -278,6 +282,7 @@ export function browserSetup(mocha: BrowserMocha) {
278
282
  (globalThis as any).MatterTest = {
279
283
  // Starts Mocha (called by clicking link)
280
284
  start: () => {
285
+ instrumentSuites(mocha);
281
286
  const root = document.querySelector("#mocha");
282
287
  if (root) {
283
288
  root.innerHTML = "";
package/src/mocks/boot.ts CHANGED
@@ -4,14 +4,24 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- const initializers = Array<() => void>();
7
+ /**
8
+ * On test reboot, also reboot application environment. We install this as the first initializer so application
9
+ * initializers run before test harness initializers that may mock the application components.
10
+ *
11
+ * The test harness may load multiple test environments (e.g. ESM vs CJS) so we must track the current environment to
12
+ * ensure we boot the correct version of the code.
13
+ */
14
+ const appBooters = {} as Record<string, () => void>;
8
15
 
9
16
  export interface Boot {
17
+ format: string;
10
18
  init(fn: () => void): void;
11
19
  reboot(): void;
12
20
  }
13
21
 
14
22
  export const Boot: Boot = {
23
+ format: "unknown",
24
+
15
25
  init(fn) {
16
26
  fn();
17
27
  initializers.push(fn);
@@ -24,8 +34,8 @@ export const Boot: Boot = {
24
34
  },
25
35
  };
26
36
 
27
- export function bootSetup(theBoot: Boot) {
28
- theBoot.init(() => {
29
- Boot.reboot();
30
- });
37
+ const initializers = [() => appBooters[Boot.format]?.()];
38
+
39
+ export function bootSetup(AppBoot: { reboot(): () => void }) {
40
+ appBooters[Boot.format] = AppBoot.reboot.bind(Boot);
31
41
  }