@matter/testing 0.12.2 → 0.12.3-alpha.0-20250205-ad3416ca3

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 (94) hide show
  1. package/dist/cjs/cli.js +1 -1
  2. package/dist/cjs/cli.js.map +1 -1
  3. package/dist/cjs/failure-detail.d.ts +7 -6
  4. package/dist/cjs/failure-detail.d.ts.map +1 -1
  5. package/dist/cjs/failure-detail.js +26 -75
  6. package/dist/cjs/failure-detail.js.map +2 -2
  7. package/dist/cjs/failure-reporter.d.ts +11 -0
  8. package/dist/cjs/failure-reporter.d.ts.map +1 -0
  9. package/dist/cjs/failure-reporter.js +78 -0
  10. package/dist/cjs/failure-reporter.js.map +6 -0
  11. package/dist/cjs/global-declarations.d.ts +8 -0
  12. package/dist/cjs/global-declarations.d.ts.map +1 -1
  13. package/dist/cjs/mocha.d.ts.map +1 -1
  14. package/dist/cjs/mocha.js +4 -3
  15. package/dist/cjs/mocha.js.map +1 -1
  16. package/dist/cjs/mocks/logging.js +2 -12
  17. package/dist/cjs/mocks/logging.js.map +2 -2
  18. package/dist/cjs/nodejs-reporter.d.ts +24 -0
  19. package/dist/cjs/nodejs-reporter.d.ts.map +1 -0
  20. package/dist/cjs/nodejs-reporter.js +123 -0
  21. package/dist/cjs/nodejs-reporter.js.map +6 -0
  22. package/dist/cjs/package.json +2 -1
  23. package/dist/cjs/reporter.d.ts +0 -23
  24. package/dist/cjs/reporter.d.ts.map +1 -1
  25. package/dist/cjs/reporter.js +0 -141
  26. package/dist/cjs/reporter.js.map +2 -2
  27. package/dist/cjs/runner.d.ts.map +1 -1
  28. package/dist/cjs/runner.js +7 -7
  29. package/dist/cjs/runner.js.map +2 -2
  30. package/dist/cjs/text-diff.d.ts +10 -0
  31. package/dist/cjs/text-diff.d.ts.map +1 -0
  32. package/dist/cjs/text-diff.js +37 -0
  33. package/dist/cjs/text-diff.js.map +6 -0
  34. package/dist/cjs/web-reporter.d.ts +22 -0
  35. package/dist/cjs/web-reporter.d.ts.map +1 -0
  36. package/dist/cjs/web-reporter.js +58 -0
  37. package/dist/cjs/web-reporter.js.map +6 -0
  38. package/dist/cjs/web.d.ts.map +1 -1
  39. package/dist/cjs/web.js +3 -3
  40. package/dist/cjs/web.js.map +1 -1
  41. package/dist/esm/cli.js +2 -2
  42. package/dist/esm/cli.js.map +1 -1
  43. package/dist/esm/failure-detail.d.ts +7 -6
  44. package/dist/esm/failure-detail.d.ts.map +1 -1
  45. package/dist/esm/failure-detail.js +26 -65
  46. package/dist/esm/failure-detail.js.map +2 -2
  47. package/dist/esm/failure-reporter.d.ts +11 -0
  48. package/dist/esm/failure-reporter.d.ts.map +1 -0
  49. package/dist/esm/failure-reporter.js +58 -0
  50. package/dist/esm/failure-reporter.js.map +6 -0
  51. package/dist/esm/global-declarations.d.ts +8 -0
  52. package/dist/esm/global-declarations.d.ts.map +1 -1
  53. package/dist/esm/mocha.d.ts.map +1 -1
  54. package/dist/esm/mocha.js +4 -3
  55. package/dist/esm/mocha.js.map +1 -1
  56. package/dist/esm/mocks/logging.js +2 -2
  57. package/dist/esm/mocks/logging.js.map +1 -1
  58. package/dist/esm/nodejs-reporter.d.ts +24 -0
  59. package/dist/esm/nodejs-reporter.d.ts.map +1 -0
  60. package/dist/esm/nodejs-reporter.js +103 -0
  61. package/dist/esm/nodejs-reporter.js.map +6 -0
  62. package/dist/esm/package.json +2 -1
  63. package/dist/esm/reporter.d.ts +0 -23
  64. package/dist/esm/reporter.d.ts.map +1 -1
  65. package/dist/esm/reporter.js +0 -127
  66. package/dist/esm/reporter.js.map +1 -1
  67. package/dist/esm/runner.d.ts.map +1 -1
  68. package/dist/esm/runner.js +8 -8
  69. package/dist/esm/runner.js.map +1 -1
  70. package/dist/esm/text-diff.d.ts +10 -0
  71. package/dist/esm/text-diff.d.ts.map +1 -0
  72. package/dist/esm/text-diff.js +17 -0
  73. package/dist/esm/text-diff.js.map +6 -0
  74. package/dist/esm/web-reporter.d.ts +22 -0
  75. package/dist/esm/web-reporter.d.ts.map +1 -0
  76. package/dist/esm/web-reporter.js +38 -0
  77. package/dist/esm/web-reporter.js.map +6 -0
  78. package/dist/esm/web.d.ts.map +1 -1
  79. package/dist/esm/web.js +3 -3
  80. package/dist/esm/web.js.map +1 -1
  81. package/package.json +4 -3
  82. package/src/cli.ts +2 -2
  83. package/src/failure-detail.ts +41 -64
  84. package/src/failure-reporter.ts +65 -0
  85. package/src/global-declarations.ts +8 -0
  86. package/src/mocha.ts +5 -3
  87. package/src/mocks/logging.ts +2 -2
  88. package/src/nodejs-reporter.ts +123 -0
  89. package/src/reporter.ts +0 -147
  90. package/src/runner.ts +10 -7
  91. package/src/text-diff.ts +16 -0
  92. package/src/tsconfig.json +5 -1
  93. package/src/web-reporter.ts +51 -0
  94. package/src/web.ts +4 -3
@@ -3,131 +3,4 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import colors from "ansi-colors";
7
- import { FailureDetail } from "./failure-detail.js";
8
- class ProgressReporter {
9
- constructor(progress) {
10
- this.progress = progress;
11
- }
12
- #run = "";
13
- #suite = Array();
14
- #test;
15
- #step;
16
- #stats;
17
- #failures = Array();
18
- #lastTitle;
19
- beginRun(name, stats, supportsSuites = true) {
20
- this.#run = name;
21
- this.#suite = [];
22
- this.#failures = [];
23
- if (!supportsSuites) {
24
- this.progress.update(this.#summarize(stats));
25
- }
26
- }
27
- beginSuite(name) {
28
- this.#suite = name;
29
- }
30
- beginTest(name, stats) {
31
- this.#test = name;
32
- this.#stats = stats;
33
- this.#step = void 0;
34
- const title = process.stdout.isTTY ? this.#formatName(this.#suite, name) : this.#suite[0];
35
- this.#updateTitle(title);
36
- }
37
- beginStep(name) {
38
- this.#step = name;
39
- if (process.stdout.isTTY && this.#test) {
40
- const title = this.#formatName(this.#suite, this.#test, name);
41
- this.#updateTitle(title);
42
- }
43
- }
44
- #updateTitle(title) {
45
- if (title === this.#lastTitle) {
46
- return;
47
- }
48
- this.#lastTitle = title;
49
- this.progress.update(this.#summarize(this.#stats), title);
50
- }
51
- failTest(name, detail) {
52
- this.#failures.push({
53
- suite: this.#suite,
54
- test: name,
55
- step: this.#step,
56
- detail
57
- });
58
- }
59
- endRun(stats) {
60
- if (this.#failures.length) {
61
- this.progress.failure(this.#summarize(stats));
62
- this.#dumpFailures();
63
- } else if (stats && !stats.complete) {
64
- this.progress.failure("No tests found");
65
- } else {
66
- this.progress.success(this.#summarize(stats));
67
- }
68
- }
69
- #summarize(stats) {
70
- let statStr;
71
- if (stats) {
72
- const complete = colors.dim(`${stats.complete}/${stats.total}`);
73
- const failures = stats.failures ? colors.redBright(` ${stats.failures.toString()} failed`) : "";
74
- statStr = ` ${complete}${failures}`;
75
- } else {
76
- statStr = "";
77
- }
78
- return `${colors.bold(this.#run)}${statStr}`;
79
- }
80
- #dumpFailures() {
81
- for (let i = 0; i < this.#failures.length; i++) {
82
- const failure = this.#failures[i];
83
- const index = `Failure ${colors.bold((i + 1).toString())} of ${this.#failures.length}`;
84
- process.stdout.write(`
85
- ${index} ${this.#formatName(failure.suite, failure.test, failure.step)}
86
-
87
- `);
88
- FailureDetail.dump(failure.detail, " ");
89
- }
90
- }
91
- #formatName(suite, test, step) {
92
- const breadcrumb = [...suite, test];
93
- if (step) {
94
- breadcrumb.push(step);
95
- }
96
- breadcrumb[breadcrumb.length - 1] = colors.bold(breadcrumb[breadcrumb.length - 1]);
97
- return breadcrumb.join(" \u27A1 ");
98
- }
99
- }
100
- const actualConsole = console;
101
- const actualLog = actualConsole.log;
102
- function proxy(...args) {
103
- actualLog.call(actualConsole, `${ConsoleProxyReporter.FLAG}${JSON.stringify(args)}`);
104
- }
105
- class ConsoleProxyReporter {
106
- static FLAG = "<<REPORT>> ";
107
- beginRun(name, stats) {
108
- proxy("beginRun", name, stats);
109
- }
110
- beginSuite(name, stats) {
111
- proxy("beginSuite", name, stats);
112
- }
113
- beginTest(name, stats) {
114
- proxy("beginTest", name, stats);
115
- }
116
- beginStep(name) {
117
- proxy("beginStep", name);
118
- }
119
- endRun(stats) {
120
- proxy("endRun", stats);
121
- }
122
- failTest(name, detail) {
123
- proxy("failTest", name, detail);
124
- }
125
- failRun(detail) {
126
- proxy("failRun", detail);
127
- }
128
- }
129
- export {
130
- ConsoleProxyReporter,
131
- ProgressReporter
132
- };
133
6
  //# sourceMappingURL=reporter.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/reporter.ts"],
4
- "mappings": "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",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;",
5
5
  "names": []
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAO3C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAoB,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI3D,qBAAa,UAAU;IAKf,QAAQ,CAAC,GAAG,EAAE,OAAO;IACrB,QAAQ,CAAC,QAAQ,EAAE,QAAQ;IAC3B,QAAQ,CAAC,OAAO,EAAE,WAAW;IANjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,OAAO,CAAC,IAAI,CAAmB;gBAGlB,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,WAAW;IA4B3B,OAAO,CAAC,MAAM,GAAE,KAAK,GAAG,KAAa;IAIrC,MAAM,CAAC,MAAM,UAAQ;IAIrB,SAAS,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK;YAmBvB,GAAG;CAMpB"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAQ,OAAO,EAAE,QAAQ,EAAO,MAAM,QAAQ,CAAC;AAQtD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC,qBAAa,UAAU;IAKf,QAAQ,CAAC,GAAG,EAAE,OAAO;IACrB,QAAQ,CAAC,QAAQ,EAAE,QAAQ;IAC3B,QAAQ,CAAC,OAAO,EAAE,WAAW;IANjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,OAAO,CAAC,IAAI,CAAmB;gBAGlB,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,WAAW;IA8B3B,OAAO,CAAC,MAAM,GAAE,KAAK,GAAG,KAAa;IAIrC,MAAM,CAAC,MAAM,UAAQ;IAIrB,SAAS,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK;YAmBvB,GAAG;CAMpB"}
@@ -3,14 +3,13 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { Progress } from "#tools";
7
- import colors from "ansi-colors";
6
+ import { ansi, Progress, std } from "#tools";
8
7
  import debug from "debug";
9
8
  import { relative } from "path";
10
9
  import { chip } from "./chip/chip.js";
11
- import { FailureDetail } from "./failure-detail.js";
10
+ import { FailureReporter } from "./failure-reporter.js";
11
+ import { NodejsReporter } from "./nodejs-reporter.js";
12
12
  import { testNodejs } from "./nodejs.js";
13
- import { ProgressReporter } from "./reporter.js";
14
13
  import { listSupportFiles } from "./util/files.js";
15
14
  import { testWeb } from "./web.js";
16
15
  class TestRunner {
@@ -19,13 +18,14 @@ class TestRunner {
19
18
  this.progress = progress;
20
19
  this.options = options;
21
20
  chip.runner = this;
22
- this.reporter = new class extends ProgressReporter {
21
+ this.reporter = new class extends NodejsReporter {
23
22
  constructor() {
24
23
  super(progress);
25
24
  }
26
25
  failRun(detail) {
27
- process.stdout.write("\n");
28
- FailureDetail.dump(detail);
26
+ std.err.write("\n");
27
+ FailureReporter.report(std.err, detail, "Test suite crash");
28
+ std.err.write("\n");
29
29
  process.exit(1);
30
30
  }
31
31
  }();
@@ -71,7 +71,7 @@ class TestRunner {
71
71
  }
72
72
  }
73
73
  function fatal(message) {
74
- process.stderr.write(colors.redBright(`
74
+ std.err.write(ansi.bright.red(`
75
75
  ${message}
76
76
 
77
77
  `));
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/runner.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAkB,gBAAgB;AAClC,OAAO,YAAY;AACnB,OAAO,WAAW;AAClB,SAAS,gBAAgB;AACzB,SAAS,YAAY;AACrB,SAAS,qBAAqB;AAC9B,SAAS,kBAAkB;AAE3B,SAAS,wBAAkC;AAC3C,SAAS,wBAAwB;AACjC,SAAS,eAAe;AAEjB,MAAM,WAAW;AAAA,EAIpB,YACa,KACA,UACA,SACX;AAHW;AACA;AACA;AAET,SAAK,SAAS;AAEd,SAAK,WAAW,IAAK,cAAc,iBAAiB;AAAA,MAChD,cAAc;AACV,cAAM,QAAQ;AAAA,MAClB;AAAA,MACS,QAAQ,QAAuB;AACpC,gBAAQ,OAAO,MAAM,IAAI;AACzB,sBAAc,KAAK,MAAM;AACzB,gBAAQ,KAAK,CAAC;AAAA,MAClB;AAAA,IACJ,EAAG;AAEH,QAAI,QAAQ,SAAS,QAAW;AAC5B,WAAK,OAAO,CAAC,kBAAkB;AAAA,IACnC,WAAW,MAAM,QAAQ,QAAQ,IAAI,GAAG;AACpC,WAAK,OAAO,QAAQ;AAAA,IACxB,OAAO;AACH,WAAK,OAAO,CAAC,QAAQ,IAAI;AAAA,IAC7B;AAEA,QAAI,QAAQ,OAAO;AACf,YAAM,OAAO,SAAS;AAAA,IAC1B;AAAA,EACJ;AAAA,EAhCS;AAAA,EACD,OAAO,MAAc;AAAA,EAiC7B,MAAM,QAAQ,SAAwB,OAAO;AACzC,UAAM,KAAK,IAAI,KAAK,UAAU,MAAM,WAAW,MAAM,MAAM,CAAC;AAAA,EAChE;AAAA,EAEA,MAAM,OAAO,SAAS,OAAO;AACzB,UAAM,KAAK,IAAI,KAAK,UAAU,MAAM,QAAQ,MAAM,MAAM,CAAC;AAAA,EAC7D;AAAA,EAEA,MAAM,UAAU,QAAuB;AACnC,UAAM,QAAQ,CAAC;AACf,aAAS,QAAQ,KAAK,MAAM;AACxB,aAAO,KAAK,QAAQ,SAAS,KAAK;AAClC,aAAO,SAAS,KAAK,IAAI,MAAM,IAAI;AACnC,UAAI,CAAC,KAAK,WAAW,GAAG,KAAK,CAAC,KAAK,WAAW,QAAQ,KAAK,CAAC,KAAK,WAAW,OAAO,GAAG;AAClF,eAAO,SAAS,MAAM,IAAI,IAAI;AAAA,MAClC;AAEA,YAAM,KAAK,GAAI,MAAM,KAAK,IAAI,KAAK,IAAI,CAAE;AAAA,IAC7C;AAEA,QAAI,CAAC,MAAM,QAAQ;AACf,YAAM,kBAAkB,KAAK,KAAK,KAAK,IAAI,CAAC,EAAE;AAAA,IAClD;AAEA,WAAO,CAAC,GAAG,iBAAiB,MAAM,GAAG,GAAG,KAAK;AAAA,EACjD;AAAA,EAEA,MAAc,IAAI,UAAoB,QAA6B;AAC/D,UAAM,OAAO;AACb,QAAI,SAAS,WAAW,SAAS,OAAO,SAAS;AAC7C,YAAM,QAAQ,SAAS,OAAO,YAAY,CAAC,YAAY;AAAA,IAC3D;AAAA,EACJ;AACJ;AAEA,SAAS,MAAM,SAAiB;AAC5B,UAAQ,OAAO,MAAM,OAAO,UAAU;AAAA,EAAK,OAAO;AAAA;AAAA,CAAM,CAAC;AACzD,UAAQ,KAAK,CAAC;AAClB;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,MAAe,UAAU,WAAW;AAC7C,OAAO,WAAW;AAClB,SAAS,gBAAgB;AACzB,SAAS,YAAY;AAErB,SAAS,uBAAuB;AAChC,SAAS,sBAAsB;AAC/B,SAAS,kBAAkB;AAG3B,SAAS,wBAAwB;AACjC,SAAS,eAAe;AAEjB,MAAM,WAAW;AAAA,EAIpB,YACa,KACA,UACA,SACX;AAHW;AACA;AACA;AAET,SAAK,SAAS;AAEd,SAAK,WAAW,IAAK,cAAc,eAAe;AAAA,MAC9C,cAAc;AACV,cAAM,QAAQ;AAAA,MAClB;AAAA,MAES,QAAQ,QAAuB;AACpC,YAAI,IAAI,MAAM,IAAI;AAClB,wBAAgB,OAAO,IAAI,KAAK,QAAQ,kBAAkB;AAC1D,YAAI,IAAI,MAAM,IAAI;AAClB,gBAAQ,KAAK,CAAC;AAAA,MAClB;AAAA,IACJ,EAAG;AAEH,QAAI,QAAQ,SAAS,QAAW;AAC5B,WAAK,OAAO,CAAC,kBAAkB;AAAA,IACnC,WAAW,MAAM,QAAQ,QAAQ,IAAI,GAAG;AACpC,WAAK,OAAO,QAAQ;AAAA,IACxB,OAAO;AACH,WAAK,OAAO,CAAC,QAAQ,IAAI;AAAA,IAC7B;AAEA,QAAI,QAAQ,OAAO;AACf,YAAM,OAAO,SAAS;AAAA,IAC1B;AAAA,EACJ;AAAA,EAlCS;AAAA,EACD,OAAO,MAAc;AAAA,EAmC7B,MAAM,QAAQ,SAAwB,OAAO;AACzC,UAAM,KAAK,IAAI,KAAK,UAAU,MAAM,WAAW,MAAM,MAAM,CAAC;AAAA,EAChE;AAAA,EAEA,MAAM,OAAO,SAAS,OAAO;AACzB,UAAM,KAAK,IAAI,KAAK,UAAU,MAAM,QAAQ,MAAM,MAAM,CAAC;AAAA,EAC7D;AAAA,EAEA,MAAM,UAAU,QAAuB;AACnC,UAAM,QAAQ,CAAC;AACf,aAAS,QAAQ,KAAK,MAAM;AACxB,aAAO,KAAK,QAAQ,SAAS,KAAK;AAClC,aAAO,SAAS,KAAK,IAAI,MAAM,IAAI;AACnC,UAAI,CAAC,KAAK,WAAW,GAAG,KAAK,CAAC,KAAK,WAAW,QAAQ,KAAK,CAAC,KAAK,WAAW,OAAO,GAAG;AAClF,eAAO,SAAS,MAAM,IAAI,IAAI;AAAA,MAClC;AAEA,YAAM,KAAK,GAAI,MAAM,KAAK,IAAI,KAAK,IAAI,CAAE;AAAA,IAC7C;AAEA,QAAI,CAAC,MAAM,QAAQ;AACf,YAAM,kBAAkB,KAAK,KAAK,KAAK,IAAI,CAAC,EAAE;AAAA,IAClD;AAEA,WAAO,CAAC,GAAG,iBAAiB,MAAM,GAAG,GAAG,KAAK;AAAA,EACjD;AAAA,EAEA,MAAc,IAAI,UAAoB,QAA6B;AAC/D,UAAM,OAAO;AACb,QAAI,SAAS,WAAW,SAAS,OAAO,SAAS;AAC7C,YAAM,QAAQ,SAAS,OAAO,YAAY,CAAC,YAAY;AAAA,IAC3D;AAAA,EACJ;AACJ;AAEA,SAAS,MAAM,SAAiB;AAC5B,MAAI,IAAI,MAAM,KAAK,OAAO,IAAI;AAAA,EAAK,OAAO;AAAA;AAAA,CAAM,CAAC;AACjD,UAAQ,KAAK,CAAC;AAClB;",
5
5
  "names": []
6
6
  }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare function TextDiff(actual: string, expected: string): string;
7
+ export declare namespace TextDiff {
8
+ let generator: undefined | ((actual: string, expected: string) => string);
9
+ }
10
+ //# sourceMappingURL=text-diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-diff.d.ts","sourceRoot":"","sources":["../../src/text-diff.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAKxD;AAED,yBAAiB,QAAQ,CAAC;IACf,IAAI,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;CACpF"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ function TextDiff(actual, expected) {
7
+ if (TextDiff.generator) {
8
+ return TextDiff.generator(actual, expected);
9
+ }
10
+ return "(no diff generator installed)";
11
+ }
12
+ ((TextDiff2) => {
13
+ })(TextDiff || (TextDiff = {}));
14
+ export {
15
+ TextDiff
16
+ };
17
+ //# sourceMappingURL=text-diff.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/text-diff.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMO,SAAS,SAAS,QAAgB,UAAkB;AACvD,MAAI,SAAS,WAAW;AACpB,WAAO,SAAS,UAAU,QAAQ,QAAQ;AAAA,EAC9C;AACA,SAAO;AACX;AAAA,CAEO,CAAUA,cAAV;AAAA,GAAU;",
5
+ "names": ["TextDiff"]
6
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { FailureDetail } from "./failure-detail.js";
7
+ import { Reporter, Stats } from "./reporter.js";
8
+ /**
9
+ * Test UI for web browsers. Encodes each reporting method to the console. This is a simple way to convey messages
10
+ * from the browser to the test harness.
11
+ */
12
+ export declare class WebReporter implements Reporter {
13
+ static FLAG: string;
14
+ beginRun(name: string, stats?: Stats): void;
15
+ beginSuite(name: string[], stats?: Stats): void;
16
+ beginTest(name: string, stats?: Stats): void;
17
+ beginStep(name: string): void;
18
+ endRun(stats?: Stats): void;
19
+ failTest(name: string, detail: FailureDetail): void;
20
+ failRun(detail: FailureDetail): void;
21
+ }
22
+ //# sourceMappingURL=web-reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-reporter.d.ts","sourceRoot":"","sources":["../../src/web-reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAShD;;;GAGG;AACH,qBAAa,WAAY,YAAW,QAAQ;IACxC,MAAM,CAAC,IAAI,SAAiB;IAE5B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;IAIpC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,KAAK;IAIxC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;IAIrC,SAAS,CAAC,IAAI,EAAE,MAAM;IAItB,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK;IAIpB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;IAI5C,OAAO,CAAC,MAAM,EAAE,aAAa;CAGhC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ const actualConsole = console;
7
+ const actualLog = actualConsole.log;
8
+ function proxy(...args) {
9
+ actualLog.call(actualConsole, `${WebReporter.FLAG}${JSON.stringify(args)}`);
10
+ }
11
+ class WebReporter {
12
+ static FLAG = "<<REPORT>> ";
13
+ beginRun(name, stats) {
14
+ proxy("beginRun", name, stats);
15
+ }
16
+ beginSuite(name, stats) {
17
+ proxy("beginSuite", name, stats);
18
+ }
19
+ beginTest(name, stats) {
20
+ proxy("beginTest", name, stats);
21
+ }
22
+ beginStep(name) {
23
+ proxy("beginStep", name);
24
+ }
25
+ endRun(stats) {
26
+ proxy("endRun", stats);
27
+ }
28
+ failTest(name, detail) {
29
+ proxy("failTest", name, detail);
30
+ }
31
+ failRun(detail) {
32
+ proxy("failRun", detail);
33
+ }
34
+ }
35
+ export {
36
+ WebReporter
37
+ };
38
+ //# sourceMappingURL=web-reporter.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/web-reporter.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,MAAM,gBAAgB;AACtB,MAAM,YAAY,cAAc;AAChC,SAAS,SAAS,MAAa;AAC3B,YAAU,KAAK,eAAe,GAAG,YAAY,IAAI,GAAG,KAAK,UAAU,IAAI,CAAC,EAAE;AAC9E;AAMO,MAAM,YAAgC;AAAA,EACzC,OAAO,OAAO;AAAA,EAEd,SAAS,MAAc,OAAe;AAClC,UAAM,YAAY,MAAM,KAAK;AAAA,EACjC;AAAA,EAEA,WAAW,MAAgB,OAAe;AACtC,UAAM,cAAc,MAAM,KAAK;AAAA,EACnC;AAAA,EAEA,UAAU,MAAc,OAAe;AACnC,UAAM,aAAa,MAAM,KAAK;AAAA,EAClC;AAAA,EAEA,UAAU,MAAc;AACpB,UAAM,aAAa,IAAI;AAAA,EAC3B;AAAA,EAEA,OAAO,OAAe;AAClB,UAAM,UAAU,KAAK;AAAA,EACzB;AAAA,EAEA,SAAS,MAAc,QAAuB;AAC1C,UAAM,YAAY,MAAM,MAAM;AAAA,EAClC;AAAA,EAEA,QAAQ,QAAuB;AAC3B,UAAM,WAAW,MAAM;AAAA,EAC3B;AACJ;",
5
+ "names": []
6
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,wBAAsB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,iBA0ChE"}
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,wBAAsB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,iBA0ChE"}
package/dist/esm/web.js CHANGED
@@ -9,7 +9,7 @@ import express from "express";
9
9
  import { writeFile } from "fs/promises";
10
10
  import { relative } from "path";
11
11
  import { chromium } from "playwright";
12
- import { ConsoleProxyReporter } from "./reporter.js";
12
+ import { WebReporter } from "./web-reporter.js";
13
13
  async function testWeb(runner, manual) {
14
14
  const files = await runner.loadFiles("esm");
15
15
  const bundlePath = await bundle(files, runner.pkg);
@@ -76,11 +76,11 @@ function consoleHandler(reporter) {
76
76
  return;
77
77
  }
78
78
  const text = message.text();
79
- if (type !== "log" || !text.startsWith(ConsoleProxyReporter.FLAG)) {
79
+ if (type !== "log" || !text.startsWith(WebReporter.FLAG)) {
80
80
  console[type](text);
81
81
  return;
82
82
  }
83
- const args = JSON.parse(text.slice(ConsoleProxyReporter.FLAG.length));
83
+ const args = JSON.parse(text.slice(WebReporter.FLAG.length));
84
84
  const method = reporter[args[0]];
85
85
  if (typeof method !== "function") {
86
86
  throw new Error(`Invalid encoded reporter update method ${args[0]}`);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/web.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["server", "options"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/testing",
3
- "version": "0.12.2",
3
+ "version": "0.12.3-alpha.0-20250205-ad3416ca3",
4
4
  "description": "Test harness for running JavaScript and Matter certification tests",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -41,10 +41,11 @@
41
41
  },
42
42
  "homepage": "https://github.com/project-chip/matter.js#readme",
43
43
  "imports": {
44
- "#tools": "@matter/tools"
44
+ "#tools": "@matter/tools",
45
+ "#tools/ansi-text": "@matter/tools/ansi-text"
45
46
  },
46
47
  "dependencies": {
47
- "@matter/tools": "0.12.2",
48
+ "@matter/tools": "0.12.3-alpha.0-20250205-ad3416ca3",
48
49
  "@types/express": "^4.17.21",
49
50
  "ansi-colors": "^4.1.3",
50
51
  "chai": "^4.4.1",
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 { Builder, Graph, Package, Project } from "#tools";
12
+ import { Graph, Package, Project, ProjectBuilder } from "#tools";
13
13
  import { clear } from "console";
14
14
  import yargs from "yargs";
15
15
  import { hideBin } from "yargs/helpers";
@@ -80,7 +80,7 @@ export async function main(argv = process.argv) {
80
80
  packageLocation = firstSpec;
81
81
  }
82
82
 
83
- const builder = new Builder();
83
+ const builder = new ProjectBuilder();
84
84
  const pkg = new Package({ path: packageLocation });
85
85
 
86
86
  // If the location is a workspace, test all packages with test
@@ -4,35 +4,24 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import colors from "ansi-colors";
8
-
9
7
  export interface FailureDetail {
10
8
  message: string;
11
9
  stack?: string;
12
- diff?: string;
10
+ stackLines?: string[];
11
+ actual?: string;
12
+ expected?: string;
13
13
  logs?: string;
14
14
  cause?: FailureDetail;
15
15
  errors?: FailureDetail[];
16
16
  }
17
17
 
18
- export function FailureDetail(error: any, logs?: string[]) {
19
- let diff: string | undefined;
20
-
21
- const { message, stack, cause, errors } = parseError(error);
22
-
23
- if (error.expected && error.actual) {
24
- if (FailureDetail.diff === undefined) {
25
- diff = "(no diff implementation installed)";
26
- } else {
27
- diff = FailureDetail.diff(error.actual.toString(), error.expected.toString());
28
- diff = diff.trim().replace(/^ {6}/gm, "");
29
- }
30
- }
31
-
18
+ /**
19
+ * Captures all pertinent information about a failed test.
20
+ */
21
+ export function FailureDetail(error: any, logs?: string[], parentStack?: string[]) {
22
+ const { message, stack, stackLines, cause, errors } = parseError(error, parentStack);
32
23
  const result = { message } as FailureDetail;
33
- if (diff) {
34
- result.diff = diff;
35
- }
24
+
36
25
  if (stack) {
37
26
  result.stack = stack;
38
27
  }
@@ -45,46 +34,32 @@ export function FailureDetail(error: any, logs?: string[]) {
45
34
  if (errors) {
46
35
  result.errors = errors;
47
36
  }
37
+ if (stackLines) {
38
+ result.stackLines = stackLines;
39
+ }
48
40
 
49
- return result;
50
- }
51
-
52
- export namespace FailureDetail {
53
- export function dump(failure: FailureDetail, prefix: string = "") {
54
- process.stdout.write(colors.redBright(`${prefix}${failure.message}\n\n`));
55
-
56
- if (failure.diff) {
57
- process.stdout.write(`${prefix} ${failure.diff.replace(/\n/g, "\n ")}\n\n`);
58
- }
59
-
60
- if (failure.stack) {
61
- process.stdout.write(`${prefix}${colors.dim(failure.stack.replace(/\n/g, `\n${prefix}`))}\n\n`);
62
- }
63
-
64
- if (failure.cause) {
65
- process.stdout.write(`${prefix}Caused by:\n\n`);
66
- dump(failure.cause, prefix);
67
- }
68
-
69
- if (failure.errors?.length) {
70
- let num = 0;
71
- for (const cause of failure.errors) {
72
- process.stdout.write(`${prefix}Cause #${++num}:\n\n`);
73
- dump(cause, `${prefix} `);
74
- }
75
- }
76
-
77
- if (failure.logs) {
78
- process.stdout.write(` ${failure.logs.replace(/\n/g, "\n ")}\n\n`);
79
- }
41
+ const { actual, expected } = error;
42
+ if (actual) {
43
+ result.actual = actual;
44
+ }
45
+ if (expected) {
46
+ result.expected = expected;
80
47
  }
81
48
 
82
- export let diff: undefined | ((actual: string, expected: string) => string);
49
+ return result;
83
50
  }
84
51
 
85
- function parseError(error: Error) {
86
- let message, stack, cause: FailureDetail | undefined, errors: FailureDetail[] | undefined;
52
+ function messageAndStackFor(
53
+ error: Error,
54
+ parentStack?: string[],
55
+ ): { message: string; stack?: string; stackLines?: string[] } {
56
+ // If an error formatting hook is installed, use that
57
+ if (MatterHooks?.messageAndStackFor) {
58
+ return MatterHooks.messageAndStackFor(error, parentStack);
59
+ }
87
60
 
61
+ // Fallback message formatting
62
+ let message, stack;
88
63
  if (error === undefined || error === null) {
89
64
  message = `(error is ${error})`;
90
65
  } else {
@@ -100,27 +75,29 @@ function parseError(error: Error) {
100
75
  if (lines.length) {
101
76
  stack = lines.map(line => line.trim()).join("\n");
102
77
  }
103
- } else if (error.message) {
104
- message = error.message;
105
- } else {
78
+ }
79
+
80
+ if (!message) {
106
81
  message = error.toString();
107
82
  }
108
83
 
109
- message = message.trim().replace(/Error: /, "");
84
+ return { message, stack };
85
+ }
86
+
87
+ function parseError(error: Error, parentStack?: string[]) {
88
+ const { message, stack, stackLines } = messageAndStackFor(error, parentStack);
110
89
 
111
- if (message.endsWith(":")) {
112
- message = message.slice(0, message.length - 1);
113
- }
90
+ let cause: FailureDetail | undefined, errors: FailureDetail[] | undefined;
114
91
 
115
92
  const errorCause = error.cause;
116
93
  if (errorCause) {
117
- cause = FailureDetail(errorCause);
94
+ cause = FailureDetail(errorCause, undefined, stackLines);
118
95
  }
119
96
 
120
97
  const errorErrors = (error as AggregateError).errors;
121
98
  if (Array.isArray(errorErrors)) {
122
- errors = errorErrors.map(e => FailureDetail(e));
99
+ errors = errorErrors.map(e => FailureDetail(e, undefined, stackLines));
123
100
  }
124
101
 
125
- return { message, stack, cause, errors };
102
+ return { message, stack, stackLines, cause, errors };
126
103
  }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { ansi, Printer, screen } from "#tools";
8
+ import { FailureDetail } from "./failure-detail.js";
9
+ import { TextDiff } from "./text-diff.js";
10
+
11
+ const OUTER_PREFIX = `${ansi.red}▌ ${ansi.not.red}`;
12
+ const INNER_PREFIX = `${ansi.dim}┆ ${ansi.not.dim}`;
13
+
14
+ export namespace FailureReporter {
15
+ export function report(out: Printer, failure: FailureDetail, title: string) {
16
+ out.state({ style: ansi.reset.white.bg.red }, () => {
17
+ out(screen.erase.toEol, "\n ", title, screen.erase.toEol, "\n", screen.erase.toEol, "\n");
18
+ });
19
+
20
+ out(screen.erase.toEol);
21
+
22
+ out.state({ linePrefix: OUTER_PREFIX }, () => {
23
+ dumpDetails(out, failure);
24
+ });
25
+ }
26
+ }
27
+
28
+ function dumpCause(out: Printer, failure: FailureDetail) {
29
+ out.state({ linePrefix: INNER_PREFIX }, () => {
30
+ dumpDetails(out, failure);
31
+ });
32
+ }
33
+
34
+ function dumpDetails(out: Printer, { message, actual, expected, stack, cause, errors, logs }: FailureDetail) {
35
+ out("\n", ansi.bright.red(message), "\n");
36
+
37
+ if (actual !== undefined && expected !== undefined) {
38
+ out("\n");
39
+ out.state({ linePrefix: " " }, () => out(TextDiff(actual, expected)));
40
+ out("\n");
41
+ }
42
+
43
+ if (stack) {
44
+ out("\n");
45
+ out.state({ linePrefix: " " }, () => out(stack));
46
+ out("\n");
47
+ }
48
+
49
+ if (cause) {
50
+ out("\n", ansi.bold("Caused by:"), "\n");
51
+ dumpCause(out, cause);
52
+ }
53
+
54
+ if (errors?.length) {
55
+ let num = 0;
56
+ for (const cause of errors) {
57
+ out("\n", ansi.bold(`Cause #${++num}:`), "\n");
58
+ dumpCause(out, cause);
59
+ }
60
+ }
61
+
62
+ if (logs) {
63
+ out("\n", logs, "\n");
64
+ }
65
+ }
@@ -52,6 +52,14 @@ declare global {
52
52
  * Receive intercepted log messages.
53
53
  */
54
54
  loggerSink?: (level: number, message: string) => void;
55
+
56
+ /**
57
+ * Extract error details.
58
+ */
59
+ messageAndStackFor?: (
60
+ error: unknown,
61
+ parentStack?: string[],
62
+ ) => { message: string; stack?: string; stackLines?: string[] };
55
63
  };
56
64
 
57
65
  namespace Mocha {