testeranto 0.90.0 → 0.100.0
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/bundle.js +4 -7
- package/dist/common/src/Node.js +5 -3
- package/dist/common/src/PM/main.js +254 -126
- package/dist/common/src/PM/node.js +20 -5
- package/dist/common/src/PM/web.js +19 -4
- package/dist/common/src/SubPackages/puppeteer.js +1 -1
- package/dist/common/src/SubPackages/react/jsx/index.js +14 -6
- package/dist/common/src/SubPackages/react/jsx/node.js +2 -2
- package/dist/common/src/SubPackages/react-dom/component/web.js +13 -39
- package/dist/common/src/SubPackages/react-test-renderer/component/interface.js +2 -10
- package/dist/common/src/Web.js +25 -21
- package/dist/common/src/cli.js +439 -0
- package/dist/common/src/cli2.js +144 -0
- package/dist/common/src/esbuildConfigs/inputFilesPlugin.js +18 -8
- package/dist/common/src/esbuildConfigs/node.js +1 -4
- package/dist/common/src/esbuildConfigs/web.js +1 -1
- package/dist/common/src/lib/abstractBase.js +31 -263
- package/dist/common/src/lib/basebuilder.js +1 -11
- package/dist/common/src/lib/classBuilder.js +1 -1
- package/dist/common/src/lib/core.js +8 -28
- package/dist/common/src/lib/types.js +1 -0
- package/dist/common/tsconfig.common.tsbuildinfo +1 -1
- package/dist/module/src/Node.js +5 -3
- package/dist/module/src/PM/main.js +254 -126
- package/dist/module/src/PM/node.js +20 -5
- package/dist/module/src/PM/web.js +19 -4
- package/dist/module/src/SubPackages/puppeteer.js +1 -1
- package/dist/module/src/SubPackages/react/jsx/index.js +14 -6
- package/dist/module/src/SubPackages/react/jsx/node.js +2 -2
- package/dist/module/src/SubPackages/react-dom/component/web.js +13 -39
- package/dist/module/src/SubPackages/react-test-renderer/component/interface.js +2 -10
- package/dist/module/src/Web.js +25 -21
- package/dist/module/src/cli.js +411 -0
- package/dist/module/src/cli2.js +116 -0
- package/dist/module/src/esbuildConfigs/inputFilesPlugin.js +18 -8
- package/dist/module/src/esbuildConfigs/node.js +1 -4
- package/dist/module/src/esbuildConfigs/web.js +1 -1
- package/dist/module/src/lib/abstractBase.js +31 -263
- package/dist/module/src/lib/basebuilder.js +1 -11
- package/dist/module/src/lib/classBuilder.js +1 -1
- package/dist/module/src/lib/core.js +8 -28
- package/dist/module/src/lib/types.js +1 -0
- package/dist/module/tsconfig.module.tsbuildinfo +1 -1
- package/dist/prebuild/cli.mjs +1491 -0
- package/dist/prebuild/{run-tests.mjs → cli2.mjs} +223 -212
- package/dist/types/src/Node.d.ts +6 -3
- package/dist/types/src/PM/index.d.ts +10 -2
- package/dist/types/src/PM/main.d.ts +14 -7
- package/dist/types/src/PM/node.d.ts +9 -2
- package/dist/types/src/PM/web.d.ts +9 -3
- package/dist/types/src/SubPackages/puppeteer.d.ts +1 -1
- package/dist/types/src/SubPackages/react/component/node.d.ts +1 -1
- package/dist/types/src/SubPackages/react/component/web.d.ts +1 -1
- package/dist/types/src/SubPackages/react/jsx/node.d.ts +3 -3
- package/dist/types/src/SubPackages/react/jsx/web.d.ts +2 -2
- package/dist/types/src/SubPackages/react-dom/component/node.d.ts +2 -2
- package/dist/types/src/SubPackages/react-dom/component/web.d.ts +1 -1
- package/dist/types/src/SubPackages/react-dom/jsx/node.d.ts +1 -1
- package/dist/types/src/SubPackages/react-dom/jsx/web.d.ts +2 -2
- package/dist/types/src/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +2 -2
- package/dist/types/src/SubPackages/react-test-renderer/component/interface.d.ts +1 -1
- package/dist/types/src/SubPackages/react-test-renderer/component/node.d.ts +2 -2
- package/dist/types/src/SubPackages/react-test-renderer/component/web.d.ts +2 -2
- package/dist/types/src/SubPackages/react-test-renderer/fc/node.d.ts +2 -2
- package/dist/types/src/SubPackages/react-test-renderer/fc/web.d.ts +2 -2
- package/dist/types/src/SubPackages/react-test-renderer/jsx/node.d.ts +3 -2
- package/dist/types/src/SubPackages/react-test-renderer/jsx/web.d.ts +2 -2
- package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/node.d.ts +2 -2
- package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/web.d.ts +2 -2
- package/dist/types/src/Types.d.ts +60 -21
- package/dist/types/src/Web.d.ts +3 -3
- package/dist/types/src/lib/abstractBase.d.ts +6 -2
- package/dist/types/src/lib/core.d.ts +3 -3
- package/dist/types/src/lib/index.d.ts +1 -1
- package/dist/types/src/lib/types.d.ts +6 -30
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/package.json +23 -20
- package/src/Node.ts +6 -3
- package/src/PM/index.ts +12 -8
- package/src/PM/main.ts +331 -165
- package/src/PM/node.ts +42 -7
- package/src/PM/web.ts +33 -5
- package/src/SubPackages/puppeteer.ts +1 -1
- package/src/SubPackages/react/jsx/index.ts +15 -7
- package/src/SubPackages/react/jsx/node.ts +18 -6
- package/src/SubPackages/react-dom/component/web.ts +28 -51
- package/src/SubPackages/react-test-renderer/component/interface.ts +4 -11
- package/src/SubPackages/react-test-renderer/jsx/node.ts +16 -1
- package/src/Types.ts +362 -114
- package/src/Web.ts +45 -23
- package/src/cli.ts +535 -0
- package/src/cli2.ts +157 -0
- package/src/esbuildConfigs/inputFilesPlugin.ts +27 -9
- package/src/esbuildConfigs/node.ts +4 -7
- package/src/esbuildConfigs/web.ts +4 -3
- package/src/lib/abstractBase.ts +84 -291
- package/src/lib/basebuilder.ts +1 -12
- package/src/lib/classBuilder.ts +2 -1
- package/src/lib/core.ts +17 -29
- package/src/lib/types.ts +5 -177
- package/dist/common/src/Aider.js +0 -143
- package/dist/common/src/Project.js +0 -225
- package/dist/common/src/Puppeteer.js +0 -113
- package/dist/common/src/build-tests.js +0 -39
- package/dist/common/src/esbuildConfigs/features.js +0 -14
- package/dist/common/src/esbuildConfigs/report.js +0 -14
- package/dist/common/src/esbuildConfigs/tests.js +0 -13
- package/dist/common/src/run-tests.js +0 -39
- package/dist/module/src/Aider.js +0 -136
- package/dist/module/src/Project.js +0 -218
- package/dist/module/src/Puppeteer.js +0 -108
- package/dist/module/src/build-tests.js +0 -11
- package/dist/module/src/esbuildConfigs/features.js +0 -12
- package/dist/module/src/esbuildConfigs/report.js +0 -14
- package/dist/module/src/esbuildConfigs/tests.js +0 -11
- package/dist/module/src/run-tests.js +0 -11
- package/dist/prebuild/build-tests.mjs +0 -552
- package/dist/types/src/Aider.d.ts +0 -1
- package/dist/types/src/Project.d.ts +0 -12
- package/dist/types/src/Puppeteer.d.ts +0 -2
- package/dist/types/src/esbuildConfigs/features.d.ts +0 -4
- package/dist/types/src/esbuildConfigs/report.d.ts +0 -0
- package/dist/types/src/esbuildConfigs/tests.d.ts +0 -4
- package/src/Aider.ts +0 -168
- package/src/Project.ts +0 -291
- package/src/Puppeteer.ts +0 -145
- package/src/build-tests.ts +0 -12
- package/src/esbuildConfigs/features.ts +0 -17
- package/src/esbuildConfigs/report.ts +0 -15
- package/src/esbuildConfigs/tests.ts +0 -14
- package/src/run-tests.ts +0 -12
- /package/dist/types/src/{build-tests.d.ts → cli.d.ts} +0 -0
- /package/dist/types/src/{run-tests.d.ts → cli2.d.ts} +0 -0
package/src/PM/main.ts
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
|
+
import { CdpPage, Page } from "puppeteer-core/lib/esm/puppeteer";
|
|
1
2
|
import fs from "fs";
|
|
2
3
|
import path from "path";
|
|
3
4
|
import puppeteer, {
|
|
4
5
|
Browser,
|
|
5
6
|
ConsoleMessage,
|
|
7
|
+
LaunchOptions,
|
|
8
|
+
ScreenRecorder,
|
|
6
9
|
ScreenshotOptions,
|
|
7
10
|
} from "puppeteer-core";
|
|
8
11
|
import { PassThrough } from "stream";
|
|
9
12
|
import crypto from "crypto";
|
|
10
13
|
|
|
11
|
-
import { IBuiltConfig, ITestTypes } from "../lib/types";
|
|
14
|
+
import { IBuiltConfig, IFinalResults, ITestTypes } from "../lib/types";
|
|
15
|
+
import { ITLog } from "../lib/index.js";
|
|
12
16
|
|
|
13
17
|
import { PM } from "./index.js";
|
|
14
|
-
import { destinationOfRuntime } from "../utils.js";
|
|
15
|
-
import { ITLog } from "../lib/index.js";
|
|
16
|
-
import { Page } from "puppeteer-core/lib/esm/puppeteer";
|
|
17
18
|
|
|
18
19
|
const fileStreams3: fs.WriteStream[] = [];
|
|
19
20
|
|
|
@@ -22,8 +23,21 @@ type IFPaths = string[];
|
|
|
22
23
|
const fPaths: IFPaths = [];
|
|
23
24
|
|
|
24
25
|
const files: Record<string, Set<string>> = {};
|
|
26
|
+
const recorders: Record<string, ScreenRecorder> = {};
|
|
25
27
|
const screenshots: Record<string, Promise<Uint8Array>[]> = {};
|
|
26
28
|
|
|
29
|
+
const red = "\x1b[31m";
|
|
30
|
+
const green = "\x1b[32m";
|
|
31
|
+
const reset = "\x1b[0m"; // Resets to default color
|
|
32
|
+
|
|
33
|
+
const statusMessagePretty = (failures: number, test: string) => {
|
|
34
|
+
if (failures === 0) {
|
|
35
|
+
console.log(green + `${test} completed successfully` + reset);
|
|
36
|
+
} else {
|
|
37
|
+
console.log(red + `${test} failed ${failures} times` + reset);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
27
41
|
export class PM_Main extends PM {
|
|
28
42
|
browser: Browser;
|
|
29
43
|
|
|
@@ -43,6 +57,46 @@ export class PM_Main extends PM {
|
|
|
43
57
|
this.ports[element] = "true"; // set ports as open
|
|
44
58
|
});
|
|
45
59
|
|
|
60
|
+
globalThis["waitForSelector"] = async (pageKey: string, sel: string) => {
|
|
61
|
+
console.log("waitForSelector", pageKey, sel);
|
|
62
|
+
const page = (await this.browser.pages()).find(
|
|
63
|
+
(p) => p.mainFrame()._id === pageKey
|
|
64
|
+
);
|
|
65
|
+
await page?.waitForSelector(sel);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
globalThis["screencastStop"] = async (path: string) => {
|
|
69
|
+
return recorders[path].stop();
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
globalThis["closePage"] = async (pageKey) => {
|
|
73
|
+
const page = (await this.browser.pages()).find(
|
|
74
|
+
(p) => p.mainFrame()._id === pageKey
|
|
75
|
+
);
|
|
76
|
+
return page.close();
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
// globalThis["closePage"] = (p) => {
|
|
80
|
+
// console.log("closePage", p);
|
|
81
|
+
// return p.close();
|
|
82
|
+
// };
|
|
83
|
+
|
|
84
|
+
globalThis["goto"] = async (pageKey: string, url: string) => {
|
|
85
|
+
const page = (await this.browser.pages()).find(
|
|
86
|
+
(p) => p.mainFrame()._id === pageKey
|
|
87
|
+
);
|
|
88
|
+
await page?.goto(url);
|
|
89
|
+
return;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
globalThis["newPage"] = () => {
|
|
93
|
+
return this.browser.newPage();
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
globalThis["pages"] = () => {
|
|
97
|
+
return this.browser.pages();
|
|
98
|
+
};
|
|
99
|
+
|
|
46
100
|
globalThis["mkdirSync"] = (fp: string) => {
|
|
47
101
|
if (!fs.existsSync(fp)) {
|
|
48
102
|
return fs.mkdirSync(fp, {
|
|
@@ -57,14 +111,19 @@ export class PM_Main extends PM {
|
|
|
57
111
|
contents: string,
|
|
58
112
|
testName: string
|
|
59
113
|
) => {
|
|
60
|
-
// console.log("
|
|
114
|
+
// console.log(testName, "writeFileSync", filepath, testName);
|
|
61
115
|
|
|
62
116
|
// Create directories if they don't exist
|
|
63
|
-
const dir = path.dirname(filepath
|
|
117
|
+
const dir = path.dirname(filepath);
|
|
118
|
+
|
|
119
|
+
// console.log(testName, "mkdirSync", dir);
|
|
64
120
|
|
|
65
121
|
fs.mkdirSync(dir, {
|
|
66
122
|
recursive: true,
|
|
67
123
|
});
|
|
124
|
+
|
|
125
|
+
// console.log(testName, "mkdirSync2");
|
|
126
|
+
|
|
68
127
|
if (!files[testName]) {
|
|
69
128
|
files[testName] = new Set();
|
|
70
129
|
}
|
|
@@ -94,10 +153,41 @@ export class PM_Main extends PM {
|
|
|
94
153
|
fileStreams3[uid].end();
|
|
95
154
|
};
|
|
96
155
|
|
|
156
|
+
// async (ssOpts: ScreenshotOptions, testName: string) => {
|
|
157
|
+
// const p = ssOpts.path as string;
|
|
158
|
+
// const dir = path.dirname(p);
|
|
159
|
+
// fs.mkdirSync(dir, {
|
|
160
|
+
// recursive: true,
|
|
161
|
+
// });
|
|
162
|
+
// if (!files[testName]) {
|
|
163
|
+
// files[testName] = new Set();
|
|
164
|
+
// }
|
|
165
|
+
// files[testName].add(ssOpts.path as string);
|
|
166
|
+
|
|
167
|
+
// const sPromise = page.screenshot({
|
|
168
|
+
// ...ssOpts,
|
|
169
|
+
// path: p,
|
|
170
|
+
// });
|
|
171
|
+
|
|
172
|
+
// if (!screenshots[testName]) {
|
|
173
|
+
// screenshots[testName] = [];
|
|
174
|
+
// }
|
|
175
|
+
// screenshots[testName].push(sPromise);
|
|
176
|
+
// // sPromise.then(())
|
|
177
|
+
// await sPromise;
|
|
178
|
+
// return sPromise;
|
|
179
|
+
// // page.evaluate(`window["screenshot done"]`);
|
|
180
|
+
// };
|
|
181
|
+
|
|
97
182
|
globalThis["customScreenShot"] = async (
|
|
98
183
|
opts: { path: string },
|
|
99
|
-
|
|
184
|
+
pageKey: string,
|
|
185
|
+
testName: string
|
|
100
186
|
) => {
|
|
187
|
+
const page = (await this.browser.pages()).find(
|
|
188
|
+
(p) => p.mainFrame()._id === pageKey
|
|
189
|
+
);
|
|
190
|
+
|
|
101
191
|
const p = opts.path as string;
|
|
102
192
|
const dir = path.dirname(p);
|
|
103
193
|
fs.mkdirSync(dir, {
|
|
@@ -122,17 +212,57 @@ export class PM_Main extends PM {
|
|
|
122
212
|
return sPromise;
|
|
123
213
|
};
|
|
124
214
|
|
|
125
|
-
globalThis["
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
p + "/manifest.json",
|
|
132
|
-
JSON.stringify(Array.from(files[testName]))
|
|
215
|
+
globalThis["screencast"] = async (
|
|
216
|
+
opts: ScreenshotOptions,
|
|
217
|
+
pageKey: string
|
|
218
|
+
) => {
|
|
219
|
+
const page = (await this.browser.pages()).find(
|
|
220
|
+
(p) => p.mainFrame()._id === pageKey
|
|
133
221
|
);
|
|
134
|
-
|
|
222
|
+
|
|
223
|
+
const p = opts.path as string;
|
|
224
|
+
const dir = path.dirname(p);
|
|
225
|
+
fs.mkdirSync(dir, {
|
|
226
|
+
recursive: true,
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
const recorder = await page?.screencast({
|
|
230
|
+
...opts,
|
|
231
|
+
path: p,
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
recorders[opts.path] = recorder;
|
|
235
|
+
|
|
236
|
+
return opts.path;
|
|
135
237
|
};
|
|
238
|
+
|
|
239
|
+
// globalThis["customclose"] = (p: string, testName: string) => {
|
|
240
|
+
// if (!files[testName]) {
|
|
241
|
+
// files[testName] = new Set();
|
|
242
|
+
// }
|
|
243
|
+
|
|
244
|
+
// fs.writeFileSync(
|
|
245
|
+
// p + "/manifest.json",
|
|
246
|
+
// JSON.stringify(Array.from(files[testName]))
|
|
247
|
+
// );
|
|
248
|
+
// delete files[testName];
|
|
249
|
+
// };
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
customclose() {
|
|
253
|
+
throw new Error("Method not implemented.");
|
|
254
|
+
}
|
|
255
|
+
waitForSelector(p: string, s: string): any {
|
|
256
|
+
throw new Error("Method not implemented.");
|
|
257
|
+
}
|
|
258
|
+
closePage(p): any {
|
|
259
|
+
throw new Error("Method not implemented.");
|
|
260
|
+
}
|
|
261
|
+
newPage(): CdpPage {
|
|
262
|
+
throw new Error("Method not implemented.");
|
|
263
|
+
}
|
|
264
|
+
goto(p, url: string): any {
|
|
265
|
+
throw new Error("Method not implemented.");
|
|
136
266
|
}
|
|
137
267
|
|
|
138
268
|
$(selector: string): boolean {
|
|
@@ -141,7 +271,7 @@ export class PM_Main extends PM {
|
|
|
141
271
|
screencast(opts: object) {
|
|
142
272
|
throw new Error("Method not implemented.");
|
|
143
273
|
}
|
|
144
|
-
customScreenShot(opts: object) {
|
|
274
|
+
customScreenShot(opts: object, cdpPage?: CdpPage) {
|
|
145
275
|
throw new Error("Method not implemented.");
|
|
146
276
|
}
|
|
147
277
|
|
|
@@ -245,9 +375,15 @@ export class PM_Main extends PM {
|
|
|
245
375
|
isDisabled(selector: string): boolean {
|
|
246
376
|
throw new Error("Method not implemented.");
|
|
247
377
|
}
|
|
378
|
+
screencastStop(s: string) {
|
|
379
|
+
throw new Error("Method not implemented.");
|
|
380
|
+
}
|
|
248
381
|
////////////////////////////////////////////////////////////////////////////////
|
|
249
382
|
|
|
250
|
-
async startPuppeteer(
|
|
383
|
+
async startPuppeteer(
|
|
384
|
+
options: LaunchOptions,
|
|
385
|
+
destfolder: string
|
|
386
|
+
): Promise<any> {
|
|
251
387
|
this.browser = (await puppeteer.launch(options)) as any;
|
|
252
388
|
}
|
|
253
389
|
|
|
@@ -283,7 +419,7 @@ export class PM_Main extends PM {
|
|
|
283
419
|
};
|
|
284
420
|
|
|
285
421
|
launchNode = async (src: string, dest: string) => {
|
|
286
|
-
console.log("
|
|
422
|
+
console.log("! node", src);
|
|
287
423
|
this.register(src);
|
|
288
424
|
|
|
289
425
|
const destFolder = dest.replace(".mjs", "");
|
|
@@ -338,27 +474,31 @@ export class PM_Main extends PM {
|
|
|
338
474
|
process.exit(-1);
|
|
339
475
|
}
|
|
340
476
|
|
|
341
|
-
const builtfile = dest
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
477
|
+
const builtfile = dest;
|
|
478
|
+
|
|
479
|
+
const webSideCares: Page[] = [];
|
|
480
|
+
|
|
481
|
+
// await Promise.all(
|
|
482
|
+
// testConfig[3].map(async (sidecar) => {
|
|
483
|
+
// if (sidecar[1] === "web") {
|
|
484
|
+
// const s = await this.launchWebSideCar(
|
|
485
|
+
// sidecar[0],
|
|
486
|
+
// destinationOfRuntime(sidecar[0], "web", this.configs),
|
|
487
|
+
// sidecar
|
|
488
|
+
// );
|
|
489
|
+
// webSideCares.push(s);
|
|
490
|
+
// return s;
|
|
491
|
+
// }
|
|
492
|
+
|
|
493
|
+
// if (sidecar[1] === "node") {
|
|
494
|
+
// return this.launchNodeSideCar(
|
|
495
|
+
// sidecar[0],
|
|
496
|
+
// destinationOfRuntime(sidecar[0], "node", this.configs),
|
|
497
|
+
// sidecar
|
|
498
|
+
// );
|
|
499
|
+
// }
|
|
500
|
+
// })
|
|
501
|
+
// );
|
|
362
502
|
|
|
363
503
|
this.server[builtfile] = await import(
|
|
364
504
|
`${builtfile}?cacheBust=${Date.now()}`
|
|
@@ -366,13 +506,16 @@ export class PM_Main extends PM {
|
|
|
366
506
|
return module.default.then((defaultModule) => {
|
|
367
507
|
defaultModule
|
|
368
508
|
.receiveTestResourceConfig(argz)
|
|
369
|
-
.then(async (features:
|
|
370
|
-
this.receiveFeatures(features, destFolder);
|
|
509
|
+
.then(async ({ features, failed }: IFinalResults) => {
|
|
510
|
+
this.receiveFeatures(features, destFolder, src);
|
|
511
|
+
// console.log(`${src} completed with ${failed} errors`);
|
|
512
|
+
statusMessagePretty(failed, src);
|
|
371
513
|
})
|
|
372
514
|
.catch((e) => {
|
|
373
|
-
console.log(
|
|
515
|
+
console.log(`${src} errored with`, e);
|
|
374
516
|
})
|
|
375
517
|
.finally(() => {
|
|
518
|
+
webSideCares.forEach((webSideCar) => webSideCar.close());
|
|
376
519
|
this.deregister(src);
|
|
377
520
|
});
|
|
378
521
|
});
|
|
@@ -390,23 +533,16 @@ export class PM_Main extends PM {
|
|
|
390
533
|
src: string,
|
|
391
534
|
dest: string,
|
|
392
535
|
testConfig: ITestTypes
|
|
393
|
-
) => {
|
|
536
|
+
): Promise<Page> => {
|
|
394
537
|
const d = dest + ".mjs";
|
|
395
538
|
console.log("launchWebSideCar", src, dest, d);
|
|
396
539
|
const destFolder = dest.replace(".mjs", "");
|
|
397
|
-
const webArgz = JSON.stringify({
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
});
|
|
403
|
-
|
|
404
|
-
// files[src] = new Set();
|
|
405
|
-
// const evaluation = `
|
|
406
|
-
// console.log("importing ${dest}.mjs");
|
|
407
|
-
// import('${dest}.mjs').then(async (x) => {
|
|
408
|
-
// console.log("imported", x.default);
|
|
409
|
-
// })`;
|
|
540
|
+
// const webArgz = JSON.stringify({
|
|
541
|
+
// name: dest,
|
|
542
|
+
// ports: [].toString(),
|
|
543
|
+
// fs: destFolder,
|
|
544
|
+
// browserWSEndpoint: this.browser.wsEndpoint(),
|
|
545
|
+
// });
|
|
410
546
|
|
|
411
547
|
const fileStreams2: fs.WriteStream[] = [];
|
|
412
548
|
const doneFileStream2: Promise<any>[] = [];
|
|
@@ -520,18 +656,18 @@ export class PM_Main extends PM {
|
|
|
520
656
|
return fileStreams2[uid].end();
|
|
521
657
|
});
|
|
522
658
|
|
|
523
|
-
page.exposeFunction("customclose", (p: string, testName: string) => {
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
});
|
|
659
|
+
// page.exposeFunction("customclose", (p: string, testName: string) => {
|
|
660
|
+
// fs.writeFileSync(
|
|
661
|
+
// p + "/manifest.json",
|
|
662
|
+
// JSON.stringify(Array.from(files[testName]))
|
|
663
|
+
// );
|
|
664
|
+
// delete files[testName];
|
|
665
|
+
|
|
666
|
+
// Promise.all(screenshots[testName] || []).then(() => {
|
|
667
|
+
// delete screenshots[testName];
|
|
668
|
+
// // page.close();
|
|
669
|
+
// });
|
|
670
|
+
// });
|
|
535
671
|
|
|
536
672
|
return page;
|
|
537
673
|
})
|
|
@@ -629,19 +765,19 @@ export class PM_Main extends PM {
|
|
|
629
765
|
}
|
|
630
766
|
};
|
|
631
767
|
|
|
632
|
-
launchWeb = (t: string, dest: string
|
|
633
|
-
console.log("
|
|
768
|
+
launchWeb = (t: string, dest: string) => {
|
|
769
|
+
console.log("! web", t);
|
|
634
770
|
this.register(t);
|
|
635
771
|
|
|
636
|
-
sidecars.map((sidecar) => {
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
});
|
|
772
|
+
// sidecars.map((sidecar) => {
|
|
773
|
+
// if (sidecar[1] === "node") {
|
|
774
|
+
// return this.launchNodeSideCar(
|
|
775
|
+
// sidecar[0],
|
|
776
|
+
// destinationOfRuntime(sidecar[0], "node", this.configs),
|
|
777
|
+
// sidecar
|
|
778
|
+
// );
|
|
779
|
+
// }
|
|
780
|
+
// });
|
|
645
781
|
|
|
646
782
|
const destFolder = dest.replace(".mjs", "");
|
|
647
783
|
|
|
@@ -652,9 +788,11 @@ export class PM_Main extends PM {
|
|
|
652
788
|
browserWSEndpoint: this.browser.wsEndpoint(),
|
|
653
789
|
});
|
|
654
790
|
|
|
791
|
+
const d = `${dest}?cacheBust=${Date.now()}`;
|
|
792
|
+
|
|
655
793
|
const evaluation = `
|
|
656
|
-
console.log("importing ${
|
|
657
|
-
import('${
|
|
794
|
+
console.log("importing ${d}");
|
|
795
|
+
import('${d}').then(async (x) => {
|
|
658
796
|
console.log("imported", (await x.default));
|
|
659
797
|
try {
|
|
660
798
|
return await (await x.default).receiveTestResourceConfig(${webArgz})
|
|
@@ -666,8 +804,8 @@ export class PM_Main extends PM {
|
|
|
666
804
|
const fileStreams2: fs.WriteStream[] = [];
|
|
667
805
|
const doneFileStream2: Promise<any>[] = [];
|
|
668
806
|
|
|
669
|
-
const stdoutStream = fs.createWriteStream(`${
|
|
670
|
-
const stderrStream = fs.createWriteStream(`${
|
|
807
|
+
const stdoutStream = fs.createWriteStream(`${destFolder}/stdout.log`);
|
|
808
|
+
const stderrStream = fs.createWriteStream(`${destFolder}/stderr.log`);
|
|
671
809
|
|
|
672
810
|
this.browser
|
|
673
811
|
.newPage()
|
|
@@ -737,23 +875,24 @@ export class PM_Main extends PM {
|
|
|
737
875
|
page.exposeFunction(
|
|
738
876
|
"writeFileSync",
|
|
739
877
|
(fp: string, contents: string, testName: string) => {
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
878
|
+
return globalThis["writeFileSync"](fp, contents, testName);
|
|
879
|
+
// const dir = path.dirname(fp);
|
|
880
|
+
|
|
881
|
+
// fs.mkdirSync(dir, {
|
|
882
|
+
// recursive: true,
|
|
883
|
+
// });
|
|
884
|
+
|
|
885
|
+
// const p = new Promise<string>(async (res, rej) => {
|
|
886
|
+
// fs.writeFileSync(fp, contents);
|
|
887
|
+
// res(fp);
|
|
888
|
+
// });
|
|
889
|
+
// doneFileStream2.push(p);
|
|
890
|
+
|
|
891
|
+
// if (!files[testName]) {
|
|
892
|
+
// files[testName] = new Set();
|
|
893
|
+
// }
|
|
894
|
+
// files[testName].add(fp);
|
|
895
|
+
// return p;
|
|
757
896
|
}
|
|
758
897
|
);
|
|
759
898
|
|
|
@@ -803,45 +942,44 @@ export class PM_Main extends PM {
|
|
|
803
942
|
return fileStreams2[uid].end();
|
|
804
943
|
});
|
|
805
944
|
|
|
806
|
-
page.exposeFunction("customclose", (p: string, testName: string) => {
|
|
807
|
-
|
|
945
|
+
// page.exposeFunction("customclose", (p: string, testName: string) => {
|
|
946
|
+
// // console.log("closing", p);
|
|
808
947
|
|
|
809
|
-
|
|
810
|
-
p + "/manifest.json",
|
|
811
|
-
JSON.stringify(Array.from(files[testName]))
|
|
812
|
-
);
|
|
813
|
-
delete files[testName];
|
|
814
|
-
|
|
815
|
-
// console.log("screenshots[testName]", screenshots[testName]);
|
|
816
|
-
Promise.all(screenshots[testName] || []).then(() => {
|
|
817
|
-
delete screenshots[testName];
|
|
818
|
-
// page.close();
|
|
819
|
-
// console.log("\t GOODBYE");
|
|
820
|
-
// whyIsNodeRunning();
|
|
821
|
-
});
|
|
948
|
+
// console.log("\t GOODBYE customclose");
|
|
822
949
|
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
950
|
+
// fs.writeFileSync(
|
|
951
|
+
// p + "/manifest.json",
|
|
952
|
+
// JSON.stringify(Array.from(files[testName]))
|
|
953
|
+
// );
|
|
954
|
+
// delete files[testName];
|
|
828
955
|
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
// });
|
|
834
|
-
|
|
835
|
-
// Promise.all(screenshots).then(() => {
|
|
836
|
-
// page.close();
|
|
837
|
-
// });
|
|
838
|
-
// setTimeout(() => {
|
|
839
|
-
// console.log("Delayed for 1 second.");
|
|
840
|
-
// page.close();
|
|
841
|
-
// }, 5000);
|
|
956
|
+
// // console.log("screenshots[testName]", screenshots[testName]);
|
|
957
|
+
// Promise.all(screenshots[testName] || []).then(() => {
|
|
958
|
+
// delete screenshots[testName];
|
|
959
|
+
// });
|
|
842
960
|
|
|
843
|
-
|
|
844
|
-
|
|
961
|
+
// // globalThis["writeFileSync"](
|
|
962
|
+
// // p + "/manifest.json",
|
|
963
|
+
// // // files.entries()
|
|
964
|
+
// // JSON.stringify(Array.from(files[testName]))
|
|
965
|
+
// // );
|
|
966
|
+
|
|
967
|
+
// // console.log("closing doneFileStream2", doneFileStream2);
|
|
968
|
+
// // console.log("closing doneFileStream2", doneFileStream2);
|
|
969
|
+
// // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
|
|
970
|
+
// // page.close();
|
|
971
|
+
// // });
|
|
972
|
+
|
|
973
|
+
// // Promise.all(screenshots).then(() => {
|
|
974
|
+
// // page.close();
|
|
975
|
+
// // });
|
|
976
|
+
// // setTimeout(() => {
|
|
977
|
+
// // console.log("Delayed for 1 second.");
|
|
978
|
+
// // page.close();
|
|
979
|
+
// // }, 5000);
|
|
980
|
+
|
|
981
|
+
// // return page.close();
|
|
982
|
+
// });
|
|
845
983
|
|
|
846
984
|
page.exposeFunction("page", () => {
|
|
847
985
|
return page.mainFrame()._id;
|
|
@@ -895,13 +1033,25 @@ export class PM_Main extends PM {
|
|
|
895
1033
|
})
|
|
896
1034
|
.then(async (page) => {
|
|
897
1035
|
const close = () => {
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
1036
|
+
if (!files[t]) {
|
|
1037
|
+
files[t] = new Set();
|
|
1038
|
+
}
|
|
1039
|
+
// files[t].add(filepath);
|
|
1040
|
+
|
|
1041
|
+
fs.writeFileSync(
|
|
1042
|
+
destFolder + "/manifest.json",
|
|
1043
|
+
JSON.stringify(Array.from(files[t]))
|
|
1044
|
+
);
|
|
1045
|
+
delete files[t];
|
|
901
1046
|
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
1047
|
+
Promise.all(screenshots[t] || []).then(() => {
|
|
1048
|
+
delete screenshots[t];
|
|
1049
|
+
page.close();
|
|
1050
|
+
|
|
1051
|
+
this.deregister(t);
|
|
1052
|
+
stderrStream.close();
|
|
1053
|
+
stdoutStream.close();
|
|
1054
|
+
});
|
|
905
1055
|
};
|
|
906
1056
|
|
|
907
1057
|
page.on("pageerror", (err: Error) => {
|
|
@@ -932,32 +1082,39 @@ export class PM_Main extends PM {
|
|
|
932
1082
|
stdoutStream.write(JSON.stringify(log.location()));
|
|
933
1083
|
stdoutStream.write(JSON.stringify(log.stackTrace()));
|
|
934
1084
|
});
|
|
935
|
-
await page.goto(`file://${`${
|
|
1085
|
+
await page.goto(`file://${`${destFolder}.html`}`, {});
|
|
936
1086
|
|
|
937
1087
|
await page
|
|
938
1088
|
.evaluate(evaluation)
|
|
939
|
-
.then(async (features:
|
|
940
|
-
this.receiveFeatures(features, destFolder);
|
|
1089
|
+
.then(async ({ failed, features }: IFinalResults) => {
|
|
1090
|
+
this.receiveFeatures(features, destFolder, t);
|
|
1091
|
+
// console.log(`${t} completed with ${failed} errors`);
|
|
1092
|
+
statusMessagePretty(failed, t);
|
|
941
1093
|
})
|
|
942
1094
|
.catch((e) => {
|
|
943
|
-
console.log(
|
|
944
|
-
console.log(e);
|
|
1095
|
+
console.log(`${t} errored with`, e);
|
|
945
1096
|
})
|
|
946
1097
|
.finally(() => {
|
|
947
1098
|
close();
|
|
948
|
-
// console.log("evaluation complete.", dest);
|
|
949
|
-
// page.close();
|
|
950
|
-
// this.deregister(t);
|
|
951
|
-
// stderrStream.close();
|
|
952
|
-
// stdoutStream.close();
|
|
953
1099
|
});
|
|
954
1100
|
|
|
955
1101
|
return page;
|
|
956
1102
|
});
|
|
957
1103
|
};
|
|
958
1104
|
|
|
959
|
-
receiveFeatures = (
|
|
960
|
-
|
|
1105
|
+
receiveFeatures = (
|
|
1106
|
+
features: string[],
|
|
1107
|
+
destFolder: string,
|
|
1108
|
+
srcTest: string
|
|
1109
|
+
) => {
|
|
1110
|
+
const featureDestination = path.resolve(
|
|
1111
|
+
process.cwd(),
|
|
1112
|
+
"docs",
|
|
1113
|
+
"features",
|
|
1114
|
+
"strings",
|
|
1115
|
+
srcTest.split(".").slice(0, -1).join(".") + ".features.txt"
|
|
1116
|
+
);
|
|
1117
|
+
|
|
961
1118
|
features
|
|
962
1119
|
.reduce(async (mm, featureStringKey) => {
|
|
963
1120
|
const accum = await mm;
|
|
@@ -991,29 +1148,38 @@ export class PM_Main extends PM {
|
|
|
991
1148
|
// console.log("Symlink created successfully");
|
|
992
1149
|
}
|
|
993
1150
|
});
|
|
994
|
-
accum.push(newPath);
|
|
1151
|
+
accum.files.push(newPath);
|
|
995
1152
|
} else if (u.protocol === "http:" || u.protocol === "https:") {
|
|
996
1153
|
const newPath = `${process.cwd()}/docs/features/external${
|
|
997
1154
|
u.hostname
|
|
998
1155
|
}${u.pathname}`;
|
|
999
1156
|
const body = await this.configs.featureIngestor(featureStringKey);
|
|
1000
1157
|
writeFileAndCreateDir(newPath, body);
|
|
1001
|
-
accum.push(newPath);
|
|
1158
|
+
accum.files.push(newPath);
|
|
1002
1159
|
}
|
|
1003
1160
|
} else {
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
)
|
|
1007
|
-
|
|
1008
|
-
|
|
1161
|
+
await fs.promises.mkdir(path.dirname(featureDestination), {
|
|
1162
|
+
recursive: true,
|
|
1163
|
+
});
|
|
1164
|
+
// const newPath = `${process.cwd()}/docs/features/plain/${await sha256(
|
|
1165
|
+
// featureStringKey
|
|
1166
|
+
// )}`;
|
|
1167
|
+
// writeFileAndCreateDir(
|
|
1168
|
+
// `${featureDestination}/${await sha256(featureStringKey)}`,
|
|
1169
|
+
// featureStringKey
|
|
1170
|
+
// );
|
|
1171
|
+
accum.strings.push(featureStringKey);
|
|
1009
1172
|
}
|
|
1010
1173
|
|
|
1011
1174
|
return accum;
|
|
1012
|
-
}, Promise.resolve([] as string[]))
|
|
1013
|
-
|
|
1175
|
+
}, Promise.resolve({ files: [] as string[], strings: [] as string[] }))
|
|
1176
|
+
|
|
1177
|
+
.then(({ files, strings }: { files: string[]; strings: string[] }) => {
|
|
1178
|
+
// writeFileAndCreateDir(`${featureDestination}`, JSON.stringify(strings));
|
|
1179
|
+
|
|
1014
1180
|
fs.writeFileSync(
|
|
1015
1181
|
`${destFolder}/featurePrompt.txt`,
|
|
1016
|
-
|
|
1182
|
+
files
|
|
1017
1183
|
.map((f) => {
|
|
1018
1184
|
return `/read ${f}`;
|
|
1019
1185
|
})
|
|
@@ -1028,7 +1194,7 @@ async function writeFileAndCreateDir(filePath, data) {
|
|
|
1028
1194
|
|
|
1029
1195
|
try {
|
|
1030
1196
|
await fs.promises.mkdir(dirPath, { recursive: true });
|
|
1031
|
-
await fs.
|
|
1197
|
+
await fs.appendFileSync(filePath, data);
|
|
1032
1198
|
} catch (error) {
|
|
1033
1199
|
console.error(`Error writing file: ${error}`);
|
|
1034
1200
|
}
|