@matter/testing 0.14.1-alpha.0-20250606-a9bcd03f9 → 0.15.0-alpha.0-20250612-ddd428561
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/cli.d.ts.map +1 -1
- package/dist/cjs/cli.js +10 -0
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/global-declarations.d.ts +9 -2
- package/dist/cjs/global-declarations.d.ts.map +1 -1
- package/dist/cjs/global-definitions.js +5 -1
- package/dist/cjs/global-definitions.js.map +1 -1
- package/dist/cjs/mocha.d.ts.map +1 -1
- package/dist/cjs/mocha.js +10 -6
- package/dist/cjs/mocha.js.map +1 -1
- package/dist/cjs/mocks/boot.d.ts +4 -1
- package/dist/cjs/mocks/boot.d.ts.map +1 -1
- package/dist/cjs/mocks/boot.js +5 -5
- package/dist/cjs/mocks/boot.js.map +1 -1
- package/dist/cjs/mocks/crypto.d.ts +27 -1
- package/dist/cjs/mocks/crypto.d.ts.map +1 -1
- package/dist/cjs/mocks/crypto.js +56 -43
- package/dist/cjs/mocks/crypto.js.map +1 -1
- package/dist/cjs/mocks/logging.d.ts +1 -1
- package/dist/cjs/mocks/logging.d.ts.map +1 -1
- package/dist/cjs/mocks/logging.js +5 -5
- package/dist/cjs/mocks/logging.js.map +1 -1
- package/dist/cjs/mocks/time.d.ts +16 -1
- package/dist/cjs/mocks/time.d.ts.map +1 -1
- package/dist/cjs/mocks/time.js +48 -9
- package/dist/cjs/mocks/time.js.map +2 -2
- package/dist/cjs/nodejs.d.ts.map +1 -1
- package/dist/cjs/nodejs.js +2 -0
- package/dist/cjs/nodejs.js.map +1 -1
- package/dist/esm/cli.d.ts.map +1 -1
- package/dist/esm/cli.js +11 -1
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/global-declarations.d.ts +9 -2
- package/dist/esm/global-declarations.d.ts.map +1 -1
- package/dist/esm/global-definitions.js +7 -3
- package/dist/esm/global-definitions.js.map +1 -1
- package/dist/esm/mocha.d.ts.map +1 -1
- package/dist/esm/mocha.js +10 -6
- package/dist/esm/mocha.js.map +1 -1
- package/dist/esm/mocks/boot.d.ts +4 -1
- package/dist/esm/mocks/boot.d.ts.map +1 -1
- package/dist/esm/mocks/boot.js +5 -5
- package/dist/esm/mocks/boot.js.map +1 -1
- package/dist/esm/mocks/crypto.d.ts +27 -1
- package/dist/esm/mocks/crypto.d.ts.map +1 -1
- package/dist/esm/mocks/crypto.js +56 -43
- package/dist/esm/mocks/crypto.js.map +1 -1
- package/dist/esm/mocks/logging.d.ts +1 -1
- package/dist/esm/mocks/logging.d.ts.map +1 -1
- package/dist/esm/mocks/logging.js +5 -5
- package/dist/esm/mocks/logging.js.map +1 -1
- package/dist/esm/mocks/time.d.ts +16 -1
- package/dist/esm/mocks/time.d.ts.map +1 -1
- package/dist/esm/mocks/time.js +48 -9
- package/dist/esm/mocks/time.js.map +2 -2
- package/dist/esm/nodejs.d.ts.map +1 -1
- package/dist/esm/nodejs.js +2 -0
- package/dist/esm/nodejs.js.map +1 -1
- package/package.json +4 -4
- package/src/cli.ts +13 -1
- package/src/global-declarations.ts +10 -2
- package/src/global-definitions.ts +10 -3
- package/src/mocha.ts +14 -9
- package/src/mocks/boot.ts +15 -5
- package/src/mocks/crypto.ts +95 -49
- package/src/mocks/logging.ts +4 -4
- package/src/mocks/time.ts +56 -11
- package/src/nodejs.ts +3 -0
package/src/mocks/time.ts
CHANGED
|
@@ -83,30 +83,74 @@ function isAsync(fn: (...args: any) => any): fn is (...args: any) => Promise<any
|
|
|
83
83
|
let callbacks = new Array<{ atMs: number; callback: TimerCallback }>();
|
|
84
84
|
let nowMs = 0;
|
|
85
85
|
let real = undefined as unknown;
|
|
86
|
-
let enabled =
|
|
86
|
+
let enabled = false;
|
|
87
87
|
|
|
88
|
-
|
|
88
|
+
/**
|
|
89
|
+
* An arbitrary start for our mock timeline. Starting at zero causes problems with Matter dates that cannot encode back
|
|
90
|
+
* to the UNIX epoch
|
|
91
|
+
*/
|
|
92
|
+
const epoch = new Date("2025-01-01 12:34:56Z");
|
|
93
|
+
|
|
94
|
+
// Must match matter.js Time interface (with extensions)
|
|
89
95
|
export const MockTime = {
|
|
96
|
+
epoch,
|
|
97
|
+
|
|
90
98
|
get activeImplementation(): unknown {
|
|
91
99
|
return enabled ? this : (real ?? this);
|
|
92
100
|
},
|
|
93
101
|
|
|
102
|
+
/**
|
|
103
|
+
* Revert to standard time implementation.
|
|
104
|
+
*/
|
|
94
105
|
disable() {
|
|
95
106
|
enabled = false;
|
|
96
|
-
|
|
107
|
+
installActiveImplementation?.();
|
|
97
108
|
},
|
|
98
109
|
|
|
110
|
+
/**
|
|
111
|
+
* Enable time mocking. Reverts to disabled for each test file.
|
|
112
|
+
*/
|
|
99
113
|
enable() {
|
|
100
114
|
enabled = true;
|
|
101
|
-
|
|
115
|
+
installActiveImplementation?.();
|
|
102
116
|
},
|
|
103
117
|
|
|
104
|
-
|
|
118
|
+
/**
|
|
119
|
+
* Sets mock time to specific time and enable the mock.
|
|
120
|
+
*/
|
|
121
|
+
reset(time: ConstructorParameters<typeof Date>[0] = epoch) {
|
|
105
122
|
callbacks = [];
|
|
106
|
-
nowMs = time;
|
|
123
|
+
nowMs = new Date(time).getTime();
|
|
124
|
+
MockTime.enable();
|
|
125
|
+
},
|
|
107
126
|
|
|
108
|
-
|
|
109
|
-
|
|
127
|
+
/**
|
|
128
|
+
* Enable and reset if not already enabled.
|
|
129
|
+
*/
|
|
130
|
+
init() {
|
|
131
|
+
if (!enabled) {
|
|
132
|
+
MockTime.enable();
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
|
|
136
|
+
atTime<T>(time: number | Date, actor: () => T): T {
|
|
137
|
+
const revertTo = nowMs;
|
|
138
|
+
let isAsync = false;
|
|
139
|
+
try {
|
|
140
|
+
nowMs = typeof time === "number" ? time : time.getTime();
|
|
141
|
+
const result = actor();
|
|
142
|
+
if (typeof (result as any)?.then === "function") {
|
|
143
|
+
isAsync = true;
|
|
144
|
+
return Promise.resolve(result).finally(() => {
|
|
145
|
+
nowMs = revertTo;
|
|
146
|
+
}) as T;
|
|
147
|
+
}
|
|
148
|
+
return result;
|
|
149
|
+
} finally {
|
|
150
|
+
if (!isAsync) {
|
|
151
|
+
nowMs = revertTo;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
110
154
|
},
|
|
111
155
|
|
|
112
156
|
now(): Date {
|
|
@@ -305,7 +349,7 @@ export const MockTime = {
|
|
|
305
349
|
},
|
|
306
350
|
};
|
|
307
351
|
|
|
308
|
-
let
|
|
352
|
+
let installActiveImplementation: undefined | (() => void);
|
|
309
353
|
|
|
310
354
|
export function timeSetup(Time: {
|
|
311
355
|
startup: { systemMs: number; processMs: number };
|
|
@@ -320,12 +364,13 @@ export function timeSetup(Time: {
|
|
|
320
364
|
Time.startup.systemMs = Time.startup.processMs = 0;
|
|
321
365
|
real = Time.get();
|
|
322
366
|
(MockTime as any).sleep = (real as any).sleep;
|
|
323
|
-
|
|
324
|
-
|
|
367
|
+
installActiveImplementation = () => (Time.get = () => MockTime.activeImplementation);
|
|
368
|
+
installActiveImplementation();
|
|
325
369
|
}
|
|
326
370
|
|
|
327
371
|
Object.assign(globalThis, { MockTime });
|
|
328
372
|
|
|
329
373
|
Boot.init(() => {
|
|
330
374
|
MockTime.reset();
|
|
375
|
+
MockTime.disable();
|
|
331
376
|
});
|
package/src/nodejs.ts
CHANGED
|
@@ -15,11 +15,14 @@ import type { TestRunner } from "./runner.js";
|
|
|
15
15
|
// Load globals so settings get applied
|
|
16
16
|
import { FailureDetail } from "./failure-detail.js";
|
|
17
17
|
import "./global-definitions.js";
|
|
18
|
+
import { Boot } from "./mocks/boot.js";
|
|
18
19
|
import { TestDescriptor } from "./test-descriptor.js";
|
|
19
20
|
|
|
20
21
|
extendApi(Mocha);
|
|
21
22
|
|
|
22
23
|
export async function testNodejs(runner: TestRunner, format: "cjs" | "esm") {
|
|
24
|
+
Boot.format = format;
|
|
25
|
+
|
|
23
26
|
// Grr Mocha (as of 10.2.0) classifies certain unhandled rejections as "mocha". For others, it uninstalls its
|
|
24
27
|
// unhandled rejection handler and re-emits the "unhandledRejection" event. But since it already handled the event,
|
|
25
28
|
// Node knows nothing about this and the event disappears silently.
|