@matter/testing 0.17.7-alpha.0-20260724-baac832f7 → 0.17.7

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.
@@ -18,10 +18,17 @@ declare class MockTimer {
18
18
  #private;
19
19
  name: string;
20
20
  systemId: number;
21
- intervalMs: number;
22
- isPeriodic: boolean;
21
+ utility: boolean;
22
+ readonly isPeriodic: boolean;
23
23
  isRunning: boolean;
24
- constructor(mockTime: MockTime, name: string, duration: number, callback: TimerCallback);
24
+ constructor(mockTime: MockTime, name: string, duration: number, callback: TimerCallback, isPeriodic?: boolean);
25
+ /**
26
+ * The timer's interval.
27
+ *
28
+ * As with the production implementation, changes have no effect until the timer restarts.
29
+ */
30
+ set interval(interval: number);
31
+ get interval(): number;
25
32
  start(): this;
26
33
  stop(): this;
27
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../../src/mocks/time.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../../src/mocks/time.ts"],"names":[],"mappings":"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"}
@@ -44,6 +44,7 @@ class TestTimeoutError extends Error {
44
44
  file;
45
45
  }
46
46
  const macrotaskDependents = /* @__PURE__ */ new Set();
47
+ const timerNames = /* @__PURE__ */ new WeakMap();
47
48
  const registry = {
48
49
  timers: /* @__PURE__ */ new Set(),
49
50
  register(_timer) {
@@ -54,18 +55,23 @@ const registry = {
54
55
  class MockTimer {
55
56
  name = "Test";
56
57
  systemId = 0;
57
- intervalMs = 0;
58
- isPeriodic = false;
58
+ utility = false;
59
+ isPeriodic;
59
60
  #mockTime;
60
- #duration;
61
+ #interval = 0;
62
+ #armedInterval = 0;
61
63
  isRunning = false;
62
64
  #callback;
63
- constructor(mockTime, name, duration, callback) {
65
+ constructor(mockTime, name, duration, callback, isPeriodic = false) {
64
66
  this.name = name;
67
+ this.isPeriodic = isPeriodic;
65
68
  this.#mockTime = mockTime;
66
- this.#duration = duration;
67
- if (this instanceof MockInterval) {
68
- this.#callback = callback;
69
+ this.interval = duration;
70
+ if (isPeriodic) {
71
+ this.#callback = async () => {
72
+ this.#mockTime.callbackAtTime(this.#mockTime.nowMs + this.#armedInterval, this.#callback);
73
+ await callback();
74
+ };
69
75
  } else {
70
76
  this.#callback = () => {
71
77
  this.#close();
@@ -73,9 +79,30 @@ class MockTimer {
73
79
  };
74
80
  }
75
81
  }
82
+ /**
83
+ * The timer's interval.
84
+ *
85
+ * As with the production implementation, changes have no effect until the timer restarts.
86
+ */
87
+ set interval(interval) {
88
+ if (interval < 0 || interval > 2147483647) {
89
+ throw new Error(
90
+ `Invalid intervalMs: ${interval}. The value must be between 0 and 32-bit maximum value (2147483647)`
91
+ );
92
+ }
93
+ this.#interval = interval;
94
+ }
95
+ get interval() {
96
+ return this.#interval;
97
+ }
76
98
  start() {
99
+ if (this.isRunning) {
100
+ this.stop();
101
+ }
77
102
  registry.register(this);
78
- this.#mockTime.callbackAtTime(this.#mockTime.nowMs + this.#duration, this.#callback);
103
+ timerNames.set(this.#callback, `${this.name}(${this.#interval}${this.isPeriodic ? ",periodic" : ""})`);
104
+ this.#armedInterval = this.#interval;
105
+ this.#mockTime.callbackAtTime(this.#mockTime.nowMs + this.#armedInterval, this.#callback);
79
106
  this.isRunning = true;
80
107
  return this;
81
108
  }
@@ -89,15 +116,6 @@ class MockTimer {
89
116
  this.isRunning = false;
90
117
  }
91
118
  }
92
- class MockInterval extends MockTimer {
93
- constructor(mockTime, name, duration, callback) {
94
- const intervalCallback = async () => {
95
- mockTime.callbackAtTime(mockTime.nowMs + duration, intervalCallback);
96
- await callback();
97
- };
98
- super(mockTime, name, duration, intervalCallback);
99
- }
100
- }
101
119
  function isAsync(fn) {
102
120
  return fn.constructor.name === "AsyncFunction";
103
121
  }
@@ -195,7 +213,7 @@ const MockTime = {
195
213
  return new MockTimer(this, name, duration, callback);
196
214
  },
197
215
  getPeriodicTimer(name, interval, callback) {
198
- return new MockInterval(this, name, interval, callback);
216
+ return new MockTimer(this, name, interval, callback, true);
199
217
  },
200
218
  /**
201
219
  * Time compatible sleep.
@@ -289,11 +307,20 @@ const MockTime = {
289
307
  */
290
308
  async advance(ms) {
291
309
  const newTimeMs = nowMs + ms;
310
+ let previousAtMs;
311
+ let iterationsAtSameTime = 0;
292
312
  while (callbacks.length) {
293
313
  const { atMs, callback } = callbacks[0];
294
314
  if (atMs > newTimeMs) break;
295
315
  callbacks.shift();
296
316
  nowMs = atMs;
317
+ iterationsAtSameTime = atMs === previousAtMs ? iterationsAtSameTime + 1 : 0;
318
+ previousAtMs = atMs;
319
+ if (iterationsAtSameTime > 1e4) {
320
+ throw new TestTimeoutError(
321
+ `Timer ${timerNames.get(callback) ?? "(unknown)"} rearms without advancing mock time`
322
+ );
323
+ }
297
324
  await callback();
298
325
  }
299
326
  nowMs = newTimeMs;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/mocks/time.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["isAsync"]
6
6
  }
@@ -18,10 +18,17 @@ declare class MockTimer {
18
18
  #private;
19
19
  name: string;
20
20
  systemId: number;
21
- intervalMs: number;
22
- isPeriodic: boolean;
21
+ utility: boolean;
22
+ readonly isPeriodic: boolean;
23
23
  isRunning: boolean;
24
- constructor(mockTime: MockTime, name: string, duration: number, callback: TimerCallback);
24
+ constructor(mockTime: MockTime, name: string, duration: number, callback: TimerCallback, isPeriodic?: boolean);
25
+ /**
26
+ * The timer's interval.
27
+ *
28
+ * As with the production implementation, changes have no effect until the timer restarts.
29
+ */
30
+ set interval(interval: number);
31
+ get interval(): number;
25
32
  start(): this;
26
33
  stop(): this;
27
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../../src/mocks/time.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../../src/mocks/time.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ class TestTimeoutError extends Error {
19
19
  file;
20
20
  }
21
21
  const macrotaskDependents = /* @__PURE__ */ new Set();
22
+ const timerNames = /* @__PURE__ */ new WeakMap();
22
23
  const registry = {
23
24
  timers: /* @__PURE__ */ new Set(),
24
25
  register(_timer) {
@@ -29,18 +30,23 @@ const registry = {
29
30
  class MockTimer {
30
31
  name = "Test";
31
32
  systemId = 0;
32
- intervalMs = 0;
33
- isPeriodic = false;
33
+ utility = false;
34
+ isPeriodic;
34
35
  #mockTime;
35
- #duration;
36
+ #interval = 0;
37
+ #armedInterval = 0;
36
38
  isRunning = false;
37
39
  #callback;
38
- constructor(mockTime, name, duration, callback) {
40
+ constructor(mockTime, name, duration, callback, isPeriodic = false) {
39
41
  this.name = name;
42
+ this.isPeriodic = isPeriodic;
40
43
  this.#mockTime = mockTime;
41
- this.#duration = duration;
42
- if (this instanceof MockInterval) {
43
- this.#callback = callback;
44
+ this.interval = duration;
45
+ if (isPeriodic) {
46
+ this.#callback = async () => {
47
+ this.#mockTime.callbackAtTime(this.#mockTime.nowMs + this.#armedInterval, this.#callback);
48
+ await callback();
49
+ };
44
50
  } else {
45
51
  this.#callback = () => {
46
52
  this.#close();
@@ -48,9 +54,30 @@ class MockTimer {
48
54
  };
49
55
  }
50
56
  }
57
+ /**
58
+ * The timer's interval.
59
+ *
60
+ * As with the production implementation, changes have no effect until the timer restarts.
61
+ */
62
+ set interval(interval) {
63
+ if (interval < 0 || interval > 2147483647) {
64
+ throw new Error(
65
+ `Invalid intervalMs: ${interval}. The value must be between 0 and 32-bit maximum value (2147483647)`
66
+ );
67
+ }
68
+ this.#interval = interval;
69
+ }
70
+ get interval() {
71
+ return this.#interval;
72
+ }
51
73
  start() {
74
+ if (this.isRunning) {
75
+ this.stop();
76
+ }
52
77
  registry.register(this);
53
- this.#mockTime.callbackAtTime(this.#mockTime.nowMs + this.#duration, this.#callback);
78
+ timerNames.set(this.#callback, `${this.name}(${this.#interval}${this.isPeriodic ? ",periodic" : ""})`);
79
+ this.#armedInterval = this.#interval;
80
+ this.#mockTime.callbackAtTime(this.#mockTime.nowMs + this.#armedInterval, this.#callback);
54
81
  this.isRunning = true;
55
82
  return this;
56
83
  }
@@ -64,15 +91,6 @@ class MockTimer {
64
91
  this.isRunning = false;
65
92
  }
66
93
  }
67
- class MockInterval extends MockTimer {
68
- constructor(mockTime, name, duration, callback) {
69
- const intervalCallback = async () => {
70
- mockTime.callbackAtTime(mockTime.nowMs + duration, intervalCallback);
71
- await callback();
72
- };
73
- super(mockTime, name, duration, intervalCallback);
74
- }
75
- }
76
94
  function isAsync(fn) {
77
95
  return fn.constructor.name === "AsyncFunction";
78
96
  }
@@ -170,7 +188,7 @@ const MockTime = {
170
188
  return new MockTimer(this, name, duration, callback);
171
189
  },
172
190
  getPeriodicTimer(name, interval, callback) {
173
- return new MockInterval(this, name, interval, callback);
191
+ return new MockTimer(this, name, interval, callback, true);
174
192
  },
175
193
  /**
176
194
  * Time compatible sleep.
@@ -264,11 +282,20 @@ const MockTime = {
264
282
  */
265
283
  async advance(ms) {
266
284
  const newTimeMs = nowMs + ms;
285
+ let previousAtMs;
286
+ let iterationsAtSameTime = 0;
267
287
  while (callbacks.length) {
268
288
  const { atMs, callback } = callbacks[0];
269
289
  if (atMs > newTimeMs) break;
270
290
  callbacks.shift();
271
291
  nowMs = atMs;
292
+ iterationsAtSameTime = atMs === previousAtMs ? iterationsAtSameTime + 1 : 0;
293
+ previousAtMs = atMs;
294
+ if (iterationsAtSameTime > 1e4) {
295
+ throw new TestTimeoutError(
296
+ `Timer ${timerNames.get(callback) ?? "(unknown)"} rearms without advancing mock time`
297
+ );
298
+ }
272
299
  await callback();
273
300
  }
274
301
  nowMs = newTimeMs;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/mocks/time.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["isAsync"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/testing",
3
- "version": "0.17.7-alpha.0-20260724-baac832f7",
3
+ "version": "0.17.7",
4
4
  "description": "Test harness for running JavaScript and Matter certification tests",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -50,12 +50,12 @@
50
50
  "esbuild": "^0.28.1",
51
51
  "express": "^5.2.1",
52
52
  "mocha": "^11.7.6",
53
- "playwright": "^1.61.1",
53
+ "playwright": "^1.62.0",
54
54
  "trace-unhandled": "^2.0.1",
55
55
  "wtfnode": "^0.10.1",
56
56
  "xml2js": "^0.6.2",
57
57
  "yaml": "^2.9.0",
58
- "yargs": "^18.0.0"
58
+ "yargs": "^18.1.0"
59
59
  },
60
60
  "devDependencies": {
61
61
  "typescript": "~6.0.3",
package/src/mocks/time.ts CHANGED
@@ -31,6 +31,8 @@ export interface MockTime extends MockTimeLike {}
31
31
 
32
32
  const macrotaskDependents = new Set<Promise<unknown>>();
33
33
 
34
+ const timerNames = new WeakMap<TimerCallback, string>();
35
+
34
36
  const registry = {
35
37
  timers: new Set<MockTimer>(),
36
38
  register(_timer: MockTimer) {},
@@ -41,23 +43,28 @@ const registry = {
41
43
  class MockTimer {
42
44
  name = "Test";
43
45
  systemId = 0;
44
- intervalMs = 0;
45
- isPeriodic = false;
46
+ utility = false;
47
+ readonly isPeriodic: boolean;
46
48
 
47
49
  #mockTime: MockTime;
48
- #duration: number;
50
+ #interval = 0;
51
+ #armedInterval = 0;
49
52
 
50
53
  isRunning = false;
51
54
  readonly #callback: TimerCallback;
52
55
 
53
- constructor(mockTime: MockTime, name: string, duration: number, callback: TimerCallback) {
56
+ constructor(mockTime: MockTime, name: string, duration: number, callback: TimerCallback, isPeriodic = false) {
54
57
  this.name = name;
58
+ this.isPeriodic = isPeriodic;
55
59
 
56
60
  this.#mockTime = mockTime;
57
- this.#duration = duration;
61
+ this.interval = duration;
58
62
 
59
- if (this instanceof MockInterval) {
60
- this.#callback = callback;
63
+ if (isPeriodic) {
64
+ this.#callback = async () => {
65
+ this.#mockTime.callbackAtTime(this.#mockTime.nowMs + this.#armedInterval, this.#callback);
66
+ await callback();
67
+ };
61
68
  } else {
62
69
  this.#callback = () => {
63
70
  this.#close();
@@ -66,9 +73,32 @@ class MockTimer {
66
73
  }
67
74
  }
68
75
 
76
+ /**
77
+ * The timer's interval.
78
+ *
79
+ * As with the production implementation, changes have no effect until the timer restarts.
80
+ */
81
+ set interval(interval: number) {
82
+ if (interval < 0 || interval > 2147483647) {
83
+ throw new Error(
84
+ `Invalid intervalMs: ${interval}. The value must be between 0 and 32-bit maximum value (2147483647)`,
85
+ );
86
+ }
87
+ this.#interval = interval;
88
+ }
89
+
90
+ get interval() {
91
+ return this.#interval;
92
+ }
93
+
69
94
  start() {
95
+ if (this.isRunning) {
96
+ this.stop();
97
+ }
70
98
  registry.register(this);
71
- this.#mockTime.callbackAtTime(this.#mockTime.nowMs + this.#duration, this.#callback);
99
+ timerNames.set(this.#callback, `${this.name}(${this.#interval}${this.isPeriodic ? ",periodic" : ""})`);
100
+ this.#armedInterval = this.#interval;
101
+ this.#mockTime.callbackAtTime(this.#mockTime.nowMs + this.#armedInterval, this.#callback);
72
102
  this.isRunning = true;
73
103
  return this;
74
104
  }
@@ -85,16 +115,6 @@ class MockTimer {
85
115
  }
86
116
  }
87
117
 
88
- class MockInterval extends MockTimer {
89
- constructor(mockTime: MockTime, name: string, duration: number, callback: TimerCallback) {
90
- const intervalCallback = async () => {
91
- mockTime.callbackAtTime(mockTime.nowMs + duration, intervalCallback);
92
- await callback();
93
- };
94
- super(mockTime, name, duration, intervalCallback);
95
- }
96
- }
97
-
98
118
  type InterceptResult<T> =
99
119
  T extends Promise<T>
100
120
  ? { resolve: Awaited<T>; reject?: undefined } | { resolve?: undefined; reject: {} }
@@ -233,7 +253,7 @@ export const MockTime = {
233
253
  },
234
254
 
235
255
  getPeriodicTimer(name: string, interval: number, callback: TimerCallback): MockTimer {
236
- return new MockInterval(this, name, interval, callback);
256
+ return new MockTimer(this, name, interval, callback, true);
237
257
  },
238
258
 
239
259
  /**
@@ -357,11 +377,24 @@ export const MockTime = {
357
377
  async advance(ms: number) {
358
378
  const newTimeMs = nowMs + ms;
359
379
 
380
+ let previousAtMs: number | undefined;
381
+ let iterationsAtSameTime = 0;
360
382
  while (callbacks.length) {
361
383
  const { atMs, callback } = callbacks[0];
362
384
  if (atMs > newTimeMs) break;
363
385
  callbacks.shift();
364
386
  nowMs = atMs;
387
+
388
+ // A timer that rearms at the current time never lets the mock clock advance, so without this guard the
389
+ // loop spins indefinitely
390
+ iterationsAtSameTime = atMs === previousAtMs ? iterationsAtSameTime + 1 : 0;
391
+ previousAtMs = atMs;
392
+ if (iterationsAtSameTime > 10000) {
393
+ throw new TestTimeoutError(
394
+ `Timer ${timerNames.get(callback) ?? "(unknown)"} rearms without advancing mock time`,
395
+ );
396
+ }
397
+
365
398
  await callback();
366
399
  }
367
400
 
@@ -75,7 +75,106 @@ describe("MockTime", () => {
75
75
  });
76
76
  });
77
77
 
78
+ describe("interval", () => {
79
+ it("reports the construction duration", () => {
80
+ expect(MockTime.getTimer("Test", 30, () => {}).interval).equal(30);
81
+ expect(MockTime.getPeriodicTimer("Test periodic", 30, () => {}).interval).equal(30);
82
+ });
83
+
84
+ it("controls the fire time of a subsequent start", async () => {
85
+ let firedTime;
86
+
87
+ const timer = MockTime.getTimer("Test", 30, () => (firedTime = MockTime.nowMs));
88
+ timer.start();
89
+ timer.stop();
90
+
91
+ timer.interval = 100;
92
+ timer.start();
93
+
94
+ await MockTime.advance(50);
95
+ expect(firedTime).equal(undefined);
96
+
97
+ await MockTime.advance(50);
98
+ expect(firedTime).equal(FAKE_TIME + 100);
99
+ });
100
+
101
+ it("does not affect a running timer until it restarts", async () => {
102
+ const firedTimes = new Array<number>();
103
+
104
+ const timer = MockTime.getTimer("Test", 30, () => firedTimes.push(MockTime.nowMs));
105
+ timer.start();
106
+ timer.interval = 100;
107
+
108
+ await MockTime.advance(30);
109
+ expect(firedTimes).deep.equal([FAKE_TIME + 30]);
110
+
111
+ timer.start();
112
+
113
+ await MockTime.advance(100);
114
+ expect(firedTimes).deep.equal([FAKE_TIME + 30, FAKE_TIME + 130]);
115
+ });
116
+
117
+ it("controls the period of a periodic timer from the next start", async () => {
118
+ const firedTimes = new Array<number>();
119
+
120
+ const timer = MockTime.getPeriodicTimer("Test periodic", 30, () => firedTimes.push(MockTime.nowMs));
121
+ timer.start();
122
+ timer.interval = 50;
123
+
124
+ // The armed period continues to apply while running
125
+ await MockTime.advance(60);
126
+ expect(firedTimes).deep.equal([FAKE_TIME + 30, FAKE_TIME + 60]);
127
+
128
+ timer.stop();
129
+ timer.start();
130
+
131
+ await MockTime.advance(100);
132
+ expect(firedTimes).deep.equal([FAKE_TIME + 30, FAKE_TIME + 60, FAKE_TIME + 110, FAKE_TIME + 160]);
133
+
134
+ timer.stop();
135
+ });
136
+
137
+ it("rejects out-of-range values", () => {
138
+ const timer = MockTime.getTimer("Test", 30, () => {});
139
+
140
+ expect(() => (timer.interval = -1)).throws("must be between");
141
+ expect(() => (timer.interval = 2_147_483_648)).throws("must be between");
142
+ expect(() => MockTime.getTimer("Test", -1, () => {})).throws("must be between");
143
+ expect(() => MockTime.getPeriodicTimer("Test periodic", 2_147_483_648, () => {})).throws("must be between");
144
+
145
+ expect(timer.interval).equal(30);
146
+ });
147
+ });
148
+
149
+ describe("advance", () => {
150
+ it("rejects a timer that rearms without advancing time", async () => {
151
+ MockTime.getPeriodicTimer("Spinner", 0, () => {}).start();
152
+
153
+ await expect(MockTime.advance(1)).rejectedWith("Spinner");
154
+ });
155
+ });
156
+
157
+ describe("isPeriodic", () => {
158
+ it("distinguishes one-shot from periodic timers", () => {
159
+ expect(MockTime.getTimer("Test", 30, () => {}).isPeriodic).equal(false);
160
+ expect(MockTime.getPeriodicTimer("Test periodic", 30, () => {}).isPeriodic).equal(true);
161
+ });
162
+ });
163
+
78
164
  describe("getTimer", () => {
165
+ it("restarts rather than double-arming when started while running", async () => {
166
+ const firedTimes = new Array<number>();
167
+
168
+ const timer = MockTime.getTimer("Test", 30, () => firedTimes.push(MockTime.nowMs));
169
+ timer.start();
170
+
171
+ await MockTime.advance(10);
172
+ timer.start();
173
+
174
+ await MockTime.advance(100);
175
+ expect(firedTimes).deep.equal([FAKE_TIME + 40]);
176
+ });
177
+
79
178
  it("returns a timer that will call a callback in the future", async () => {
80
179
  let firedTime;
81
180