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/dist/module/src/Node.js
CHANGED
|
@@ -3,14 +3,16 @@ import { defaultTestResourceRequirement, } from "./lib/index.js";
|
|
|
3
3
|
import { PM_Node } from "./PM/node.js";
|
|
4
4
|
export class NodeTesteranto extends Testeranto {
|
|
5
5
|
constructor(input, testSpecification, testImplementation, testResourceRequirement, testInterface) {
|
|
6
|
-
super(input, testSpecification, testImplementation, testResourceRequirement, testInterface)
|
|
6
|
+
super(input, testSpecification, testImplementation, testResourceRequirement, testInterface, () => {
|
|
7
|
+
// no-op
|
|
8
|
+
});
|
|
7
9
|
}
|
|
8
10
|
async receiveTestResourceConfig(partialTestResource) {
|
|
9
11
|
const t = JSON.parse(partialTestResource);
|
|
10
12
|
const pm = new PM_Node(t);
|
|
11
13
|
const { failed, artifacts, logPromise, features } = await this.testJobs[0].receiveTestResourceConfig(pm);
|
|
12
|
-
pm.customclose();
|
|
13
|
-
return features;
|
|
14
|
+
// pm.customclose();
|
|
15
|
+
return { features, failed };
|
|
14
16
|
}
|
|
15
17
|
}
|
|
16
18
|
export default async (input, testSpecification, testImplementation, testInterface, testResourceRequirement = defaultTestResourceRequirement) => {
|
|
@@ -3,11 +3,22 @@ import path from "path";
|
|
|
3
3
|
import puppeteer from "puppeteer-core";
|
|
4
4
|
import crypto from "crypto";
|
|
5
5
|
import { PM } from "./index.js";
|
|
6
|
-
import { destinationOfRuntime } from "../utils.js";
|
|
7
6
|
const fileStreams3 = [];
|
|
8
7
|
const fPaths = [];
|
|
9
8
|
const files = {};
|
|
9
|
+
const recorders = {};
|
|
10
10
|
const screenshots = {};
|
|
11
|
+
const red = "\x1b[31m";
|
|
12
|
+
const green = "\x1b[32m";
|
|
13
|
+
const reset = "\x1b[0m"; // Resets to default color
|
|
14
|
+
const statusMessagePretty = (failures, test) => {
|
|
15
|
+
if (failures === 0) {
|
|
16
|
+
console.log(green + `${test} completed successfully` + reset);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
console.log(red + `${test} failed ${failures} times` + reset);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
11
22
|
export class PM_Main extends PM {
|
|
12
23
|
constructor(configs) {
|
|
13
24
|
super();
|
|
@@ -33,7 +44,7 @@ export class PM_Main extends PM {
|
|
|
33
44
|
}
|
|
34
45
|
};
|
|
35
46
|
this.launchNode = async (src, dest) => {
|
|
36
|
-
console.log("
|
|
47
|
+
console.log("! node", src);
|
|
37
48
|
this.register(src);
|
|
38
49
|
const destFolder = dest.replace(".mjs", "");
|
|
39
50
|
let argz = "";
|
|
@@ -80,26 +91,42 @@ export class PM_Main extends PM {
|
|
|
80
91
|
console.error("negative port makes no sense", src);
|
|
81
92
|
process.exit(-1);
|
|
82
93
|
}
|
|
83
|
-
const builtfile = dest
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
94
|
+
const builtfile = dest;
|
|
95
|
+
const webSideCares = [];
|
|
96
|
+
// await Promise.all(
|
|
97
|
+
// testConfig[3].map(async (sidecar) => {
|
|
98
|
+
// if (sidecar[1] === "web") {
|
|
99
|
+
// const s = await this.launchWebSideCar(
|
|
100
|
+
// sidecar[0],
|
|
101
|
+
// destinationOfRuntime(sidecar[0], "web", this.configs),
|
|
102
|
+
// sidecar
|
|
103
|
+
// );
|
|
104
|
+
// webSideCares.push(s);
|
|
105
|
+
// return s;
|
|
106
|
+
// }
|
|
107
|
+
// if (sidecar[1] === "node") {
|
|
108
|
+
// return this.launchNodeSideCar(
|
|
109
|
+
// sidecar[0],
|
|
110
|
+
// destinationOfRuntime(sidecar[0], "node", this.configs),
|
|
111
|
+
// sidecar
|
|
112
|
+
// );
|
|
113
|
+
// }
|
|
114
|
+
// })
|
|
115
|
+
// );
|
|
92
116
|
this.server[builtfile] = await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
|
|
93
117
|
return module.default.then((defaultModule) => {
|
|
94
118
|
defaultModule
|
|
95
119
|
.receiveTestResourceConfig(argz)
|
|
96
|
-
.then(async (features) => {
|
|
97
|
-
this.receiveFeatures(features, destFolder);
|
|
120
|
+
.then(async ({ features, failed }) => {
|
|
121
|
+
this.receiveFeatures(features, destFolder, src);
|
|
122
|
+
// console.log(`${src} completed with ${failed} errors`);
|
|
123
|
+
statusMessagePretty(failed, src);
|
|
98
124
|
})
|
|
99
125
|
.catch((e) => {
|
|
100
|
-
console.log(
|
|
126
|
+
console.log(`${src} errored with`, e);
|
|
101
127
|
})
|
|
102
128
|
.finally(() => {
|
|
129
|
+
webSideCares.forEach((webSideCar) => webSideCar.close());
|
|
103
130
|
this.deregister(src);
|
|
104
131
|
});
|
|
105
132
|
});
|
|
@@ -115,18 +142,12 @@ export class PM_Main extends PM {
|
|
|
115
142
|
const d = dest + ".mjs";
|
|
116
143
|
console.log("launchWebSideCar", src, dest, d);
|
|
117
144
|
const destFolder = dest.replace(".mjs", "");
|
|
118
|
-
const webArgz = JSON.stringify({
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
});
|
|
124
|
-
// files[src] = new Set();
|
|
125
|
-
// const evaluation = `
|
|
126
|
-
// console.log("importing ${dest}.mjs");
|
|
127
|
-
// import('${dest}.mjs').then(async (x) => {
|
|
128
|
-
// console.log("imported", x.default);
|
|
129
|
-
// })`;
|
|
145
|
+
// const webArgz = JSON.stringify({
|
|
146
|
+
// name: dest,
|
|
147
|
+
// ports: [].toString(),
|
|
148
|
+
// fs: destFolder,
|
|
149
|
+
// browserWSEndpoint: this.browser.wsEndpoint(),
|
|
150
|
+
// });
|
|
130
151
|
const fileStreams2 = [];
|
|
131
152
|
const doneFileStream2 = [];
|
|
132
153
|
return new Promise((res, rej) => {
|
|
@@ -205,14 +226,17 @@ export class PM_Main extends PM {
|
|
|
205
226
|
page.exposeFunction("end", async (uid) => {
|
|
206
227
|
return fileStreams2[uid].end();
|
|
207
228
|
});
|
|
208
|
-
page.exposeFunction("customclose", (p, testName) => {
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
229
|
+
// page.exposeFunction("customclose", (p: string, testName: string) => {
|
|
230
|
+
// fs.writeFileSync(
|
|
231
|
+
// p + "/manifest.json",
|
|
232
|
+
// JSON.stringify(Array.from(files[testName]))
|
|
233
|
+
// );
|
|
234
|
+
// delete files[testName];
|
|
235
|
+
// Promise.all(screenshots[testName] || []).then(() => {
|
|
236
|
+
// delete screenshots[testName];
|
|
237
|
+
// // page.close();
|
|
238
|
+
// });
|
|
239
|
+
// });
|
|
216
240
|
return page;
|
|
217
241
|
})
|
|
218
242
|
.then(async (page) => {
|
|
@@ -292,14 +316,18 @@ export class PM_Main extends PM {
|
|
|
292
316
|
}
|
|
293
317
|
}
|
|
294
318
|
};
|
|
295
|
-
this.launchWeb = (t, dest
|
|
296
|
-
console.log("
|
|
319
|
+
this.launchWeb = (t, dest) => {
|
|
320
|
+
console.log("! web", t);
|
|
297
321
|
this.register(t);
|
|
298
|
-
sidecars.map((sidecar) => {
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
322
|
+
// sidecars.map((sidecar) => {
|
|
323
|
+
// if (sidecar[1] === "node") {
|
|
324
|
+
// return this.launchNodeSideCar(
|
|
325
|
+
// sidecar[0],
|
|
326
|
+
// destinationOfRuntime(sidecar[0], "node", this.configs),
|
|
327
|
+
// sidecar
|
|
328
|
+
// );
|
|
329
|
+
// }
|
|
330
|
+
// });
|
|
303
331
|
const destFolder = dest.replace(".mjs", "");
|
|
304
332
|
const webArgz = JSON.stringify({
|
|
305
333
|
name: dest,
|
|
@@ -307,9 +335,10 @@ export class PM_Main extends PM {
|
|
|
307
335
|
fs: destFolder,
|
|
308
336
|
browserWSEndpoint: this.browser.wsEndpoint(),
|
|
309
337
|
});
|
|
338
|
+
const d = `${dest}?cacheBust=${Date.now()}`;
|
|
310
339
|
const evaluation = `
|
|
311
|
-
console.log("importing ${
|
|
312
|
-
import('${
|
|
340
|
+
console.log("importing ${d}");
|
|
341
|
+
import('${d}').then(async (x) => {
|
|
313
342
|
console.log("imported", (await x.default));
|
|
314
343
|
try {
|
|
315
344
|
return await (await x.default).receiveTestResourceConfig(${webArgz})
|
|
@@ -319,8 +348,8 @@ export class PM_Main extends PM {
|
|
|
319
348
|
})`;
|
|
320
349
|
const fileStreams2 = [];
|
|
321
350
|
const doneFileStream2 = [];
|
|
322
|
-
const stdoutStream = fs.createWriteStream(`${
|
|
323
|
-
const stderrStream = fs.createWriteStream(`${
|
|
351
|
+
const stdoutStream = fs.createWriteStream(`${destFolder}/stdout.log`);
|
|
352
|
+
const stderrStream = fs.createWriteStream(`${destFolder}/stderr.log`);
|
|
324
353
|
this.browser
|
|
325
354
|
.newPage()
|
|
326
355
|
.then((page) => {
|
|
@@ -368,20 +397,21 @@ export class PM_Main extends PM {
|
|
|
368
397
|
// page.evaluate(`window["screenshot done"]`);
|
|
369
398
|
});
|
|
370
399
|
page.exposeFunction("writeFileSync", (fp, contents, testName) => {
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
400
|
+
return globalThis["writeFileSync"](fp, contents, testName);
|
|
401
|
+
// const dir = path.dirname(fp);
|
|
402
|
+
// fs.mkdirSync(dir, {
|
|
403
|
+
// recursive: true,
|
|
404
|
+
// });
|
|
405
|
+
// const p = new Promise<string>(async (res, rej) => {
|
|
406
|
+
// fs.writeFileSync(fp, contents);
|
|
407
|
+
// res(fp);
|
|
408
|
+
// });
|
|
409
|
+
// doneFileStream2.push(p);
|
|
410
|
+
// if (!files[testName]) {
|
|
411
|
+
// files[testName] = new Set();
|
|
412
|
+
// }
|
|
413
|
+
// files[testName].add(fp);
|
|
414
|
+
// return p;
|
|
385
415
|
});
|
|
386
416
|
page.exposeFunction("existsSync", (fp, contents) => {
|
|
387
417
|
return fs.existsSync(fp);
|
|
@@ -416,36 +446,37 @@ export class PM_Main extends PM {
|
|
|
416
446
|
page.exposeFunction("end", async (uid) => {
|
|
417
447
|
return fileStreams2[uid].end();
|
|
418
448
|
});
|
|
419
|
-
page.exposeFunction("customclose", (p, testName) => {
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
+
// page.exposeFunction("customclose", (p: string, testName: string) => {
|
|
450
|
+
// // console.log("closing", p);
|
|
451
|
+
// console.log("\t GOODBYE customclose");
|
|
452
|
+
// fs.writeFileSync(
|
|
453
|
+
// p + "/manifest.json",
|
|
454
|
+
// JSON.stringify(Array.from(files[testName]))
|
|
455
|
+
// );
|
|
456
|
+
// delete files[testName];
|
|
457
|
+
// // console.log("screenshots[testName]", screenshots[testName]);
|
|
458
|
+
// Promise.all(screenshots[testName] || []).then(() => {
|
|
459
|
+
// delete screenshots[testName];
|
|
460
|
+
// });
|
|
461
|
+
// // globalThis["writeFileSync"](
|
|
462
|
+
// // p + "/manifest.json",
|
|
463
|
+
// // // files.entries()
|
|
464
|
+
// // JSON.stringify(Array.from(files[testName]))
|
|
465
|
+
// // );
|
|
466
|
+
// // console.log("closing doneFileStream2", doneFileStream2);
|
|
467
|
+
// // console.log("closing doneFileStream2", doneFileStream2);
|
|
468
|
+
// // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
|
|
469
|
+
// // page.close();
|
|
470
|
+
// // });
|
|
471
|
+
// // Promise.all(screenshots).then(() => {
|
|
472
|
+
// // page.close();
|
|
473
|
+
// // });
|
|
474
|
+
// // setTimeout(() => {
|
|
475
|
+
// // console.log("Delayed for 1 second.");
|
|
476
|
+
// // page.close();
|
|
477
|
+
// // }, 5000);
|
|
478
|
+
// // return page.close();
|
|
479
|
+
// });
|
|
449
480
|
page.exposeFunction("page", () => {
|
|
450
481
|
return page.mainFrame()._id;
|
|
451
482
|
});
|
|
@@ -478,12 +509,19 @@ export class PM_Main extends PM {
|
|
|
478
509
|
})
|
|
479
510
|
.then(async (page) => {
|
|
480
511
|
const close = () => {
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
512
|
+
if (!files[t]) {
|
|
513
|
+
files[t] = new Set();
|
|
514
|
+
}
|
|
515
|
+
// files[t].add(filepath);
|
|
516
|
+
fs.writeFileSync(destFolder + "/manifest.json", JSON.stringify(Array.from(files[t])));
|
|
517
|
+
delete files[t];
|
|
518
|
+
Promise.all(screenshots[t] || []).then(() => {
|
|
519
|
+
delete screenshots[t];
|
|
520
|
+
page.close();
|
|
521
|
+
this.deregister(t);
|
|
522
|
+
stderrStream.close();
|
|
523
|
+
stdoutStream.close();
|
|
524
|
+
});
|
|
487
525
|
};
|
|
488
526
|
page.on("pageerror", (err) => {
|
|
489
527
|
console.debug(`Error from ${t}: [${err.name}] `);
|
|
@@ -510,29 +548,25 @@ export class PM_Main extends PM {
|
|
|
510
548
|
stdoutStream.write(JSON.stringify(log.location()));
|
|
511
549
|
stdoutStream.write(JSON.stringify(log.stackTrace()));
|
|
512
550
|
});
|
|
513
|
-
await page.goto(`file://${`${
|
|
551
|
+
await page.goto(`file://${`${destFolder}.html`}`, {});
|
|
514
552
|
await page
|
|
515
553
|
.evaluate(evaluation)
|
|
516
|
-
.then(async (features) => {
|
|
517
|
-
this.receiveFeatures(features, destFolder);
|
|
554
|
+
.then(async ({ failed, features }) => {
|
|
555
|
+
this.receiveFeatures(features, destFolder, t);
|
|
556
|
+
// console.log(`${t} completed with ${failed} errors`);
|
|
557
|
+
statusMessagePretty(failed, t);
|
|
518
558
|
})
|
|
519
559
|
.catch((e) => {
|
|
520
|
-
console.log(
|
|
521
|
-
console.log(e);
|
|
560
|
+
console.log(`${t} errored with`, e);
|
|
522
561
|
})
|
|
523
562
|
.finally(() => {
|
|
524
563
|
close();
|
|
525
|
-
// console.log("evaluation complete.", dest);
|
|
526
|
-
// page.close();
|
|
527
|
-
// this.deregister(t);
|
|
528
|
-
// stderrStream.close();
|
|
529
|
-
// stdoutStream.close();
|
|
530
564
|
});
|
|
531
565
|
return page;
|
|
532
566
|
});
|
|
533
567
|
};
|
|
534
|
-
this.receiveFeatures = (features, destFolder) => {
|
|
535
|
-
|
|
568
|
+
this.receiveFeatures = (features, destFolder, srcTest) => {
|
|
569
|
+
const featureDestination = path.resolve(process.cwd(), "docs", "features", "strings", srcTest.split(".").slice(0, -1).join(".") + ".features.txt");
|
|
536
570
|
features
|
|
537
571
|
.reduce(async (mm, featureStringKey) => {
|
|
538
572
|
const accum = await mm;
|
|
@@ -559,24 +593,33 @@ export class PM_Main extends PM {
|
|
|
559
593
|
// console.log("Symlink created successfully");
|
|
560
594
|
}
|
|
561
595
|
});
|
|
562
|
-
accum.push(newPath);
|
|
596
|
+
accum.files.push(newPath);
|
|
563
597
|
}
|
|
564
598
|
else if (u.protocol === "http:" || u.protocol === "https:") {
|
|
565
599
|
const newPath = `${process.cwd()}/docs/features/external${u.hostname}${u.pathname}`;
|
|
566
600
|
const body = await this.configs.featureIngestor(featureStringKey);
|
|
567
601
|
writeFileAndCreateDir(newPath, body);
|
|
568
|
-
accum.push(newPath);
|
|
602
|
+
accum.files.push(newPath);
|
|
569
603
|
}
|
|
570
604
|
}
|
|
571
605
|
else {
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
606
|
+
await fs.promises.mkdir(path.dirname(featureDestination), {
|
|
607
|
+
recursive: true,
|
|
608
|
+
});
|
|
609
|
+
// const newPath = `${process.cwd()}/docs/features/plain/${await sha256(
|
|
610
|
+
// featureStringKey
|
|
611
|
+
// )}`;
|
|
612
|
+
// writeFileAndCreateDir(
|
|
613
|
+
// `${featureDestination}/${await sha256(featureStringKey)}`,
|
|
614
|
+
// featureStringKey
|
|
615
|
+
// );
|
|
616
|
+
accum.strings.push(featureStringKey);
|
|
575
617
|
}
|
|
576
618
|
return accum;
|
|
577
|
-
}, Promise.resolve([]))
|
|
578
|
-
.then((
|
|
579
|
-
|
|
619
|
+
}, Promise.resolve({ files: [], strings: [] }))
|
|
620
|
+
.then(({ files, strings }) => {
|
|
621
|
+
// writeFileAndCreateDir(`${featureDestination}`, JSON.stringify(strings));
|
|
622
|
+
fs.writeFileSync(`${destFolder}/featurePrompt.txt`, files
|
|
580
623
|
.map((f) => {
|
|
581
624
|
return `/read ${f}`;
|
|
582
625
|
})
|
|
@@ -590,6 +633,33 @@ export class PM_Main extends PM {
|
|
|
590
633
|
this.configs.ports.forEach((element) => {
|
|
591
634
|
this.ports[element] = "true"; // set ports as open
|
|
592
635
|
});
|
|
636
|
+
globalThis["waitForSelector"] = async (pageKey, sel) => {
|
|
637
|
+
console.log("waitForSelector", pageKey, sel);
|
|
638
|
+
const page = (await this.browser.pages()).find((p) => p.mainFrame()._id === pageKey);
|
|
639
|
+
await (page === null || page === void 0 ? void 0 : page.waitForSelector(sel));
|
|
640
|
+
};
|
|
641
|
+
globalThis["screencastStop"] = async (path) => {
|
|
642
|
+
return recorders[path].stop();
|
|
643
|
+
};
|
|
644
|
+
globalThis["closePage"] = async (pageKey) => {
|
|
645
|
+
const page = (await this.browser.pages()).find((p) => p.mainFrame()._id === pageKey);
|
|
646
|
+
return page.close();
|
|
647
|
+
};
|
|
648
|
+
// globalThis["closePage"] = (p) => {
|
|
649
|
+
// console.log("closePage", p);
|
|
650
|
+
// return p.close();
|
|
651
|
+
// };
|
|
652
|
+
globalThis["goto"] = async (pageKey, url) => {
|
|
653
|
+
const page = (await this.browser.pages()).find((p) => p.mainFrame()._id === pageKey);
|
|
654
|
+
await (page === null || page === void 0 ? void 0 : page.goto(url));
|
|
655
|
+
return;
|
|
656
|
+
};
|
|
657
|
+
globalThis["newPage"] = () => {
|
|
658
|
+
return this.browser.newPage();
|
|
659
|
+
};
|
|
660
|
+
globalThis["pages"] = () => {
|
|
661
|
+
return this.browser.pages();
|
|
662
|
+
};
|
|
593
663
|
globalThis["mkdirSync"] = (fp) => {
|
|
594
664
|
if (!fs.existsSync(fp)) {
|
|
595
665
|
return fs.mkdirSync(fp, {
|
|
@@ -599,12 +669,14 @@ export class PM_Main extends PM {
|
|
|
599
669
|
return false;
|
|
600
670
|
};
|
|
601
671
|
globalThis["writeFileSync"] = (filepath, contents, testName) => {
|
|
602
|
-
// console.log("
|
|
672
|
+
// console.log(testName, "writeFileSync", filepath, testName);
|
|
603
673
|
// Create directories if they don't exist
|
|
604
|
-
const dir = path.dirname(filepath
|
|
674
|
+
const dir = path.dirname(filepath);
|
|
675
|
+
// console.log(testName, "mkdirSync", dir);
|
|
605
676
|
fs.mkdirSync(dir, {
|
|
606
677
|
recursive: true,
|
|
607
678
|
});
|
|
679
|
+
// console.log(testName, "mkdirSync2");
|
|
608
680
|
if (!files[testName]) {
|
|
609
681
|
files[testName] = new Set();
|
|
610
682
|
}
|
|
@@ -627,7 +699,31 @@ export class PM_Main extends PM {
|
|
|
627
699
|
globalThis["end"] = (uid) => {
|
|
628
700
|
fileStreams3[uid].end();
|
|
629
701
|
};
|
|
630
|
-
|
|
702
|
+
// async (ssOpts: ScreenshotOptions, testName: string) => {
|
|
703
|
+
// const p = ssOpts.path as string;
|
|
704
|
+
// const dir = path.dirname(p);
|
|
705
|
+
// fs.mkdirSync(dir, {
|
|
706
|
+
// recursive: true,
|
|
707
|
+
// });
|
|
708
|
+
// if (!files[testName]) {
|
|
709
|
+
// files[testName] = new Set();
|
|
710
|
+
// }
|
|
711
|
+
// files[testName].add(ssOpts.path as string);
|
|
712
|
+
// const sPromise = page.screenshot({
|
|
713
|
+
// ...ssOpts,
|
|
714
|
+
// path: p,
|
|
715
|
+
// });
|
|
716
|
+
// if (!screenshots[testName]) {
|
|
717
|
+
// screenshots[testName] = [];
|
|
718
|
+
// }
|
|
719
|
+
// screenshots[testName].push(sPromise);
|
|
720
|
+
// // sPromise.then(())
|
|
721
|
+
// await sPromise;
|
|
722
|
+
// return sPromise;
|
|
723
|
+
// // page.evaluate(`window["screenshot done"]`);
|
|
724
|
+
// };
|
|
725
|
+
globalThis["customScreenShot"] = async (opts, pageKey, testName) => {
|
|
726
|
+
const page = (await this.browser.pages()).find((p) => p.mainFrame()._id === pageKey);
|
|
631
727
|
const p = opts.path;
|
|
632
728
|
const dir = path.dirname(p);
|
|
633
729
|
fs.mkdirSync(dir, {
|
|
@@ -645,13 +741,42 @@ export class PM_Main extends PM {
|
|
|
645
741
|
await sPromise;
|
|
646
742
|
return sPromise;
|
|
647
743
|
};
|
|
648
|
-
globalThis["
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
fs.
|
|
653
|
-
|
|
744
|
+
globalThis["screencast"] = async (opts, pageKey) => {
|
|
745
|
+
const page = (await this.browser.pages()).find((p) => p.mainFrame()._id === pageKey);
|
|
746
|
+
const p = opts.path;
|
|
747
|
+
const dir = path.dirname(p);
|
|
748
|
+
fs.mkdirSync(dir, {
|
|
749
|
+
recursive: true,
|
|
750
|
+
});
|
|
751
|
+
const recorder = await (page === null || page === void 0 ? void 0 : page.screencast(Object.assign(Object.assign({}, opts), { path: p })));
|
|
752
|
+
recorders[opts.path] = recorder;
|
|
753
|
+
return opts.path;
|
|
654
754
|
};
|
|
755
|
+
// globalThis["customclose"] = (p: string, testName: string) => {
|
|
756
|
+
// if (!files[testName]) {
|
|
757
|
+
// files[testName] = new Set();
|
|
758
|
+
// }
|
|
759
|
+
// fs.writeFileSync(
|
|
760
|
+
// p + "/manifest.json",
|
|
761
|
+
// JSON.stringify(Array.from(files[testName]))
|
|
762
|
+
// );
|
|
763
|
+
// delete files[testName];
|
|
764
|
+
// };
|
|
765
|
+
}
|
|
766
|
+
customclose() {
|
|
767
|
+
throw new Error("Method not implemented.");
|
|
768
|
+
}
|
|
769
|
+
waitForSelector(p, s) {
|
|
770
|
+
throw new Error("Method not implemented.");
|
|
771
|
+
}
|
|
772
|
+
closePage(p) {
|
|
773
|
+
throw new Error("Method not implemented.");
|
|
774
|
+
}
|
|
775
|
+
newPage() {
|
|
776
|
+
throw new Error("Method not implemented.");
|
|
777
|
+
}
|
|
778
|
+
goto(p, url) {
|
|
779
|
+
throw new Error("Method not implemented.");
|
|
655
780
|
}
|
|
656
781
|
$(selector) {
|
|
657
782
|
throw new Error("Method not implemented.");
|
|
@@ -659,7 +784,7 @@ export class PM_Main extends PM {
|
|
|
659
784
|
screencast(opts) {
|
|
660
785
|
throw new Error("Method not implemented.");
|
|
661
786
|
}
|
|
662
|
-
customScreenShot(opts) {
|
|
787
|
+
customScreenShot(opts, cdpPage) {
|
|
663
788
|
throw new Error("Method not implemented.");
|
|
664
789
|
}
|
|
665
790
|
end(accessObject) {
|
|
@@ -744,6 +869,9 @@ export class PM_Main extends PM {
|
|
|
744
869
|
isDisabled(selector) {
|
|
745
870
|
throw new Error("Method not implemented.");
|
|
746
871
|
}
|
|
872
|
+
screencastStop(s) {
|
|
873
|
+
throw new Error("Method not implemented.");
|
|
874
|
+
}
|
|
747
875
|
////////////////////////////////////////////////////////////////////////////////
|
|
748
876
|
async startPuppeteer(options, destfolder) {
|
|
749
877
|
this.browser = (await puppeteer.launch(options));
|
|
@@ -759,7 +887,7 @@ async function writeFileAndCreateDir(filePath, data) {
|
|
|
759
887
|
const dirPath = path.dirname(filePath);
|
|
760
888
|
try {
|
|
761
889
|
await fs.promises.mkdir(dirPath, { recursive: true });
|
|
762
|
-
await fs.
|
|
890
|
+
await fs.appendFileSync(filePath, data);
|
|
763
891
|
}
|
|
764
892
|
catch (error) {
|
|
765
893
|
console.error(`Error writing file: ${error}`);
|
|
@@ -8,10 +8,19 @@ export class PM_Node extends PM {
|
|
|
8
8
|
this.server = {};
|
|
9
9
|
this.testResourceConfiguration = t;
|
|
10
10
|
}
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
waitForSelector(p, s) {
|
|
12
|
+
return globalThis["waitForSelector"](p, s);
|
|
13
|
+
}
|
|
14
|
+
closePage(p) {
|
|
15
|
+
return globalThis["closePage"](p);
|
|
16
|
+
}
|
|
17
|
+
goto(cdpPage, url) {
|
|
18
|
+
return globalThis["goto"](cdpPage.mainFrame()._id, url);
|
|
13
19
|
}
|
|
14
|
-
|
|
20
|
+
newPage() {
|
|
21
|
+
return globalThis["newPage"]();
|
|
22
|
+
}
|
|
23
|
+
$(selector) {
|
|
15
24
|
throw new Error("Method not implemented.");
|
|
16
25
|
}
|
|
17
26
|
isDisabled(selector) {
|
|
@@ -35,8 +44,14 @@ export class PM_Node extends PM {
|
|
|
35
44
|
click(selector) {
|
|
36
45
|
return globalThis["click"](selector);
|
|
37
46
|
}
|
|
38
|
-
|
|
39
|
-
return globalThis["
|
|
47
|
+
screencast(opts, page) {
|
|
48
|
+
return globalThis["screencast"](Object.assign(Object.assign({}, opts), { path: this.testResourceConfiguration.fs + "/" + opts.path }), page.mainFrame()._id, this.testResourceConfiguration.name);
|
|
49
|
+
}
|
|
50
|
+
screencastStop(p) {
|
|
51
|
+
return globalThis["screencastStop"](p);
|
|
52
|
+
}
|
|
53
|
+
customScreenShot(opts, cdpPage) {
|
|
54
|
+
return globalThis["customScreenShot"](Object.assign(Object.assign({}, opts), { path: this.testResourceConfiguration.fs + "/" + opts.path }), cdpPage.mainFrame()._id, this.testResourceConfiguration.name);
|
|
40
55
|
}
|
|
41
56
|
existsSync(destFolder) {
|
|
42
57
|
return globalThis["existsSync"](this.testResourceConfiguration.fs + "/" + destFolder);
|
|
@@ -5,11 +5,26 @@ export class PM_Web extends PM {
|
|
|
5
5
|
this.server = {};
|
|
6
6
|
this.testResourceConfiguration = t;
|
|
7
7
|
}
|
|
8
|
-
|
|
9
|
-
return window["
|
|
8
|
+
waitForSelector(p, s) {
|
|
9
|
+
return window["waitForSelector"](p, s);
|
|
10
10
|
}
|
|
11
11
|
screencast(opts) {
|
|
12
|
-
|
|
12
|
+
return window["screencast"](Object.assign(Object.assign({}, opts), { path: this.testResourceConfiguration.fs + "/" + opts.path }), this.testResourceConfiguration.name);
|
|
13
|
+
}
|
|
14
|
+
screencastStop(recorder) {
|
|
15
|
+
return window["screencastStop"](recorder);
|
|
16
|
+
}
|
|
17
|
+
closePage(p) {
|
|
18
|
+
return window["closePage"](p);
|
|
19
|
+
}
|
|
20
|
+
goto(p, url) {
|
|
21
|
+
return window["goto"](p, url);
|
|
22
|
+
}
|
|
23
|
+
newPage() {
|
|
24
|
+
return window["newPage"]();
|
|
25
|
+
}
|
|
26
|
+
$(selector) {
|
|
27
|
+
return window["$"](selector);
|
|
13
28
|
}
|
|
14
29
|
isDisabled(selector) {
|
|
15
30
|
return window["isDisabled"](selector);
|
|
@@ -38,7 +53,7 @@ export class PM_Web extends PM {
|
|
|
38
53
|
existsSync(destFolder) {
|
|
39
54
|
return window["existsSync"](destFolder);
|
|
40
55
|
}
|
|
41
|
-
mkdirSync() {
|
|
56
|
+
mkdirSync(x) {
|
|
42
57
|
return window["mkdirSync"](this.testResourceConfiguration.fs + "/");
|
|
43
58
|
}
|
|
44
59
|
write(writeObject, contents) {
|