@matter/testing 0.13.1-alpha.0-20250508-047aa0277 → 0.13.1-alpha.0-20250511-74ef153aa
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/device/test.d.ts +2 -2
- package/dist/cjs/device/test.d.ts.map +1 -1
- package/dist/cjs/device/test.js +4 -2
- package/dist/cjs/device/test.js.map +1 -1
- package/dist/cjs/docker/edit.d.ts +13 -4
- package/dist/cjs/docker/edit.d.ts.map +1 -1
- package/dist/cjs/docker/edit.js +41 -9
- package/dist/cjs/docker/edit.js.map +1 -1
- package/dist/esm/device/test.d.ts +2 -2
- package/dist/esm/device/test.d.ts.map +1 -1
- package/dist/esm/device/test.js +4 -2
- package/dist/esm/device/test.js.map +1 -1
- package/dist/esm/docker/edit.d.ts +13 -4
- package/dist/esm/docker/edit.d.ts.map +1 -1
- package/dist/esm/docker/edit.js +41 -9
- package/dist/esm/docker/edit.js.map +1 -1
- package/package.json +2 -2
- package/src/device/test.ts +5 -3
- package/src/docker/edit.ts +57 -12
|
@@ -15,7 +15,7 @@ export interface Test {
|
|
|
15
15
|
path: string;
|
|
16
16
|
descriptor: TestDescriptor;
|
|
17
17
|
container: Container;
|
|
18
|
-
edit(
|
|
18
|
+
edit(...editors: edit.Editor[]): Promise<void>;
|
|
19
19
|
initializeSubject(subject: Subject): Promise<void>;
|
|
20
20
|
invoke(subject: Subject, step: (title: string) => void, args: string[]): Promise<void>;
|
|
21
21
|
}
|
|
@@ -26,7 +26,7 @@ export declare abstract class BaseTest implements Test {
|
|
|
26
26
|
get path(): string;
|
|
27
27
|
get descriptor(): TestFileDescriptor;
|
|
28
28
|
get container(): Container;
|
|
29
|
-
edit(
|
|
29
|
+
edit(...editors: edit.Editor[]): Promise<void>;
|
|
30
30
|
abstract initializeSubject(subject: Subject): Promise<void>;
|
|
31
31
|
abstract invoke(subject: Subject, step: (title: string) => void, args: string[]): Promise<void>;
|
|
32
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/device/test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,IAAI;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/device/test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,IAAI;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1F;AAED,8BAAsB,QAAS,YAAW,IAAI;;gBAI9B,UAAU,EAAE,kBAAkB,EAAE,SAAS,EAAE,SAAS;IAKhE,IAAI,IAAI,WAEP;IAED,IAAI,IAAI,WAEP;IAED,IAAI,UAAU,uBAEb;IAED,IAAI,SAAS,cAEZ;IAEK,IAAI,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE;IAMpC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3D,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAClG;AAED,yBAAiB,IAAI,CAAC;IAClB;;OAEG;IACH,UAAiB,UAAU;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;QACvC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,KAAK,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;KAC7B;IAED,UAAiB,UAAU,CAAC;QACxB,UAAiB,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,CAAC,EAAE,MAAM,CAAC;SACjB;KACJ;IAED;;OAEG;IACH,SAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,UAM1C;CACJ"}
|
package/dist/cjs/device/test.js
CHANGED
|
@@ -46,8 +46,10 @@ class BaseTest {
|
|
|
46
46
|
get container() {
|
|
47
47
|
return this.#container;
|
|
48
48
|
}
|
|
49
|
-
edit(
|
|
50
|
-
|
|
49
|
+
async edit(...editors) {
|
|
50
|
+
for (const editor of editors) {
|
|
51
|
+
await this.#container.edit(editor, this.#descriptor.path);
|
|
52
|
+
}
|
|
51
53
|
}
|
|
52
54
|
}
|
|
53
55
|
var Test;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/device/test.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBO,MAAe,SAAyB;AAAA,EAC3C;AAAA,EACA;AAAA,EAEA,YAAY,YAAgC,WAAsB;AAC9D,SAAK,cAAc;AACnB,SAAK,aAAa;AAAA,EACtB;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,KAAK,YAAY;AAAA,EAC5B;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,KAAK,YAAY;AAAA,EAC5B;AAAA,EAEA,IAAI,aAAa;AACb,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,YAAY;AACZ,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBO,MAAe,SAAyB;AAAA,EAC3C;AAAA,EACA;AAAA,EAEA,YAAY,YAAgC,WAAsB;AAC9D,SAAK,cAAc;AACnB,SAAK,aAAa;AAAA,EACtB;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,KAAK,YAAY;AAAA,EAC5B;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,KAAK,YAAY;AAAA,EAC5B;AAAA,EAEA,IAAI,aAAa;AACb,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,YAAY;AACZ,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAM,QAAQ,SAAwB;AAClC,eAAW,UAAU,SAAS;AAC1B,YAAM,KAAK,WAAW,KAAK,QAAQ,KAAK,YAAY,IAAI;AAAA,IAC5D;AAAA,EACJ;AAIJ;AAEO,IAAU;AAAA,CAAV,CAAUA,UAAV;AAyBI,WAAS,eAAe,MAAc;AACzC,WAAO,KACF,YAAY,EACZ,MAAM,GAAG,EACT,IAAI,aAAY,QAAQ,MAAM,OAAO,IAAI,QAAQ,SAAS,GAAG,GAAG,IAAI,OAAQ,EAC5E,KAAK,GAAG;AAAA,EACjB;AANO,EAAAA,MAAS;AAAA,GAzBH;",
|
|
5
5
|
"names": ["Test"]
|
|
6
6
|
}
|
|
@@ -11,22 +11,31 @@ export declare namespace edit {
|
|
|
11
11
|
interface Editor {
|
|
12
12
|
(container: Container, files: string[]): Promise<void>;
|
|
13
13
|
}
|
|
14
|
-
interface
|
|
14
|
+
interface InsertionEditor {
|
|
15
|
+
after?: LineDetector;
|
|
16
|
+
before?: LineDetector;
|
|
17
|
+
lines?: LineProducer;
|
|
18
|
+
}
|
|
19
|
+
interface RegionEditor {
|
|
15
20
|
from?: LineDetector;
|
|
16
21
|
to?: LineDetector;
|
|
17
22
|
after?: LineDetector;
|
|
18
23
|
before?: LineDetector;
|
|
19
|
-
replacement?:
|
|
24
|
+
replacement?: LineProducer;
|
|
20
25
|
}
|
|
21
26
|
type LineDetector = string | RegExp | ((line: string) => boolean);
|
|
22
|
-
type
|
|
27
|
+
type LineProducer = string | string[] | ((...lines: string[]) => string[]);
|
|
23
28
|
/**
|
|
24
29
|
* Modify a file using sed -iz.
|
|
25
30
|
*/
|
|
26
31
|
function sed(...scripts: string[]): Editor;
|
|
32
|
+
/**
|
|
33
|
+
* Insert lines before/after key lines.
|
|
34
|
+
*/
|
|
35
|
+
function insert(...edits: InsertionEditor[]): Editor;
|
|
27
36
|
/**
|
|
28
37
|
* Replace regions of a file demarcated by key lines.
|
|
29
38
|
*/
|
|
30
|
-
function
|
|
39
|
+
function region(...edits: RegionEditor[]): Editor;
|
|
31
40
|
}
|
|
32
41
|
//# sourceMappingURL=edit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../../src/docker/edit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;GAEG;AACH,yBAAiB,IAAI,CAAC;IAClB,UAAiB,MAAM;QACnB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC1D;IAED,UAAiB,
|
|
1
|
+
{"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../../src/docker/edit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;GAEG;AACH,yBAAiB,IAAI,CAAC;IAClB,UAAiB,MAAM;QACnB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC1D;IAED,UAAiB,eAAe;QAC5B,KAAK,CAAC,EAAE,YAAY,CAAC;QACrB,MAAM,CAAC,EAAE,YAAY,CAAC;QACtB,KAAK,CAAC,EAAE,YAAY,CAAC;KACxB;IAED,UAAiB,YAAY;QACzB,IAAI,CAAC,EAAE,YAAY,CAAC;QACpB,EAAE,CAAC,EAAE,YAAY,CAAC;QAClB,KAAK,CAAC,EAAE,YAAY,CAAC;QACrB,MAAM,CAAC,EAAE,YAAY,CAAC;QACtB,WAAW,CAAC,EAAE,YAAY,CAAC;KAC9B;IAED,KAAY,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;IACzE,KAAY,YAAY,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC,CAAC;IAElF;;OAEG;IACH,SAAgB,GAAG,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAGhD;IAED;;OAEG;IACH,SAAgB,MAAM,CAAC,GAAG,KAAK,EAAE,eAAe,EAAE,GAAG,MAAM,CAM1D;IAED;;OAEG;IACH,SAAgB,MAAM,CAAC,GAAG,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,CAMvD;CACJ"}
|
package/dist/cjs/docker/edit.js
CHANGED
|
@@ -33,17 +33,49 @@ var edit;
|
|
|
33
33
|
return (container, paths) => container.exec(["sed", "-iz", script, ...paths]);
|
|
34
34
|
}
|
|
35
35
|
edit2.sed = sed;
|
|
36
|
-
function
|
|
36
|
+
function insert(...edits) {
|
|
37
|
+
return async (Container, paths) => {
|
|
38
|
+
for (const path of paths) {
|
|
39
|
+
await insertLinesInto(Container, path, edits);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
edit2.insert = insert;
|
|
44
|
+
function region(...edits) {
|
|
37
45
|
return async (container, paths) => {
|
|
38
46
|
for (const path of paths) {
|
|
39
|
-
await
|
|
47
|
+
await editRegionsOf(container, path, edits);
|
|
40
48
|
}
|
|
41
49
|
};
|
|
42
50
|
}
|
|
43
|
-
edit2.
|
|
51
|
+
edit2.region = region;
|
|
44
52
|
})(edit || (edit = {}));
|
|
45
|
-
async function
|
|
46
|
-
const editors =
|
|
53
|
+
async function insertLinesInto(container, path, edits) {
|
|
54
|
+
const editors = insertionEditorsOf(edits);
|
|
55
|
+
const input = (await container.read(path)).split("\n");
|
|
56
|
+
const output = Array();
|
|
57
|
+
for (const line of input) {
|
|
58
|
+
for (const editor of editors) {
|
|
59
|
+
if (editor.before?.(line)) {
|
|
60
|
+
output.push(...editor.lines(line));
|
|
61
|
+
}
|
|
62
|
+
output.push(line);
|
|
63
|
+
if (editor.after?.(line)) {
|
|
64
|
+
output.push(...editor.lines(line));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
await container.write(path, output.join("\n"));
|
|
69
|
+
}
|
|
70
|
+
function insertionEditorsOf(edits) {
|
|
71
|
+
return edits.map(({ before, after, lines }) => ({
|
|
72
|
+
before: detectorOf(before),
|
|
73
|
+
after: detectorOf(after),
|
|
74
|
+
lines: replacementOf(lines)
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
async function editRegionsOf(container, path, edits) {
|
|
78
|
+
const editors = regionEditorsOf(edits);
|
|
47
79
|
let editor;
|
|
48
80
|
const input = (await container.read(path)).split("\n");
|
|
49
81
|
const output = Array();
|
|
@@ -66,7 +98,7 @@ async function editLinesOf(container, path, edits) {
|
|
|
66
98
|
editor?.finish(output);
|
|
67
99
|
await container.write(path, output.join("\n"));
|
|
68
100
|
}
|
|
69
|
-
function
|
|
101
|
+
function regionEditorsOf(edits) {
|
|
70
102
|
return edits.map(({ from, to, after, before, replacement }) => {
|
|
71
103
|
let collecting = from === void 0 && after === void 0;
|
|
72
104
|
from = detectorOf(from);
|
|
@@ -91,13 +123,13 @@ function editorsOf(edits) {
|
|
|
91
123
|
collect(line, output) {
|
|
92
124
|
if (collecting) {
|
|
93
125
|
if (to?.(line)) {
|
|
94
|
-
output.push(...replacement(collected));
|
|
126
|
+
output.push(...replacement(...collected));
|
|
95
127
|
collected.length = 0;
|
|
96
128
|
collecting = false;
|
|
97
129
|
return true;
|
|
98
130
|
}
|
|
99
131
|
if (before?.(line)) {
|
|
100
|
-
output.push(...replacement(collected));
|
|
132
|
+
output.push(...replacement(...collected));
|
|
101
133
|
collected.length = 0;
|
|
102
134
|
collecting = false;
|
|
103
135
|
return false;
|
|
@@ -108,7 +140,7 @@ function editorsOf(edits) {
|
|
|
108
140
|
},
|
|
109
141
|
finish(output) {
|
|
110
142
|
if (collecting && to === void 0 && before === void 0) {
|
|
111
|
-
output.push(...replacement(collected));
|
|
143
|
+
output.push(...replacement(...collected));
|
|
112
144
|
}
|
|
113
145
|
}
|
|
114
146
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/docker/edit.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWO,IAAU;AAAA,CAAV,CAAUA,UAAV;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["edit"]
|
|
6
6
|
}
|
|
@@ -15,7 +15,7 @@ export interface Test {
|
|
|
15
15
|
path: string;
|
|
16
16
|
descriptor: TestDescriptor;
|
|
17
17
|
container: Container;
|
|
18
|
-
edit(
|
|
18
|
+
edit(...editors: edit.Editor[]): Promise<void>;
|
|
19
19
|
initializeSubject(subject: Subject): Promise<void>;
|
|
20
20
|
invoke(subject: Subject, step: (title: string) => void, args: string[]): Promise<void>;
|
|
21
21
|
}
|
|
@@ -26,7 +26,7 @@ export declare abstract class BaseTest implements Test {
|
|
|
26
26
|
get path(): string;
|
|
27
27
|
get descriptor(): TestFileDescriptor;
|
|
28
28
|
get container(): Container;
|
|
29
|
-
edit(
|
|
29
|
+
edit(...editors: edit.Editor[]): Promise<void>;
|
|
30
30
|
abstract initializeSubject(subject: Subject): Promise<void>;
|
|
31
31
|
abstract invoke(subject: Subject, step: (title: string) => void, args: string[]): Promise<void>;
|
|
32
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/device/test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,IAAI;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/device/test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,IAAI;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1F;AAED,8BAAsB,QAAS,YAAW,IAAI;;gBAI9B,UAAU,EAAE,kBAAkB,EAAE,SAAS,EAAE,SAAS;IAKhE,IAAI,IAAI,WAEP;IAED,IAAI,IAAI,WAEP;IAED,IAAI,UAAU,uBAEb;IAED,IAAI,SAAS,cAEZ;IAEK,IAAI,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE;IAMpC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3D,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAClG;AAED,yBAAiB,IAAI,CAAC;IAClB;;OAEG;IACH,UAAiB,UAAU;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;QACvC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,KAAK,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;KAC7B;IAED,UAAiB,UAAU,CAAC;QACxB,UAAiB,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,CAAC,EAAE,MAAM,CAAC;SACjB;KACJ;IAED;;OAEG;IACH,SAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,UAM1C;CACJ"}
|
package/dist/esm/device/test.js
CHANGED
|
@@ -22,8 +22,10 @@ class BaseTest {
|
|
|
22
22
|
get container() {
|
|
23
23
|
return this.#container;
|
|
24
24
|
}
|
|
25
|
-
edit(
|
|
26
|
-
|
|
25
|
+
async edit(...editors) {
|
|
26
|
+
for (const editor of editors) {
|
|
27
|
+
await this.#container.edit(editor, this.#descriptor.path);
|
|
28
|
+
}
|
|
27
29
|
}
|
|
28
30
|
}
|
|
29
31
|
var Test;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/device/test.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAwBO,MAAe,SAAyB;AAAA,EAC3C;AAAA,EACA;AAAA,EAEA,YAAY,YAAgC,WAAsB;AAC9D,SAAK,cAAc;AACnB,SAAK,aAAa;AAAA,EACtB;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,KAAK,YAAY;AAAA,EAC5B;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,KAAK,YAAY;AAAA,EAC5B;AAAA,EAEA,IAAI,aAAa;AACb,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,YAAY;AACZ,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAwBO,MAAe,SAAyB;AAAA,EAC3C;AAAA,EACA;AAAA,EAEA,YAAY,YAAgC,WAAsB;AAC9D,SAAK,cAAc;AACnB,SAAK,aAAa;AAAA,EACtB;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,KAAK,YAAY;AAAA,EAC5B;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,KAAK,YAAY;AAAA,EAC5B;AAAA,EAEA,IAAI,aAAa;AACb,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,YAAY;AACZ,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAM,QAAQ,SAAwB;AAClC,eAAW,UAAU,SAAS;AAC1B,YAAM,KAAK,WAAW,KAAK,QAAQ,KAAK,YAAY,IAAI;AAAA,IAC5D;AAAA,EACJ;AAIJ;AAEO,IAAU;AAAA,CAAV,CAAUA,UAAV;AAyBI,WAAS,eAAe,MAAc;AACzC,WAAO,KACF,YAAY,EACZ,MAAM,GAAG,EACT,IAAI,aAAY,QAAQ,MAAM,OAAO,IAAI,QAAQ,SAAS,GAAG,GAAG,IAAI,OAAQ,EAC5E,KAAK,GAAG;AAAA,EACjB;AANO,EAAAA,MAAS;AAAA,GAzBH;",
|
|
5
5
|
"names": ["Test"]
|
|
6
6
|
}
|
|
@@ -11,22 +11,31 @@ export declare namespace edit {
|
|
|
11
11
|
interface Editor {
|
|
12
12
|
(container: Container, files: string[]): Promise<void>;
|
|
13
13
|
}
|
|
14
|
-
interface
|
|
14
|
+
interface InsertionEditor {
|
|
15
|
+
after?: LineDetector;
|
|
16
|
+
before?: LineDetector;
|
|
17
|
+
lines?: LineProducer;
|
|
18
|
+
}
|
|
19
|
+
interface RegionEditor {
|
|
15
20
|
from?: LineDetector;
|
|
16
21
|
to?: LineDetector;
|
|
17
22
|
after?: LineDetector;
|
|
18
23
|
before?: LineDetector;
|
|
19
|
-
replacement?:
|
|
24
|
+
replacement?: LineProducer;
|
|
20
25
|
}
|
|
21
26
|
type LineDetector = string | RegExp | ((line: string) => boolean);
|
|
22
|
-
type
|
|
27
|
+
type LineProducer = string | string[] | ((...lines: string[]) => string[]);
|
|
23
28
|
/**
|
|
24
29
|
* Modify a file using sed -iz.
|
|
25
30
|
*/
|
|
26
31
|
function sed(...scripts: string[]): Editor;
|
|
32
|
+
/**
|
|
33
|
+
* Insert lines before/after key lines.
|
|
34
|
+
*/
|
|
35
|
+
function insert(...edits: InsertionEditor[]): Editor;
|
|
27
36
|
/**
|
|
28
37
|
* Replace regions of a file demarcated by key lines.
|
|
29
38
|
*/
|
|
30
|
-
function
|
|
39
|
+
function region(...edits: RegionEditor[]): Editor;
|
|
31
40
|
}
|
|
32
41
|
//# sourceMappingURL=edit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../../src/docker/edit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;GAEG;AACH,yBAAiB,IAAI,CAAC;IAClB,UAAiB,MAAM;QACnB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC1D;IAED,UAAiB,
|
|
1
|
+
{"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../../src/docker/edit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;GAEG;AACH,yBAAiB,IAAI,CAAC;IAClB,UAAiB,MAAM;QACnB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC1D;IAED,UAAiB,eAAe;QAC5B,KAAK,CAAC,EAAE,YAAY,CAAC;QACrB,MAAM,CAAC,EAAE,YAAY,CAAC;QACtB,KAAK,CAAC,EAAE,YAAY,CAAC;KACxB;IAED,UAAiB,YAAY;QACzB,IAAI,CAAC,EAAE,YAAY,CAAC;QACpB,EAAE,CAAC,EAAE,YAAY,CAAC;QAClB,KAAK,CAAC,EAAE,YAAY,CAAC;QACrB,MAAM,CAAC,EAAE,YAAY,CAAC;QACtB,WAAW,CAAC,EAAE,YAAY,CAAC;KAC9B;IAED,KAAY,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;IACzE,KAAY,YAAY,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC,CAAC;IAElF;;OAEG;IACH,SAAgB,GAAG,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAGhD;IAED;;OAEG;IACH,SAAgB,MAAM,CAAC,GAAG,KAAK,EAAE,eAAe,EAAE,GAAG,MAAM,CAM1D;IAED;;OAEG;IACH,SAAgB,MAAM,CAAC,GAAG,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,CAMvD;CACJ"}
|
package/dist/esm/docker/edit.js
CHANGED
|
@@ -10,17 +10,49 @@ var edit;
|
|
|
10
10
|
return (container, paths) => container.exec(["sed", "-iz", script, ...paths]);
|
|
11
11
|
}
|
|
12
12
|
edit2.sed = sed;
|
|
13
|
-
function
|
|
13
|
+
function insert(...edits) {
|
|
14
|
+
return async (Container, paths) => {
|
|
15
|
+
for (const path of paths) {
|
|
16
|
+
await insertLinesInto(Container, path, edits);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
edit2.insert = insert;
|
|
21
|
+
function region(...edits) {
|
|
14
22
|
return async (container, paths) => {
|
|
15
23
|
for (const path of paths) {
|
|
16
|
-
await
|
|
24
|
+
await editRegionsOf(container, path, edits);
|
|
17
25
|
}
|
|
18
26
|
};
|
|
19
27
|
}
|
|
20
|
-
edit2.
|
|
28
|
+
edit2.region = region;
|
|
21
29
|
})(edit || (edit = {}));
|
|
22
|
-
async function
|
|
23
|
-
const editors =
|
|
30
|
+
async function insertLinesInto(container, path, edits) {
|
|
31
|
+
const editors = insertionEditorsOf(edits);
|
|
32
|
+
const input = (await container.read(path)).split("\n");
|
|
33
|
+
const output = Array();
|
|
34
|
+
for (const line of input) {
|
|
35
|
+
for (const editor of editors) {
|
|
36
|
+
if (editor.before?.(line)) {
|
|
37
|
+
output.push(...editor.lines(line));
|
|
38
|
+
}
|
|
39
|
+
output.push(line);
|
|
40
|
+
if (editor.after?.(line)) {
|
|
41
|
+
output.push(...editor.lines(line));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
await container.write(path, output.join("\n"));
|
|
46
|
+
}
|
|
47
|
+
function insertionEditorsOf(edits) {
|
|
48
|
+
return edits.map(({ before, after, lines }) => ({
|
|
49
|
+
before: detectorOf(before),
|
|
50
|
+
after: detectorOf(after),
|
|
51
|
+
lines: replacementOf(lines)
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
async function editRegionsOf(container, path, edits) {
|
|
55
|
+
const editors = regionEditorsOf(edits);
|
|
24
56
|
let editor;
|
|
25
57
|
const input = (await container.read(path)).split("\n");
|
|
26
58
|
const output = Array();
|
|
@@ -43,7 +75,7 @@ async function editLinesOf(container, path, edits) {
|
|
|
43
75
|
editor?.finish(output);
|
|
44
76
|
await container.write(path, output.join("\n"));
|
|
45
77
|
}
|
|
46
|
-
function
|
|
78
|
+
function regionEditorsOf(edits) {
|
|
47
79
|
return edits.map(({ from, to, after, before, replacement }) => {
|
|
48
80
|
let collecting = from === void 0 && after === void 0;
|
|
49
81
|
from = detectorOf(from);
|
|
@@ -68,13 +100,13 @@ function editorsOf(edits) {
|
|
|
68
100
|
collect(line, output) {
|
|
69
101
|
if (collecting) {
|
|
70
102
|
if (to?.(line)) {
|
|
71
|
-
output.push(...replacement(collected));
|
|
103
|
+
output.push(...replacement(...collected));
|
|
72
104
|
collected.length = 0;
|
|
73
105
|
collecting = false;
|
|
74
106
|
return true;
|
|
75
107
|
}
|
|
76
108
|
if (before?.(line)) {
|
|
77
|
-
output.push(...replacement(collected));
|
|
109
|
+
output.push(...replacement(...collected));
|
|
78
110
|
collected.length = 0;
|
|
79
111
|
collecting = false;
|
|
80
112
|
return false;
|
|
@@ -85,7 +117,7 @@ function editorsOf(edits) {
|
|
|
85
117
|
},
|
|
86
118
|
finish(output) {
|
|
87
119
|
if (collecting && to === void 0 && before === void 0) {
|
|
88
|
-
output.push(...replacement(collected));
|
|
120
|
+
output.push(...replacement(...collected));
|
|
89
121
|
}
|
|
90
122
|
}
|
|
91
123
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/docker/edit.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAWO,IAAU;AAAA,CAAV,CAAUA,UAAV;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["edit"]
|
|
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-20250511-74ef153aa",
|
|
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-20250511-74ef153aa",
|
|
49
49
|
"@types/express": "^5.0.1",
|
|
50
50
|
"ansi-colors": "^4.1.3",
|
|
51
51
|
"chai": "^4.5.0",
|
package/src/device/test.ts
CHANGED
|
@@ -17,7 +17,7 @@ export interface Test {
|
|
|
17
17
|
path: string;
|
|
18
18
|
descriptor: TestDescriptor;
|
|
19
19
|
container: Container;
|
|
20
|
-
edit(
|
|
20
|
+
edit(...editors: edit.Editor[]): Promise<void>;
|
|
21
21
|
initializeSubject(subject: Subject): Promise<void>;
|
|
22
22
|
invoke(subject: Subject, step: (title: string) => void, args: string[]): Promise<void>;
|
|
23
23
|
}
|
|
@@ -47,8 +47,10 @@ export abstract class BaseTest implements Test {
|
|
|
47
47
|
return this.#container;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
edit(
|
|
51
|
-
|
|
50
|
+
async edit(...editors: edit.Editor[]) {
|
|
51
|
+
for (const editor of editors) {
|
|
52
|
+
await this.#container.edit(editor, this.#descriptor.path);
|
|
53
|
+
}
|
|
52
54
|
}
|
|
53
55
|
|
|
54
56
|
abstract initializeSubject(subject: Subject): Promise<void>;
|
package/src/docker/edit.ts
CHANGED
|
@@ -14,16 +14,22 @@ export namespace edit {
|
|
|
14
14
|
(container: Container, files: string[]): Promise<void>;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
export interface
|
|
17
|
+
export interface InsertionEditor {
|
|
18
|
+
after?: LineDetector;
|
|
19
|
+
before?: LineDetector;
|
|
20
|
+
lines?: LineProducer;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface RegionEditor {
|
|
18
24
|
from?: LineDetector;
|
|
19
25
|
to?: LineDetector;
|
|
20
26
|
after?: LineDetector;
|
|
21
27
|
before?: LineDetector;
|
|
22
|
-
replacement?:
|
|
28
|
+
replacement?: LineProducer;
|
|
23
29
|
}
|
|
24
30
|
|
|
25
31
|
export type LineDetector = string | RegExp | ((line: string) => boolean);
|
|
26
|
-
export type
|
|
32
|
+
export type LineProducer = string | string[] | ((...lines: string[]) => string[]);
|
|
27
33
|
|
|
28
34
|
/**
|
|
29
35
|
* Modify a file using sed -iz.
|
|
@@ -33,13 +39,24 @@ export namespace edit {
|
|
|
33
39
|
return (container, paths) => container.exec(["sed", "-iz", script, ...paths]);
|
|
34
40
|
}
|
|
35
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Insert lines before/after key lines.
|
|
44
|
+
*/
|
|
45
|
+
export function insert(...edits: InsertionEditor[]): Editor {
|
|
46
|
+
return async (Container, paths) => {
|
|
47
|
+
for (const path of paths) {
|
|
48
|
+
await insertLinesInto(Container, path, edits);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
36
53
|
/**
|
|
37
54
|
* Replace regions of a file demarcated by key lines.
|
|
38
55
|
*/
|
|
39
|
-
export function
|
|
56
|
+
export function region(...edits: RegionEditor[]): Editor {
|
|
40
57
|
return async (container, paths) => {
|
|
41
58
|
for (const path of paths) {
|
|
42
|
-
await
|
|
59
|
+
await editRegionsOf(container, path, edits);
|
|
43
60
|
}
|
|
44
61
|
};
|
|
45
62
|
}
|
|
@@ -51,8 +68,36 @@ interface CompiledLineEditor {
|
|
|
51
68
|
finish(output: string[]): void;
|
|
52
69
|
}
|
|
53
70
|
|
|
54
|
-
async function
|
|
55
|
-
const editors =
|
|
71
|
+
async function insertLinesInto(container: Container, path: string, edits: edit.InsertionEditor[]) {
|
|
72
|
+
const editors = insertionEditorsOf(edits);
|
|
73
|
+
const input = (await container.read(path)).split("\n");
|
|
74
|
+
const output = Array<string>();
|
|
75
|
+
|
|
76
|
+
for (const line of input) {
|
|
77
|
+
for (const editor of editors) {
|
|
78
|
+
if (editor.before?.(line)) {
|
|
79
|
+
output.push(...editor.lines(line));
|
|
80
|
+
}
|
|
81
|
+
output.push(line);
|
|
82
|
+
if (editor.after?.(line)) {
|
|
83
|
+
output.push(...editor.lines(line));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
await container.write(path, output.join("\n"));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function insertionEditorsOf(edits: edit.InsertionEditor[]) {
|
|
92
|
+
return edits.map(({ before, after, lines }) => ({
|
|
93
|
+
before: detectorOf(before),
|
|
94
|
+
after: detectorOf(after),
|
|
95
|
+
lines: replacementOf(lines),
|
|
96
|
+
}));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
async function editRegionsOf(container: Container, path: string, edits: edit.RegionEditor[]) {
|
|
100
|
+
const editors = regionEditorsOf(edits);
|
|
56
101
|
let editor: CompiledLineEditor | undefined;
|
|
57
102
|
const input = (await container.read(path)).split("\n");
|
|
58
103
|
const output = Array<string>();
|
|
@@ -81,7 +126,7 @@ async function editLinesOf(container: Container, path: string, edits: edit.LineE
|
|
|
81
126
|
await container.write(path, output.join("\n"));
|
|
82
127
|
}
|
|
83
128
|
|
|
84
|
-
function
|
|
129
|
+
function regionEditorsOf(edits: edit.RegionEditor[]): CompiledLineEditor[] {
|
|
85
130
|
return edits.map(({ from, to, after, before, replacement }) => {
|
|
86
131
|
// Start out in collecting state iff we have no detector that would start collection
|
|
87
132
|
let collecting = from === undefined && after === undefined;
|
|
@@ -112,13 +157,13 @@ function editorsOf(edits: edit.LineEditor[]): CompiledLineEditor[] {
|
|
|
112
157
|
collect(line: string, output: string[]) {
|
|
113
158
|
if (collecting) {
|
|
114
159
|
if (to?.(line)) {
|
|
115
|
-
output.push(...replacement(collected));
|
|
160
|
+
output.push(...replacement(...collected));
|
|
116
161
|
collected.length = 0;
|
|
117
162
|
collecting = false;
|
|
118
163
|
return true;
|
|
119
164
|
}
|
|
120
165
|
if (before?.(line)) {
|
|
121
|
-
output.push(...replacement(collected));
|
|
166
|
+
output.push(...replacement(...collected));
|
|
122
167
|
collected.length = 0;
|
|
123
168
|
collecting = false;
|
|
124
169
|
return false;
|
|
@@ -130,7 +175,7 @@ function editorsOf(edits: edit.LineEditor[]): CompiledLineEditor[] {
|
|
|
130
175
|
|
|
131
176
|
finish(output: string[]) {
|
|
132
177
|
if (collecting && to === undefined && before === undefined) {
|
|
133
|
-
output.push(...replacement(collected));
|
|
178
|
+
output.push(...replacement(...collected));
|
|
134
179
|
}
|
|
135
180
|
},
|
|
136
181
|
};
|
|
@@ -153,7 +198,7 @@ function detectorOf(detector?: edit.LineDetector) {
|
|
|
153
198
|
return detector;
|
|
154
199
|
}
|
|
155
200
|
|
|
156
|
-
function replacementOf(replacement?: edit.
|
|
201
|
+
function replacementOf(replacement?: edit.LineProducer): (...lines: string[]) => string[] {
|
|
157
202
|
if (replacement === undefined) {
|
|
158
203
|
return () => [];
|
|
159
204
|
}
|