@matter/testing 0.13.1-alpha.0-20250501-80c86b03e → 0.13.1-alpha.0-20250504-87f265a2e
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/bin/test.js +1 -2
- package/dist/cjs/chip/chip.d.ts +7 -2
- package/dist/cjs/chip/chip.d.ts.map +1 -1
- package/dist/cjs/chip/chip.js +20 -15
- package/dist/cjs/chip/chip.js.map +1 -1
- package/dist/cjs/chip/command-pipe.d.ts +2 -1
- package/dist/cjs/chip/command-pipe.d.ts.map +1 -1
- package/dist/cjs/chip/command-pipe.js +5 -2
- package/dist/cjs/chip/command-pipe.js.map +1 -1
- package/dist/cjs/chip/config.d.ts +2 -2
- package/dist/cjs/chip/config.d.ts.map +1 -1
- package/dist/cjs/chip/config.js +7 -6
- package/dist/cjs/chip/config.js.map +1 -1
- package/dist/cjs/chip/container-command-pipe.d.ts +2 -1
- package/dist/cjs/chip/container-command-pipe.d.ts.map +1 -1
- package/dist/cjs/chip/container-command-pipe.js +26 -24
- package/dist/cjs/chip/container-command-pipe.js.map +1 -1
- package/dist/cjs/chip/index.d.ts +1 -1
- package/dist/cjs/chip/index.d.ts.map +1 -1
- package/dist/cjs/chip/index.js +1 -1
- package/dist/cjs/chip/index.js.map +1 -1
- package/dist/cjs/chip/{pics-expression.d.ts → pics/expression.d.ts} +2 -2
- package/dist/cjs/chip/pics/expression.d.ts.map +1 -0
- package/dist/cjs/chip/{pics-expression.js → pics/expression.js} +6 -6
- package/dist/cjs/chip/pics/expression.js.map +6 -0
- package/dist/cjs/chip/{pics-file.d.ts → pics/file.d.ts} +10 -5
- package/dist/cjs/chip/pics/file.d.ts.map +1 -0
- package/dist/cjs/chip/{pics-file.js → pics/file.js} +21 -13
- package/dist/cjs/chip/pics/file.js.map +6 -0
- package/dist/cjs/chip/pics/index.d.ts +10 -0
- package/dist/cjs/chip/pics/index.d.ts.map +1 -0
- package/dist/cjs/chip/pics/index.js +27 -0
- package/dist/cjs/chip/pics/index.js.map +6 -0
- package/dist/cjs/chip/pics/source.d.ts +52 -0
- package/dist/cjs/chip/pics/source.d.ts.map +1 -0
- package/dist/cjs/chip/pics/source.js +117 -0
- package/dist/cjs/chip/pics/source.js.map +6 -0
- package/dist/cjs/chip/pics/values.d.ts +9 -0
- package/dist/cjs/chip/pics/values.d.ts.map +1 -0
- package/dist/cjs/chip/pics/values.js +22 -0
- package/dist/cjs/chip/pics/values.js.map +6 -0
- package/dist/cjs/chip/python-test.d.ts.map +1 -1
- package/dist/cjs/chip/python-test.js +14 -7
- package/dist/cjs/chip/python-test.js.map +1 -1
- package/dist/cjs/chip/state.d.ts +3 -2
- package/dist/cjs/chip/state.d.ts.map +1 -1
- package/dist/cjs/chip/state.js +38 -25
- package/dist/cjs/chip/state.js.map +1 -1
- package/dist/cjs/chip/yaml-test.d.ts +1 -1
- package/dist/cjs/chip/yaml-test.d.ts.map +1 -1
- package/dist/cjs/chip/yaml-test.js +5 -1
- package/dist/cjs/chip/yaml-test.js.map +1 -1
- package/dist/cjs/cli.d.ts.map +1 -1
- package/dist/cjs/cli.js +18 -3
- package/dist/cjs/cli.js.map +2 -2
- package/dist/cjs/device/subject.d.ts +4 -0
- package/dist/cjs/device/subject.d.ts.map +1 -1
- package/dist/cjs/failure-reporter.js +4 -6
- package/dist/cjs/failure-reporter.js.map +1 -1
- package/dist/cjs/print-report.d.ts +3 -0
- package/dist/cjs/print-report.d.ts.map +1 -1
- package/dist/cjs/print-report.js +13 -16
- package/dist/cjs/print-report.js.map +2 -2
- package/dist/cjs/test-descriptor.d.ts +18 -13
- package/dist/cjs/test-descriptor.d.ts.map +1 -1
- package/dist/cjs/test-descriptor.js +48 -49
- package/dist/cjs/test-descriptor.js.map +2 -2
- package/dist/esm/chip/chip.d.ts +7 -2
- package/dist/esm/chip/chip.d.ts.map +1 -1
- package/dist/esm/chip/chip.js +20 -15
- package/dist/esm/chip/chip.js.map +1 -1
- package/dist/esm/chip/command-pipe.d.ts +2 -1
- package/dist/esm/chip/command-pipe.d.ts.map +1 -1
- package/dist/esm/chip/command-pipe.js +5 -2
- package/dist/esm/chip/command-pipe.js.map +1 -1
- package/dist/esm/chip/config.d.ts +2 -2
- package/dist/esm/chip/config.d.ts.map +1 -1
- package/dist/esm/chip/config.js +7 -6
- package/dist/esm/chip/config.js.map +1 -1
- package/dist/esm/chip/container-command-pipe.d.ts +2 -1
- package/dist/esm/chip/container-command-pipe.d.ts.map +1 -1
- package/dist/esm/chip/container-command-pipe.js +26 -24
- package/dist/esm/chip/container-command-pipe.js.map +1 -1
- package/dist/esm/chip/index.d.ts +1 -1
- package/dist/esm/chip/index.d.ts.map +1 -1
- package/dist/esm/chip/index.js +1 -1
- package/dist/esm/chip/{pics-expression.d.ts → pics/expression.d.ts} +2 -2
- package/dist/esm/chip/pics/expression.d.ts.map +1 -0
- package/dist/esm/chip/{pics-expression.js → pics/expression.js} +3 -3
- package/dist/esm/chip/pics/expression.js.map +6 -0
- package/dist/esm/chip/{pics-file.d.ts → pics/file.d.ts} +10 -5
- package/dist/esm/chip/pics/file.d.ts.map +1 -0
- package/dist/esm/chip/{pics-file.js → pics/file.js} +18 -10
- package/dist/esm/chip/pics/file.js.map +6 -0
- package/dist/esm/chip/pics/index.d.ts +10 -0
- package/dist/esm/chip/pics/index.d.ts.map +1 -0
- package/dist/esm/chip/pics/index.js +10 -0
- package/dist/esm/chip/pics/index.js.map +6 -0
- package/dist/esm/chip/pics/source.d.ts +52 -0
- package/dist/esm/chip/pics/source.d.ts.map +1 -0
- package/dist/esm/chip/pics/source.js +97 -0
- package/dist/esm/chip/pics/source.js.map +6 -0
- package/dist/esm/chip/pics/values.d.ts +9 -0
- package/dist/esm/chip/pics/values.d.ts.map +1 -0
- package/dist/esm/chip/pics/values.js +6 -0
- package/dist/esm/chip/pics/values.js.map +6 -0
- package/dist/esm/chip/python-test.d.ts.map +1 -1
- package/dist/esm/chip/python-test.js +14 -7
- package/dist/esm/chip/python-test.js.map +1 -1
- package/dist/esm/chip/state.d.ts +3 -2
- package/dist/esm/chip/state.d.ts.map +1 -1
- package/dist/esm/chip/state.js +39 -26
- package/dist/esm/chip/state.js.map +1 -1
- package/dist/esm/chip/yaml-test.d.ts +1 -1
- package/dist/esm/chip/yaml-test.d.ts.map +1 -1
- package/dist/esm/chip/yaml-test.js +5 -1
- package/dist/esm/chip/yaml-test.js.map +1 -1
- package/dist/esm/cli.d.ts.map +1 -1
- package/dist/esm/cli.js +19 -4
- package/dist/esm/cli.js.map +2 -2
- package/dist/esm/device/subject.d.ts +4 -0
- package/dist/esm/device/subject.d.ts.map +1 -1
- package/dist/esm/failure-reporter.js +4 -6
- package/dist/esm/failure-reporter.js.map +1 -1
- package/dist/esm/print-report.d.ts +3 -0
- package/dist/esm/print-report.d.ts.map +1 -1
- package/dist/esm/print-report.js +12 -15
- package/dist/esm/print-report.js.map +2 -2
- package/dist/esm/test-descriptor.d.ts +18 -13
- package/dist/esm/test-descriptor.d.ts.map +1 -1
- package/dist/esm/test-descriptor.js +48 -49
- package/dist/esm/test-descriptor.js.map +2 -2
- package/package.json +2 -2
- package/src/chip/chip.ts +31 -17
- package/src/chip/command-pipe.ts +6 -2
- package/src/chip/config.ts +9 -9
- package/src/chip/container-command-pipe.ts +28 -30
- package/src/chip/index.ts +1 -1
- package/src/chip/matter-js-pics.properties +7 -4
- package/src/chip/{pics-expression.ts → pics/expression.ts} +4 -3
- package/src/chip/{pics-file.ts → pics/file.ts} +30 -13
- package/src/chip/pics/index.ts +10 -0
- package/src/chip/pics/source.ts +163 -0
- package/src/chip/pics/values.ts +9 -0
- package/src/chip/python-test.ts +18 -11
- package/src/chip/state.ts +56 -33
- package/src/chip/yaml-test.ts +6 -1
- package/src/cli.ts +29 -5
- package/src/device/subject.ts +4 -0
- package/src/failure-reporter.ts +4 -4
- package/src/print-report.ts +13 -18
- package/src/test-descriptor.ts +70 -61
- package/src/tsconfig.json +6 -2
- package/dist/cjs/chip/pics-expression.d.ts.map +0 -1
- package/dist/cjs/chip/pics-expression.js.map +0 -6
- package/dist/cjs/chip/pics-file.d.ts.map +0 -1
- package/dist/cjs/chip/pics-file.js.map +0 -6
- package/dist/esm/chip/pics-expression.d.ts.map +0 -1
- package/dist/esm/chip/pics-expression.js.map +0 -6
- package/dist/esm/chip/pics-file.d.ts.map +0 -1
- package/dist/esm/chip/pics-file.js.map +0 -6
|
@@ -5,21 +5,19 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { ansi, STATUS_ICON_FAILURE } from "#tools";
|
|
7
7
|
import { TextDiff } from "./text-diff.js";
|
|
8
|
-
const BEGIN_ERROR = `${ansi.red}\u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2505
|
|
9
|
-
\u2503${ansi.not.red}`;
|
|
8
|
+
const BEGIN_ERROR = `${ansi.red}\u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2505${ansi.not.red}`;
|
|
10
9
|
const OUTER_PREFIX = `${ansi.red}\u2503 ${ansi.not.red}`;
|
|
11
10
|
const INNER_PREFIX = `${ansi.dim}\u2506 ${ansi.not.dim}`;
|
|
12
|
-
const END_ERROR = `${ansi.red}\
|
|
13
|
-
\u2517\u2501\u2505${ansi.not.red}`;
|
|
11
|
+
const END_ERROR = `${ansi.red}\u2517\u2501\u2505${ansi.not.red}`;
|
|
14
12
|
var FailureReporter;
|
|
15
13
|
((FailureReporter2) => {
|
|
16
14
|
function report(out, failure, title) {
|
|
17
|
-
out(BEGIN_ERROR, "\n");
|
|
15
|
+
out(BEGIN_ERROR, "\n", OUTER_PREFIX, "\n");
|
|
18
16
|
out.state({ linePrefix: OUTER_PREFIX }, () => {
|
|
19
17
|
out(ansi.bold.red(STATUS_ICON_FAILURE), " ", title, "\n");
|
|
20
18
|
dumpDetails(out, failure);
|
|
21
19
|
});
|
|
22
|
-
out(END_ERROR, "\n");
|
|
20
|
+
out(OUTER_PREFIX, "\n", END_ERROR, "\n");
|
|
23
21
|
}
|
|
24
22
|
FailureReporter2.report = report;
|
|
25
23
|
})(FailureReporter || (FailureReporter = {}));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/failure-reporter.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,MAAe,2BAA2B;AAEnD,SAAS,gBAAgB;AAEzB,MAAM,cAAc,GAAG,KAAK,GAAG
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,MAAe,2BAA2B;AAEnD,SAAS,gBAAgB;AAEzB,MAAM,cAAc,GAAG,KAAK,GAAG,yPAA4C,KAAK,IAAI,GAAG;AACvF,MAAM,eAAe,GAAG,KAAK,GAAG,WAAM,KAAK,IAAI,GAAG;AAClD,MAAM,eAAe,GAAG,KAAK,GAAG,WAAM,KAAK,IAAI,GAAG;AAClD,MAAM,YAAY,GAAG,KAAK,GAAG,qBAAM,KAAK,IAAI,GAAG;AAExC,IAAU;AAAA,CAAV,CAAUA,qBAAV;AACI,WAAS,OAAO,KAAc,SAAwB,OAAe;AACxE,QAAI,aAAa,MAAM,cAAc,IAAI;AAEzC,QAAI,MAAM,EAAE,YAAY,aAAa,GAAG,MAAM;AAC1C,UAAI,KAAK,KAAK,IAAI,mBAAmB,GAAG,KAAK,OAAO,IAAI;AACxD,kBAAY,KAAK,OAAO;AAAA,IAC5B,CAAC;AAED,QAAI,cAAc,MAAM,WAAW,IAAI;AAAA,EAC3C;AATO,EAAAA,iBAAS;AAAA,GADH;AAajB,SAAS,UAAU,KAAc,SAAwB;AACrD,MAAI,MAAM,EAAE,YAAY,aAAa,GAAG,MAAM;AAC1C,gBAAY,KAAK,OAAO;AAAA,EAC5B,CAAC;AACL;AAEA,SAAS,YAAY,KAAc,EAAE,SAAS,QAAQ,UAAU,OAAO,OAAO,QAAQ,KAAK,GAAkB;AACzG,MAAI,MAAM,KAAK,OAAO,IAAI,OAAO,GAAG,IAAI;AAExC,MAAI,WAAW,UAAa,aAAa,QAAW;AAChD,QAAI,IAAI;AACR,QAAI,MAAM,EAAE,YAAY,OAAO,GAAG,MAAM,IAAI,SAAS,QAAQ,QAAQ,CAAC,CAAC;AACvE,QAAI,IAAI;AAAA,EACZ;AAEA,MAAI,OAAO;AACP,QAAI,IAAI;AACR,QAAI,MAAM,EAAE,YAAY,KAAK,GAAG,MAAM,IAAI,KAAK,CAAC;AAChD,QAAI,IAAI;AAAA,EACZ;AAEA,MAAI,OAAO;AACP,QAAI,MAAM,KAAK,KAAK,YAAY,GAAG,IAAI;AACvC,cAAU,KAAK,KAAK;AAAA,EACxB;AAEA,MAAI,QAAQ,QAAQ;AAChB,QAAI,MAAM;AACV,eAAWC,UAAS,QAAQ;AACxB,UAAI,MAAM,KAAK,KAAK,UAAU,EAAE,GAAG,GAAG,GAAG,IAAI;AAC7C,gBAAU,KAAKA,MAAK;AAAA,IACxB;AAAA,EACJ;AAEA,MAAI,MAAM;AACN,QAAI,MAAM,MAAM,IAAI;AAAA,EACxB;AACJ;",
|
|
5
5
|
"names": ["FailureReporter", "cause"]
|
|
6
6
|
}
|
|
@@ -20,6 +20,8 @@ export declare function defaultDescriptor(runner: TestRunner): Promise<{
|
|
|
20
20
|
name: string;
|
|
21
21
|
kind: TestDescriptor.Kind;
|
|
22
22
|
path?: string;
|
|
23
|
+
subpath?: string;
|
|
24
|
+
app?: string;
|
|
23
25
|
isDisabled?: boolean;
|
|
24
26
|
timeoutMs?: number;
|
|
25
27
|
description?: string;
|
|
@@ -29,5 +31,6 @@ export declare function defaultDescriptor(runner: TestRunner): Promise<{
|
|
|
29
31
|
runAt?: Date;
|
|
30
32
|
passed?: boolean;
|
|
31
33
|
durationMs?: number;
|
|
34
|
+
picsValues?: import("./index.js").PicsFile;
|
|
32
35
|
}>;
|
|
33
36
|
//# sourceMappingURL=print-report.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"print-report.d.ts","sourceRoot":"","sources":["../../src/print-report.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,cAAc,EAAE,eAAe,CAAC,EAAE,OAAO,QAEhF;
|
|
1
|
+
{"version":3,"file":"print-report.d.ts","sourceRoot":"","sources":["../../src/print-report.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,cAAc,EAAE,eAAe,CAAC,EAAE,OAAO,QAEhF;AAqGD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,UAAU;;;;;;;;;;;;;;;;;GAuCzD"}
|
package/dist/esm/print-report.js
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { Progress, STATUS_ICON_FAILURE, STATUS_ICON_SUCCESS } from "@matter/tools";
|
|
6
|
+
import { Progress, STATUS_ICON_FAILURE, STATUS_ICON_SKIPPED, STATUS_ICON_SUCCESS } from "@matter/tools";
|
|
7
7
|
import colors from "ansi-colors";
|
|
8
8
|
import { chip } from "./chip/chip.js";
|
|
9
|
-
import { InvalidPicsExpressionError, PicsExpression } from "./chip/pics
|
|
9
|
+
import { InvalidPicsExpressionError, PicsExpression } from "./chip/pics/expression.js";
|
|
10
10
|
import { createNodejsMocha } from "./nodejs.js";
|
|
11
11
|
import { TestDescriptor } from "./test-descriptor.js";
|
|
12
12
|
function printReport(descriptor, includeDisabled) {
|
|
@@ -49,7 +49,7 @@ function printDescriptor(descriptor, includeDisabled, prefix = "", path) {
|
|
|
49
49
|
title = `${STATUS_ICON_FAILURE} ${title}`;
|
|
50
50
|
break;
|
|
51
51
|
default:
|
|
52
|
-
title =
|
|
52
|
+
title = `${STATUS_ICON_SKIPPED} ${title}`;
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
if (member.durationMs !== void 0) {
|
|
@@ -64,7 +64,7 @@ function printDescriptor(descriptor, includeDisabled, prefix = "", path) {
|
|
|
64
64
|
if (member.pics) {
|
|
65
65
|
try {
|
|
66
66
|
const expr = new PicsExpression(member.pics);
|
|
67
|
-
if (expr.evaluate(chip.
|
|
67
|
+
if (expr.evaluate(member.picsValues ?? chip.defaultPics)) {
|
|
68
68
|
title = `${title} ${colors.dim.green(member.pics)}`;
|
|
69
69
|
} else {
|
|
70
70
|
title = `${title} ${colors.dim.red(member.pics)}`;
|
|
@@ -78,7 +78,11 @@ function printDescriptor(descriptor, includeDisabled, prefix = "", path) {
|
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
if (member.path && member.path !== path) {
|
|
81
|
-
|
|
81
|
+
let { path: path2 } = member;
|
|
82
|
+
if (member.subpath) {
|
|
83
|
+
path2 = `${path2}#${member.subpath}`;
|
|
84
|
+
}
|
|
85
|
+
title = `${title} ${colors.dim.blueBright(path2)}`;
|
|
82
86
|
}
|
|
83
87
|
if (member.kind === "manual") {
|
|
84
88
|
title = colors.strikethrough(title);
|
|
@@ -98,17 +102,10 @@ async function defaultDescriptor(runner) {
|
|
|
98
102
|
TestDescriptor.visit(descriptor, (descriptor2) => {
|
|
99
103
|
used.add(descriptor2);
|
|
100
104
|
});
|
|
101
|
-
let unused = TestDescriptor.filter(chip.tests.descriptor,
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
const result = recurse();
|
|
108
|
-
if (!result || result.kind === "suite" && !result.members?.length) {
|
|
109
|
-
return;
|
|
105
|
+
let unused = TestDescriptor.filter(chip.tests.descriptor, {
|
|
106
|
+
predicate(descriptor2) {
|
|
107
|
+
return descriptor2.kind !== "py" && descriptor2.kind !== "yaml" || !used.has(descriptor2);
|
|
110
108
|
}
|
|
111
|
-
return result;
|
|
112
109
|
});
|
|
113
110
|
if (unused) {
|
|
114
111
|
unused = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/print-report.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,UAAU,qBAAqB,2BAA2B;
|
|
5
|
-
"names": ["descriptor"]
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["path", "descriptor"]
|
|
6
6
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import type { FilesystemSync } from "#tools";
|
|
7
|
-
import type { PicsFile } from "./chip/pics
|
|
7
|
+
import type { PicsFile } from "./chip/pics/file.js";
|
|
8
8
|
/**
|
|
9
9
|
* Metadata for a single test or group of tests.
|
|
10
10
|
*/
|
|
@@ -12,6 +12,8 @@ export interface TestDescriptor {
|
|
|
12
12
|
name: string;
|
|
13
13
|
kind: TestDescriptor.Kind;
|
|
14
14
|
path?: string;
|
|
15
|
+
subpath?: string;
|
|
16
|
+
app?: string;
|
|
15
17
|
members?: TestDescriptor[];
|
|
16
18
|
isDisabled?: boolean;
|
|
17
19
|
timeoutMs?: number;
|
|
@@ -22,6 +24,7 @@ export interface TestDescriptor {
|
|
|
22
24
|
runAt?: Date;
|
|
23
25
|
passed?: boolean;
|
|
24
26
|
durationMs?: number;
|
|
27
|
+
picsValues?: PicsFile;
|
|
25
28
|
}
|
|
26
29
|
export interface TestFileDescriptor extends TestDescriptor {
|
|
27
30
|
path: string;
|
|
@@ -29,7 +32,14 @@ export interface TestFileDescriptor extends TestDescriptor {
|
|
|
29
32
|
export interface TestSuiteDescriptor extends TestDescriptor {
|
|
30
33
|
members: TestDescriptor[];
|
|
31
34
|
}
|
|
35
|
+
export interface RootTestDescriptor extends TestDescriptor {
|
|
36
|
+
format?: number;
|
|
37
|
+
}
|
|
32
38
|
export declare namespace TestDescriptor {
|
|
39
|
+
/**
|
|
40
|
+
* Used to validate format of test descriptor files.
|
|
41
|
+
*/
|
|
42
|
+
const CURRENT_FORMAT = 2;
|
|
33
43
|
type Kind = "suite" | "js" | "py" | "yaml" | "manual" | "step";
|
|
34
44
|
const DEFAULT_FILENAME = "build/test-report.json";
|
|
35
45
|
interface Filesystem extends FilesystemSync<Stat> {
|
|
@@ -38,23 +48,18 @@ export declare namespace TestDescriptor {
|
|
|
38
48
|
interface Stat extends FilesystemSync.Stat {
|
|
39
49
|
descriptor: TestDescriptor;
|
|
40
50
|
}
|
|
41
|
-
|
|
42
|
-
* Create a filtering predicate based on specified criteria.
|
|
43
|
-
*
|
|
44
|
-
* The predicate treats tests as atomic and ignores empty suites.
|
|
45
|
-
*/
|
|
46
|
-
function predicateFor(criteria: {
|
|
51
|
+
type Criteria = {
|
|
47
52
|
includePaths?: string[];
|
|
48
53
|
kinds?: Kind[];
|
|
49
54
|
pics?: PicsFile;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
(descriptor: TestDescriptor, recurse: () => TestDescriptor | undefined): TestDescriptor | undefined;
|
|
53
|
-
}
|
|
55
|
+
predicate?: (descriptor: TestDescriptor) => boolean;
|
|
56
|
+
};
|
|
54
57
|
/**
|
|
55
|
-
*
|
|
58
|
+
* Create a filter function for specified criteria.
|
|
59
|
+
*
|
|
60
|
+
* The filter treats tests as atomic and ignores empty suites.
|
|
56
61
|
*/
|
|
57
|
-
function filter(descriptor: TestDescriptor,
|
|
62
|
+
function filter(descriptor: TestDescriptor, criteria: Criteria): TestDescriptor | undefined;
|
|
58
63
|
/**
|
|
59
64
|
* Visit a {@link TestDescriptor} hierarchy.
|
|
60
65
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-descriptor.d.ts","sourceRoot":"","sources":["../../src/test-descriptor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAG7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"test-descriptor.d.ts","sourceRoot":"","sources":["../../src/test-descriptor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAG7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,QAAQ,CAAC;CACzB;AAED,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACtD,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACvD,OAAO,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,yBAAiB,cAAc,CAAC;IAC5B;;OAEG;IACI,MAAM,cAAc,IAAI,CAAC;IAEhC,KAAY,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IAE/D,MAAM,gBAAgB,2BAA2B,CAAC;IAEzD,UAAiB,UAAW,SAAQ,cAAc,CAAC,IAAI,CAAC;QACpD,UAAU,EAAE,cAAc,CAAC;KAC9B;IAED,UAAiB,IAAK,SAAQ,cAAc,CAAC,IAAI;QAC7C,UAAU,EAAE,cAAc,CAAC;KAC9B;IAED,KAAY,QAAQ,GAAG;QACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;QACf,IAAI,CAAC,EAAE,QAAQ,CAAC;QAChB,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,OAAO,CAAC;KACvD,CAAC;IAEF;;;;OAIG;IACH,SAAgB,MAAM,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,GAAG,cAAc,GAAG,SAAS,CA6EjG;IAED;;OAEG;IACH,SAAgB,KAAK,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,GAAG,IAAI,CAY1G;IAED;;OAEG;IACH,SAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAwBrE;IAED;;OAEG;IACH,SAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,mBAAmB,iBAKvE;IAED;;;;;OAKG;IACH,SAAgB,KAAK,CAAC,CAAC,SAAS,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CA8CvF;IAED;;OAEG;IACH,SAAgB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,CAAC,UAAU,CA+G1E;CACJ"}
|
|
@@ -4,74 +4,70 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { readFile, writeFile } from "node:fs/promises";
|
|
7
|
-
import { PicsExpression } from "./chip/pics
|
|
7
|
+
import { PicsExpression } from "./chip/pics/expression.js";
|
|
8
8
|
var TestDescriptor;
|
|
9
9
|
((TestDescriptor2) => {
|
|
10
|
+
TestDescriptor2.CURRENT_FORMAT = 2;
|
|
10
11
|
TestDescriptor2.DEFAULT_FILENAME = "build/test-report.json";
|
|
11
|
-
function
|
|
12
|
-
const { includePaths, kinds, pics } = criteria;
|
|
13
|
-
let
|
|
12
|
+
function filter(descriptor, criteria) {
|
|
13
|
+
const { includePaths, kinds, pics, predicate } = criteria;
|
|
14
|
+
let memberNames;
|
|
14
15
|
if (includePaths) {
|
|
15
|
-
|
|
16
|
+
memberNames = {};
|
|
16
17
|
for (const path of includePaths) {
|
|
17
|
-
let incl =
|
|
18
|
-
|
|
18
|
+
let incl = memberNames;
|
|
19
|
+
const segments = path.split("/");
|
|
20
|
+
if (segments[0] === "") {
|
|
21
|
+
segments[0] = descriptor.name;
|
|
22
|
+
}
|
|
23
|
+
for (const segment of segments) {
|
|
19
24
|
incl = incl[segment] ??= {};
|
|
20
25
|
}
|
|
21
26
|
}
|
|
22
27
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
28
|
+
return filter2(descriptor, memberNames);
|
|
29
|
+
function filter2(descriptor2, names) {
|
|
30
|
+
const memberNames2 = names?.[descriptor2.name];
|
|
31
|
+
if (names && !memberNames2) {
|
|
26
32
|
return;
|
|
27
33
|
}
|
|
28
|
-
if (pics &&
|
|
29
|
-
|
|
34
|
+
if (pics && descriptor2.pics !== void 0) {
|
|
35
|
+
descriptor2.picsValues = pics;
|
|
36
|
+
const expr = new PicsExpression(descriptor2.pics);
|
|
30
37
|
if (!expr.evaluate(pics)) {
|
|
31
38
|
return;
|
|
32
39
|
}
|
|
33
40
|
}
|
|
34
|
-
if (
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
if (descriptor2.kind === "suite") {
|
|
42
|
+
const { members } = descriptor2;
|
|
43
|
+
if (!members?.length) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
let filteredMembers;
|
|
47
|
+
for (const member of members) {
|
|
48
|
+
const filteredMember = filter2(member, memberNames2);
|
|
49
|
+
if (!filteredMember) {
|
|
50
|
+
continue;
|
|
41
51
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
52
|
+
if (predicate && !predicate(filteredMember)) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (filteredMembers) {
|
|
56
|
+
filteredMembers.push(filteredMember);
|
|
57
|
+
} else {
|
|
58
|
+
filteredMembers = [filteredMember];
|
|
45
59
|
}
|
|
46
|
-
return result;
|
|
47
|
-
} finally {
|
|
48
|
-
inclusion = revertInclusion;
|
|
49
60
|
}
|
|
50
|
-
|
|
51
|
-
|
|
61
|
+
if (filteredMembers) {
|
|
62
|
+
return { ...descriptor2, members: filteredMembers };
|
|
63
|
+
}
|
|
52
64
|
return;
|
|
53
65
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
TestDescriptor2.predicateFor = predicateFor;
|
|
58
|
-
function filter(descriptor, predicate) {
|
|
59
|
-
return predicate(descriptor, () => {
|
|
60
|
-
let { members } = descriptor;
|
|
61
|
-
if (members) {
|
|
62
|
-
members = members.map((member) => filter(member, predicate)).filter((member) => member);
|
|
63
|
-
}
|
|
64
|
-
if (descriptor.members === void 0 || members?.length === descriptor.members?.length) {
|
|
65
|
-
return descriptor;
|
|
66
|
-
}
|
|
67
|
-
descriptor = { ...descriptor };
|
|
68
|
-
if (members?.length) {
|
|
69
|
-
descriptor.members = members;
|
|
70
|
-
} else {
|
|
71
|
-
delete descriptor.members;
|
|
66
|
+
if (kinds && !kinds.includes(descriptor2.kind)) {
|
|
67
|
+
return;
|
|
72
68
|
}
|
|
73
|
-
return
|
|
74
|
-
}
|
|
69
|
+
return descriptor2;
|
|
70
|
+
}
|
|
75
71
|
}
|
|
76
72
|
TestDescriptor2.filter = filter;
|
|
77
73
|
function visit(descriptor, fn) {
|
|
@@ -94,7 +90,7 @@ var TestDescriptor;
|
|
|
94
90
|
};
|
|
95
91
|
try {
|
|
96
92
|
const json = await readFile(path, "utf-8");
|
|
97
|
-
descriptor = JSON.parse(json);
|
|
93
|
+
descriptor = JSON.parse(json, (k, v) => k === "picsValues" ? void 0 : v);
|
|
98
94
|
if (typeof descriptor?.name !== "string" || descriptor.kind !== "suite" || !Array.isArray(descriptor.members)) {
|
|
99
95
|
throw new Error(`Invalid test descriptor "${path}"`);
|
|
100
96
|
}
|
|
@@ -107,7 +103,10 @@ var TestDescriptor;
|
|
|
107
103
|
}
|
|
108
104
|
TestDescriptor2.open = open;
|
|
109
105
|
async function save(path, descriptor) {
|
|
110
|
-
await writeFile(
|
|
106
|
+
await writeFile(
|
|
107
|
+
path,
|
|
108
|
+
JSON.stringify(descriptor, (k, v) => k === "picsValues" ? void 0 : v, 4)
|
|
109
|
+
);
|
|
111
110
|
}
|
|
112
111
|
TestDescriptor2.save = save;
|
|
113
112
|
function merge(previous, updates) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/test-descriptor.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAS,UAAU,iBAAiB;AACpC,SAAS,sBAAsB;
|
|
5
|
-
"names": ["TestDescriptor", "
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["TestDescriptor", "filter", "descriptor", "memberNames"]
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/testing",
|
|
3
|
-
"version": "0.13.1-alpha.0-
|
|
3
|
+
"version": "0.13.1-alpha.0-20250504-87f265a2e",
|
|
4
4
|
"description": "Test harness for running JavaScript and Matter certification tests",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"#tools/ansi-text": "@matter/tools/ansi-text"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@matter/tools": "0.13.1-alpha.0-
|
|
48
|
+
"@matter/tools": "0.13.1-alpha.0-20250504-87f265a2e",
|
|
49
49
|
"@types/express": "^5.0.1",
|
|
50
50
|
"ansi-colors": "^4.1.3",
|
|
51
51
|
"chai": "^4.5.0",
|
package/src/chip/chip.ts
CHANGED
|
@@ -12,7 +12,7 @@ import type { Container } from "../docker/container.js";
|
|
|
12
12
|
import { afterOne, beforeOne } from "../mocha.js";
|
|
13
13
|
import type { TestRunner } from "../runner.js";
|
|
14
14
|
import { TestDescriptor } from "../test-descriptor.js";
|
|
15
|
-
import { PicsFile } from "./pics
|
|
15
|
+
import { PicsFile } from "./pics/file.js";
|
|
16
16
|
import { State } from "./state.js";
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -28,6 +28,7 @@ import { State } from "./state.js";
|
|
|
28
28
|
* We execute test logic within a Docker container available at {@link https://github.com/matter-js/matter.js-chip}.
|
|
29
29
|
*/
|
|
30
30
|
export interface Chip extends chip.Builder {
|
|
31
|
+
(subject: Subject): chip.Builder;
|
|
31
32
|
(...include: string[]): chip.Builder;
|
|
32
33
|
|
|
33
34
|
/**
|
|
@@ -98,7 +99,12 @@ export interface Chip extends chip.Builder {
|
|
|
98
99
|
/**
|
|
99
100
|
* The active PICS configuration.
|
|
100
101
|
*/
|
|
101
|
-
|
|
102
|
+
defaultPics: PicsFile;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* The filename for default PICS in the container.
|
|
106
|
+
*/
|
|
107
|
+
defaultPicsFile: string;
|
|
102
108
|
|
|
103
109
|
/**
|
|
104
110
|
* The timeout for tests without an explicit timeout (defaults to 30s).
|
|
@@ -140,13 +146,12 @@ function createBuilder(initial: {
|
|
|
140
146
|
}
|
|
141
147
|
}
|
|
142
148
|
|
|
143
|
-
const
|
|
149
|
+
const tests = TestDescriptor.filter(chip.tests.descriptor, {
|
|
144
150
|
includePaths: [...includePaths],
|
|
145
151
|
kinds: ["py", "yaml"],
|
|
146
|
-
pics: chip.
|
|
152
|
+
pics: subject?.pics ?? chip.defaultPics,
|
|
147
153
|
});
|
|
148
154
|
|
|
149
|
-
const tests = TestDescriptor.filter(chip.tests.descriptor, predicate);
|
|
150
155
|
if (!tests?.members) {
|
|
151
156
|
return this;
|
|
152
157
|
}
|
|
@@ -159,10 +164,7 @@ function createBuilder(initial: {
|
|
|
159
164
|
},
|
|
160
165
|
|
|
161
166
|
exclude(...glob: string[]) {
|
|
162
|
-
const tests = TestDescriptor.filter(
|
|
163
|
-
chip.tests.descriptor,
|
|
164
|
-
TestDescriptor.predicateFor({ includePaths: globSync(glob, chip.tests) }),
|
|
165
|
-
);
|
|
167
|
+
const tests = TestDescriptor.filter(chip.tests.descriptor, { includePaths: globSync(glob, chip.tests) });
|
|
166
168
|
|
|
167
169
|
if (!tests) {
|
|
168
170
|
return this;
|
|
@@ -231,16 +233,16 @@ function createBuilder(initial: {
|
|
|
231
233
|
function defineTests(descriptor: TestDescriptor) {
|
|
232
234
|
switch (descriptor.kind) {
|
|
233
235
|
case "suite":
|
|
234
|
-
|
|
236
|
+
defineSuite(descriptor);
|
|
235
237
|
break;
|
|
236
238
|
|
|
237
239
|
default:
|
|
238
|
-
|
|
240
|
+
defineTest(descriptor);
|
|
239
241
|
break;
|
|
240
242
|
}
|
|
241
243
|
}
|
|
242
244
|
|
|
243
|
-
function
|
|
245
|
+
function defineSuite(descriptor: TestDescriptor) {
|
|
244
246
|
const mocha = State.mocha;
|
|
245
247
|
|
|
246
248
|
const { name, members } = descriptor;
|
|
@@ -277,7 +279,7 @@ function createBuilder(initial: {
|
|
|
277
279
|
});
|
|
278
280
|
}
|
|
279
281
|
|
|
280
|
-
function
|
|
282
|
+
function defineTest(descriptor: TestDescriptor) {
|
|
281
283
|
State.install();
|
|
282
284
|
const test = chip.testFor(descriptor);
|
|
283
285
|
const mochaTest = it(descriptor.name, function () {
|
|
@@ -300,8 +302,16 @@ function createBuilder(initial: {
|
|
|
300
302
|
}
|
|
301
303
|
}
|
|
302
304
|
|
|
303
|
-
function chipFn(...include: string[]): chip.Builder {
|
|
304
|
-
|
|
305
|
+
function chipFn(subjectOrFirstInclusion: Subject.Factory | string | undefined, ...include: string[]): chip.Builder {
|
|
306
|
+
if (typeof subjectOrFirstInclusion === "function") {
|
|
307
|
+
return chip.subject(subjectOrFirstInclusion).include(...include);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
if (typeof subjectOrFirstInclusion === "string") {
|
|
311
|
+
include = [subjectOrFirstInclusion, ...include];
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
return createBuilder({ include: [...include] });
|
|
305
315
|
}
|
|
306
316
|
|
|
307
317
|
Object.defineProperties(chipFn, {
|
|
@@ -339,8 +349,12 @@ Object.defineProperties(chipFn, {
|
|
|
339
349
|
get: () => State.isInitialized,
|
|
340
350
|
},
|
|
341
351
|
|
|
342
|
-
|
|
343
|
-
get: () => State.
|
|
352
|
+
defaultPics: {
|
|
353
|
+
get: () => State.defaultPics,
|
|
354
|
+
},
|
|
355
|
+
|
|
356
|
+
defaultPicsFilename: {
|
|
357
|
+
get: () => State.defaultPicsFilename,
|
|
344
358
|
},
|
|
345
359
|
|
|
346
360
|
pullBeforeTesting: {
|
package/src/chip/command-pipe.ts
CHANGED
|
@@ -17,9 +17,13 @@ export abstract class CommandPipe {
|
|
|
17
17
|
#filename: string;
|
|
18
18
|
#subject: BackchannelCommand.Subject;
|
|
19
19
|
|
|
20
|
-
constructor(subject: BackchannelCommand.Subject,
|
|
20
|
+
constructor(subject: BackchannelCommand.Subject, filename: string) {
|
|
21
21
|
this.#subject = subject;
|
|
22
|
-
this.#filename =
|
|
22
|
+
this.#filename = filename;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
static filenameFor(app: string) {
|
|
26
|
+
return `/tmp/chip_${app}_fifo_${process.pid}`;
|
|
23
27
|
}
|
|
24
28
|
|
|
25
29
|
get filename() {
|
package/src/chip/config.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { env } from "node:process";
|
|
8
|
+
import { PicsSource } from "./pics/source.js";
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* Significant locations within the test container.
|
|
@@ -17,7 +18,6 @@ export namespace ContainerPaths {
|
|
|
17
18
|
export const descriptorFile = `/lib/test-descriptor.json`;
|
|
18
19
|
export const pythonCommissioner = `/src/python_testing/hello_test.py`;
|
|
19
20
|
export const chipPics = "/src/app/tests/suites/certification/ci-pics-values";
|
|
20
|
-
export const matterJsPics = "/matter-js-pics.properties";
|
|
21
21
|
export const accessoryClient =
|
|
22
22
|
"/scripts/py_matter_yamltests/matter_yamltests/pseudo_clusters/clusters/accessory_server_bridge.py";
|
|
23
23
|
}
|
|
@@ -56,8 +56,6 @@ export namespace Constants {
|
|
|
56
56
|
export const initTimeout = 60_000;
|
|
57
57
|
export const defaultTimeoutMs = 60_000;
|
|
58
58
|
|
|
59
|
-
export const localPicsOverrideFile = "src/chip/matter-js-pics.properties";
|
|
60
|
-
|
|
61
59
|
/**
|
|
62
60
|
* We set the commissioning timeout value very low because this timeout is tested and waiting the default 180s.
|
|
63
61
|
* sucks. The timeout must be high enough for actual commissioning to succeed.
|
|
@@ -74,9 +72,6 @@ export namespace Constants {
|
|
|
74
72
|
* Default arguments provided to the YAML runner.
|
|
75
73
|
*/
|
|
76
74
|
export const YamlRunnerArgs = [
|
|
77
|
-
"--PICS",
|
|
78
|
-
ContainerPaths.matterJsPics,
|
|
79
|
-
|
|
80
75
|
// This makes CHIP logs unconditional which would be nice if it intermingled with our logs but currently they
|
|
81
76
|
// only appear once test is run; haven't tracked down how to stream them yet
|
|
82
77
|
// "--show_adapter_logs",
|
|
@@ -93,12 +88,17 @@ export namespace Constants {
|
|
|
93
88
|
* Default arguments provided to the Python runner.
|
|
94
89
|
*/
|
|
95
90
|
export const PythonRunnerArgs = [
|
|
96
|
-
"--PICS",
|
|
97
|
-
ContainerPaths.matterJsPics,
|
|
98
|
-
|
|
99
91
|
// Our PID is meaningless within the container but Python uses in the name of the command pipe. We pass in our
|
|
100
92
|
// actual PID to ensure no collision if multiple instances run
|
|
101
93
|
"--app-pid",
|
|
102
94
|
process.pid.toString(),
|
|
103
95
|
];
|
|
96
|
+
|
|
97
|
+
export const defaultPics: PicsSource = {
|
|
98
|
+
kind: "composite",
|
|
99
|
+
sources: [
|
|
100
|
+
{ kind: "chip", name: ContainerPaths.chipPics },
|
|
101
|
+
{ kind: "file", name: "src/chip/matter-js-pics.properties" },
|
|
102
|
+
],
|
|
103
|
+
};
|
|
104
104
|
}
|