testeranto 0.90.0 → 0.94.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/dist/common/src/Node.js +5 -3
- package/dist/common/src/PM/main.js +102 -92
- package/dist/common/src/Project.js +5 -3
- package/dist/common/src/Puppeteer.js +1 -3
- 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 +7 -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/esbuildConfigs/inputFilesPlugin.js +0 -2
- package/dist/common/src/lib/abstractBase.js +29 -184
- 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/tsconfig.common.tsbuildinfo +1 -1
- package/dist/module/src/Node.js +5 -3
- package/dist/module/src/PM/main.js +102 -92
- package/dist/module/src/Project.js +5 -3
- package/dist/module/src/Puppeteer.js +1 -3
- 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 +7 -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/esbuildConfigs/inputFilesPlugin.js +0 -2
- package/dist/module/src/lib/abstractBase.js +29 -184
- 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/tsconfig.module.tsbuildinfo +1 -1
- package/dist/prebuild/build-tests.mjs +4 -3
- package/dist/prebuild/run-tests.mjs +30 -66
- package/dist/types/src/Node.d.ts +4 -1
- package/dist/types/src/PM/main.d.ts +2 -1
- package/dist/types/src/SubPackages/react/jsx/node.d.ts +1 -1
- package/dist/types/src/SubPackages/react-test-renderer/component/interface.d.ts +1 -1
- package/dist/types/src/Web.d.ts +2 -2
- 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/types.d.ts +5 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/package.json +13 -13
- package/src/Node.ts +6 -3
- package/src/PM/main.ts +121 -111
- package/src/Project.ts +6 -5
- package/src/Puppeteer.ts +1 -3
- package/src/SubPackages/puppeteer.ts +1 -1
- package/src/SubPackages/react/jsx/index.ts +15 -7
- package/src/SubPackages/react/jsx/node.ts +6 -5
- package/src/SubPackages/react-dom/component/web.ts +28 -51
- package/src/SubPackages/react-test-renderer/component/interface.ts +4 -11
- package/src/Web.ts +45 -23
- package/src/esbuildConfigs/inputFilesPlugin.ts +0 -3
- package/src/lib/abstractBase.ts +38 -188
- 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 +3 -1
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) => {
|
|
@@ -81,9 +81,12 @@ export class PM_Main extends PM {
|
|
|
81
81
|
process.exit(-1);
|
|
82
82
|
}
|
|
83
83
|
const builtfile = dest + ".mjs";
|
|
84
|
-
|
|
84
|
+
const webSideCares = [];
|
|
85
|
+
await Promise.all(testConfig[3].map(async (sidecar) => {
|
|
85
86
|
if (sidecar[1] === "web") {
|
|
86
|
-
|
|
87
|
+
const s = await this.launchWebSideCar(sidecar[0], destinationOfRuntime(sidecar[0], "web", this.configs), sidecar);
|
|
88
|
+
webSideCares.push(s);
|
|
89
|
+
return s;
|
|
87
90
|
}
|
|
88
91
|
if (sidecar[1] === "node") {
|
|
89
92
|
return this.launchNodeSideCar(sidecar[0], destinationOfRuntime(sidecar[0], "node", this.configs), sidecar);
|
|
@@ -93,13 +96,15 @@ export class PM_Main extends PM {
|
|
|
93
96
|
return module.default.then((defaultModule) => {
|
|
94
97
|
defaultModule
|
|
95
98
|
.receiveTestResourceConfig(argz)
|
|
96
|
-
.then(async (features) => {
|
|
99
|
+
.then(async ({ features, failed }) => {
|
|
97
100
|
this.receiveFeatures(features, destFolder);
|
|
101
|
+
console.log(`${src} completed with ${failed} errors`);
|
|
98
102
|
})
|
|
99
103
|
.catch((e) => {
|
|
100
|
-
console.log(
|
|
104
|
+
console.log(`${src} errored with`, e);
|
|
101
105
|
})
|
|
102
106
|
.finally(() => {
|
|
107
|
+
webSideCares.forEach((webSideCar) => webSideCar.close());
|
|
103
108
|
this.deregister(src);
|
|
104
109
|
});
|
|
105
110
|
});
|
|
@@ -115,18 +120,12 @@ export class PM_Main extends PM {
|
|
|
115
120
|
const d = dest + ".mjs";
|
|
116
121
|
console.log("launchWebSideCar", src, dest, d);
|
|
117
122
|
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
|
-
// })`;
|
|
123
|
+
// const webArgz = JSON.stringify({
|
|
124
|
+
// name: dest,
|
|
125
|
+
// ports: [].toString(),
|
|
126
|
+
// fs: destFolder,
|
|
127
|
+
// browserWSEndpoint: this.browser.wsEndpoint(),
|
|
128
|
+
// });
|
|
130
129
|
const fileStreams2 = [];
|
|
131
130
|
const doneFileStream2 = [];
|
|
132
131
|
return new Promise((res, rej) => {
|
|
@@ -205,14 +204,17 @@ export class PM_Main extends PM {
|
|
|
205
204
|
page.exposeFunction("end", async (uid) => {
|
|
206
205
|
return fileStreams2[uid].end();
|
|
207
206
|
});
|
|
208
|
-
page.exposeFunction("customclose", (p, testName) => {
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
207
|
+
// page.exposeFunction("customclose", (p: string, testName: string) => {
|
|
208
|
+
// fs.writeFileSync(
|
|
209
|
+
// p + "/manifest.json",
|
|
210
|
+
// JSON.stringify(Array.from(files[testName]))
|
|
211
|
+
// );
|
|
212
|
+
// delete files[testName];
|
|
213
|
+
// Promise.all(screenshots[testName] || []).then(() => {
|
|
214
|
+
// delete screenshots[testName];
|
|
215
|
+
// // page.close();
|
|
216
|
+
// });
|
|
217
|
+
// });
|
|
216
218
|
return page;
|
|
217
219
|
})
|
|
218
220
|
.then(async (page) => {
|
|
@@ -368,20 +370,21 @@ export class PM_Main extends PM {
|
|
|
368
370
|
// page.evaluate(`window["screenshot done"]`);
|
|
369
371
|
});
|
|
370
372
|
page.exposeFunction("writeFileSync", (fp, contents, testName) => {
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
373
|
+
return globalThis["writeFileSync"](fp, contents, testName);
|
|
374
|
+
// const dir = path.dirname(fp);
|
|
375
|
+
// fs.mkdirSync(dir, {
|
|
376
|
+
// recursive: true,
|
|
377
|
+
// });
|
|
378
|
+
// const p = new Promise<string>(async (res, rej) => {
|
|
379
|
+
// fs.writeFileSync(fp, contents);
|
|
380
|
+
// res(fp);
|
|
381
|
+
// });
|
|
382
|
+
// doneFileStream2.push(p);
|
|
383
|
+
// if (!files[testName]) {
|
|
384
|
+
// files[testName] = new Set();
|
|
385
|
+
// }
|
|
386
|
+
// files[testName].add(fp);
|
|
387
|
+
// return p;
|
|
385
388
|
});
|
|
386
389
|
page.exposeFunction("existsSync", (fp, contents) => {
|
|
387
390
|
return fs.existsSync(fp);
|
|
@@ -416,36 +419,37 @@ export class PM_Main extends PM {
|
|
|
416
419
|
page.exposeFunction("end", async (uid) => {
|
|
417
420
|
return fileStreams2[uid].end();
|
|
418
421
|
});
|
|
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
|
-
|
|
422
|
+
// page.exposeFunction("customclose", (p: string, testName: string) => {
|
|
423
|
+
// // console.log("closing", p);
|
|
424
|
+
// console.log("\t GOODBYE customclose");
|
|
425
|
+
// fs.writeFileSync(
|
|
426
|
+
// p + "/manifest.json",
|
|
427
|
+
// JSON.stringify(Array.from(files[testName]))
|
|
428
|
+
// );
|
|
429
|
+
// delete files[testName];
|
|
430
|
+
// // console.log("screenshots[testName]", screenshots[testName]);
|
|
431
|
+
// Promise.all(screenshots[testName] || []).then(() => {
|
|
432
|
+
// delete screenshots[testName];
|
|
433
|
+
// });
|
|
434
|
+
// // globalThis["writeFileSync"](
|
|
435
|
+
// // p + "/manifest.json",
|
|
436
|
+
// // // files.entries()
|
|
437
|
+
// // JSON.stringify(Array.from(files[testName]))
|
|
438
|
+
// // );
|
|
439
|
+
// // console.log("closing doneFileStream2", doneFileStream2);
|
|
440
|
+
// // console.log("closing doneFileStream2", doneFileStream2);
|
|
441
|
+
// // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
|
|
442
|
+
// // page.close();
|
|
443
|
+
// // });
|
|
444
|
+
// // Promise.all(screenshots).then(() => {
|
|
445
|
+
// // page.close();
|
|
446
|
+
// // });
|
|
447
|
+
// // setTimeout(() => {
|
|
448
|
+
// // console.log("Delayed for 1 second.");
|
|
449
|
+
// // page.close();
|
|
450
|
+
// // }, 5000);
|
|
451
|
+
// // return page.close();
|
|
452
|
+
// });
|
|
449
453
|
page.exposeFunction("page", () => {
|
|
450
454
|
return page.mainFrame()._id;
|
|
451
455
|
});
|
|
@@ -478,12 +482,19 @@ export class PM_Main extends PM {
|
|
|
478
482
|
})
|
|
479
483
|
.then(async (page) => {
|
|
480
484
|
const close = () => {
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
485
|
+
if (!files[t]) {
|
|
486
|
+
files[t] = new Set();
|
|
487
|
+
}
|
|
488
|
+
// files[t].add(filepath);
|
|
489
|
+
fs.writeFileSync(dest + "/manifest.json", JSON.stringify(Array.from(files[t])));
|
|
490
|
+
delete files[t];
|
|
491
|
+
Promise.all(screenshots[t] || []).then(() => {
|
|
492
|
+
delete screenshots[t];
|
|
493
|
+
page.close();
|
|
494
|
+
this.deregister(t);
|
|
495
|
+
stderrStream.close();
|
|
496
|
+
stdoutStream.close();
|
|
497
|
+
});
|
|
487
498
|
};
|
|
488
499
|
page.on("pageerror", (err) => {
|
|
489
500
|
console.debug(`Error from ${t}: [${err.name}] `);
|
|
@@ -513,26 +524,20 @@ export class PM_Main extends PM {
|
|
|
513
524
|
await page.goto(`file://${`${dest}.html`}`, {});
|
|
514
525
|
await page
|
|
515
526
|
.evaluate(evaluation)
|
|
516
|
-
.then(async (features) => {
|
|
527
|
+
.then(async ({ failed, features }) => {
|
|
517
528
|
this.receiveFeatures(features, destFolder);
|
|
529
|
+
console.log(`${t} completed with ${failed} errors`);
|
|
518
530
|
})
|
|
519
531
|
.catch((e) => {
|
|
520
|
-
console.log(
|
|
521
|
-
console.log(e);
|
|
532
|
+
console.log(`${t} errored with`, e);
|
|
522
533
|
})
|
|
523
534
|
.finally(() => {
|
|
524
535
|
close();
|
|
525
|
-
// console.log("evaluation complete.", dest);
|
|
526
|
-
// page.close();
|
|
527
|
-
// this.deregister(t);
|
|
528
|
-
// stderrStream.close();
|
|
529
|
-
// stdoutStream.close();
|
|
530
536
|
});
|
|
531
537
|
return page;
|
|
532
538
|
});
|
|
533
539
|
};
|
|
534
540
|
this.receiveFeatures = (features, destFolder) => {
|
|
535
|
-
console.log("this.receiveFeatures", features);
|
|
536
541
|
features
|
|
537
542
|
.reduce(async (mm, featureStringKey) => {
|
|
538
543
|
const accum = await mm;
|
|
@@ -599,12 +604,14 @@ export class PM_Main extends PM {
|
|
|
599
604
|
return false;
|
|
600
605
|
};
|
|
601
606
|
globalThis["writeFileSync"] = (filepath, contents, testName) => {
|
|
602
|
-
// console.log("
|
|
607
|
+
// console.log(testName, "writeFileSync", filepath, testName);
|
|
603
608
|
// Create directories if they don't exist
|
|
604
|
-
const dir = path.dirname(filepath
|
|
609
|
+
const dir = path.dirname(filepath);
|
|
610
|
+
// console.log(testName, "mkdirSync", dir);
|
|
605
611
|
fs.mkdirSync(dir, {
|
|
606
612
|
recursive: true,
|
|
607
613
|
});
|
|
614
|
+
// console.log(testName, "mkdirSync2");
|
|
608
615
|
if (!files[testName]) {
|
|
609
616
|
files[testName] = new Set();
|
|
610
617
|
}
|
|
@@ -645,13 +652,16 @@ export class PM_Main extends PM {
|
|
|
645
652
|
await sPromise;
|
|
646
653
|
return sPromise;
|
|
647
654
|
};
|
|
648
|
-
globalThis["customclose"] = (p, testName) => {
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
+
// globalThis["customclose"] = (p: string, testName: string) => {
|
|
656
|
+
// if (!files[testName]) {
|
|
657
|
+
// files[testName] = new Set();
|
|
658
|
+
// }
|
|
659
|
+
// fs.writeFileSync(
|
|
660
|
+
// p + "/manifest.json",
|
|
661
|
+
// JSON.stringify(Array.from(files[testName]))
|
|
662
|
+
// );
|
|
663
|
+
// delete files[testName];
|
|
664
|
+
// };
|
|
655
665
|
}
|
|
656
666
|
$(selector) {
|
|
657
667
|
throw new Error("Method not implemented.");
|
|
@@ -69,15 +69,17 @@ const compile = () => {
|
|
|
69
69
|
return new Promise((resolve, reject) => {
|
|
70
70
|
const tsc = spawn("tsc", ["-noEmit"]);
|
|
71
71
|
tsc.stdout.on("data", (data) => {
|
|
72
|
-
// console.log(`stdout: ${data}`);
|
|
72
|
+
// console.log(`tsc stdout: ${data}`);
|
|
73
73
|
const lines = data.toString().split("\n");
|
|
74
74
|
logContent.push(...lines);
|
|
75
75
|
});
|
|
76
76
|
tsc.stderr.on("data", (data) => {
|
|
77
|
-
|
|
77
|
+
console.error(`stderr: ${data}`);
|
|
78
|
+
process.exit(-1);
|
|
78
79
|
});
|
|
79
80
|
tsc.on("close", (code) => {
|
|
80
81
|
parseTsErrors();
|
|
82
|
+
console.log("tsc done");
|
|
81
83
|
resolve(`tsc process exited with code ${code}`);
|
|
82
84
|
// if (code !== 0) {
|
|
83
85
|
// resolve(`tsc process exited with code ${code}`);
|
|
@@ -131,7 +133,6 @@ export class ITProject {
|
|
|
131
133
|
}
|
|
132
134
|
});
|
|
133
135
|
fs.writeFileSync(`${this.config.outdir}/testeranto.json`, JSON.stringify(Object.assign(Object.assign({}, this.config), { buildDir: process.cwd() + "/" + this.config.outdir }), null, 2));
|
|
134
|
-
compile();
|
|
135
136
|
Promise.resolve(Promise.all([...this.getSecondaryEndpointsPoints("web")].map(async (sourceFilePath) => {
|
|
136
137
|
const sourceFileSplit = sourceFilePath.split("/");
|
|
137
138
|
const sourceDir = sourceFileSplit.slice(0, -1);
|
|
@@ -155,6 +156,7 @@ export class ITProject {
|
|
|
155
156
|
});
|
|
156
157
|
});
|
|
157
158
|
Promise.all([
|
|
159
|
+
compile(),
|
|
158
160
|
esbuild
|
|
159
161
|
.context(esbuildNodeConfiger(this.config, nodeEntryPoints))
|
|
160
162
|
.then(async (nodeContext) => {
|
|
@@ -16,7 +16,7 @@ export default async (partialConfig) => {
|
|
|
16
16
|
executablePath:
|
|
17
17
|
// process.env.CHROMIUM_PATH || "/opt/homebrew/bin/chromium",
|
|
18
18
|
"/opt/homebrew/bin/chromium",
|
|
19
|
-
headless:
|
|
19
|
+
headless: true,
|
|
20
20
|
dumpio: true,
|
|
21
21
|
// timeout: 0,
|
|
22
22
|
devtools: true,
|
|
@@ -55,10 +55,8 @@ export default async (partialConfig) => {
|
|
|
55
55
|
process.stdin.on("keypress", (str, key) => {
|
|
56
56
|
if (key.name === "q") {
|
|
57
57
|
pm.shutDown();
|
|
58
|
-
// process.exit();
|
|
59
58
|
}
|
|
60
59
|
if (key.name === "x") {
|
|
61
|
-
// pm.shutDown();
|
|
62
60
|
process.exit(-1);
|
|
63
61
|
}
|
|
64
62
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import Testeranto from "../Node.js";
|
|
3
3
|
export default (testInput, testSpecifications, testImplementations, testInterface) => {
|
|
4
|
-
return Testeranto(testInput, testSpecifications, testImplementations, Object.assign({ beforeAll(x) {
|
|
4
|
+
return Testeranto(testInput, testSpecifications, testImplementations, Object.assign({ beforeAll: (x) => {
|
|
5
5
|
// process.parentPort.postMessage(
|
|
6
6
|
// `/docs/web/src/ClassicalComponent/test.html`
|
|
7
7
|
// );
|
|
@@ -6,14 +6,22 @@ export const testInterface = {
|
|
|
6
6
|
// // resolve(x());
|
|
7
7
|
// // });
|
|
8
8
|
// },
|
|
9
|
-
beforeEach: async (subject, initializer, artificer) => {
|
|
9
|
+
// beforeEach: async (subject, initializer, artificer): Promise<IStore> => {
|
|
10
|
+
// return new Promise((resolve, rej) => {
|
|
11
|
+
// resolve(React.createElement(subject));
|
|
12
|
+
// });
|
|
13
|
+
// },
|
|
14
|
+
andWhen: async (s, whenCB) => {
|
|
15
|
+
await whenCB(s());
|
|
10
16
|
return new Promise((resolve, rej) => {
|
|
11
|
-
|
|
12
|
-
console.log("react-element", x);
|
|
13
|
-
resolve(x);
|
|
17
|
+
resolve(React.createElement(s));
|
|
14
18
|
});
|
|
19
|
+
// return whenCB(s);
|
|
15
20
|
},
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
butThen: async (subject, thenCB) => {
|
|
22
|
+
await thenCB(subject());
|
|
23
|
+
return new Promise((resolve, rej) => {
|
|
24
|
+
resolve(React.createElement(subject));
|
|
25
|
+
});
|
|
18
26
|
},
|
|
19
27
|
};
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import Testeranto from "../../../Node.js";
|
|
2
2
|
import { testInterface as baseInterface, } from "./index.js";
|
|
3
|
-
export default (testImplementations, testSpecifications, testInput, testInterface) => {
|
|
4
|
-
return Testeranto(testInput, testSpecifications, testImplementations,
|
|
3
|
+
export default (testImplementations, testSpecifications, testInput, testInterface = baseInterface) => {
|
|
4
|
+
return Testeranto(testInput, testSpecifications, testImplementations, testInterface
|
|
5
|
+
// {
|
|
6
|
+
// ...baseInterface,
|
|
7
|
+
// ...testInterface,
|
|
8
|
+
// }
|
|
9
|
+
);
|
|
5
10
|
};
|
|
@@ -13,52 +13,26 @@ export default (testInput, testSpecifications, testImplementations, testInterfac
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
const t = Testeranto(testInput, testSpecifications, testImplementations, {
|
|
16
|
-
beforeAll: async (
|
|
16
|
+
beforeAll: async (subject, artificer) => {
|
|
17
17
|
return await new Promise((resolve, rej) => {
|
|
18
18
|
const htmlElement = document.getElementById("root");
|
|
19
19
|
if (htmlElement) {
|
|
20
20
|
const domRoot = ReactDom.createRoot(htmlElement);
|
|
21
|
-
|
|
22
|
-
domRoot.render(createElement(TesterantoComponent, Object.assign(Object.assign({}, initialProps), { done: (reactElement) => {
|
|
23
|
-
resolve({
|
|
24
|
-
htmlElement,
|
|
25
|
-
reactElement,
|
|
26
|
-
domRoot,
|
|
27
|
-
});
|
|
28
|
-
} }), []));
|
|
29
|
-
// resolve({ htmlElement });
|
|
21
|
+
resolve({ domRoot, htmlElement });
|
|
30
22
|
}
|
|
31
23
|
});
|
|
32
24
|
},
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
// // domRoot.render(
|
|
45
|
-
// // createElement(
|
|
46
|
-
// // TesterantoComponent,
|
|
47
|
-
// // {
|
|
48
|
-
// // ...initializer,
|
|
49
|
-
// // done: (reactElement) => {
|
|
50
|
-
// // resolve({
|
|
51
|
-
// // htmlElement,
|
|
52
|
-
// // reactElement,
|
|
53
|
-
// // domRoot,
|
|
54
|
-
// // });
|
|
55
|
-
// // },
|
|
56
|
-
// // },
|
|
57
|
-
// // []
|
|
58
|
-
// // )
|
|
59
|
-
// // );
|
|
60
|
-
// });
|
|
61
|
-
// },
|
|
25
|
+
beforeEach: async ({ domRoot, htmlElement }, initialValues, testResource, artificer) => {
|
|
26
|
+
return new Promise(async (resolve, rej) => {
|
|
27
|
+
domRoot.render(createElement(TesterantoComponent, Object.assign(Object.assign({}, initialValues), { done: (reactElement) => {
|
|
28
|
+
resolve({
|
|
29
|
+
htmlElement,
|
|
30
|
+
reactElement,
|
|
31
|
+
domRoot,
|
|
32
|
+
});
|
|
33
|
+
} }), []));
|
|
34
|
+
});
|
|
35
|
+
},
|
|
62
36
|
andWhen: function (s, whenCB) {
|
|
63
37
|
return whenCB(s);
|
|
64
38
|
},
|
|
@@ -2,22 +2,17 @@ import React from "react";
|
|
|
2
2
|
import renderer, { act } from "react-test-renderer";
|
|
3
3
|
export const testInterface = {
|
|
4
4
|
beforeEach: function (CComponent, propsAndChildren) {
|
|
5
|
-
function Link(
|
|
6
|
-
|
|
7
|
-
const c = props.children;
|
|
8
|
-
return React.createElement(CComponent, p, c);
|
|
5
|
+
function Link(proper) {
|
|
6
|
+
return React.createElement(CComponent, proper(), []);
|
|
9
7
|
}
|
|
10
8
|
return new Promise((res, rej) => {
|
|
11
9
|
act(async () => {
|
|
12
|
-
const p = propsAndChildren;
|
|
13
|
-
const y = new CComponent(p.props);
|
|
14
10
|
const testRenderer = await renderer.create(Link(propsAndChildren));
|
|
15
11
|
res(testRenderer);
|
|
16
12
|
});
|
|
17
13
|
});
|
|
18
14
|
},
|
|
19
15
|
andWhen: async function (renderer, whenCB) {
|
|
20
|
-
// console.log("andWhen", whenCB)
|
|
21
16
|
await act(() => whenCB(renderer));
|
|
22
17
|
return renderer;
|
|
23
18
|
},
|
|
@@ -25,15 +20,12 @@ export const testInterface = {
|
|
|
25
20
|
// return whenCB()(s);
|
|
26
21
|
// },
|
|
27
22
|
butThen: async function (s, thenCB, tr) {
|
|
28
|
-
console.log("butThen", thenCB.toString());
|
|
29
23
|
return thenCB(s);
|
|
30
24
|
},
|
|
31
25
|
afterEach: async function (store, ndx, artificer) {
|
|
32
|
-
// console.log("afterEach", store);
|
|
33
26
|
return {};
|
|
34
27
|
},
|
|
35
28
|
afterAll: (store, artificer) => {
|
|
36
|
-
// console.log("afterAll", store);
|
|
37
29
|
return;
|
|
38
30
|
},
|
|
39
31
|
};
|
package/dist/module/src/Web.js
CHANGED
|
@@ -1,36 +1,40 @@
|
|
|
1
1
|
import { PM_Web } from "./PM/web";
|
|
2
2
|
import Testeranto from "./lib/core.js";
|
|
3
3
|
import { defaultTestResourceRequirement, } from "./lib/index.js";
|
|
4
|
+
let errorCallback = (e) => { };
|
|
5
|
+
let unhandledrejectionCallback = (event) => {
|
|
6
|
+
console.log("window.addEventListener unhandledrejection", event);
|
|
7
|
+
// cb({ error: event.reason.message });
|
|
8
|
+
// throw event;
|
|
9
|
+
};
|
|
4
10
|
export class WebTesteranto extends Testeranto {
|
|
5
11
|
constructor(input, testSpecification, testImplementation, testResourceRequirement, testInterface) {
|
|
6
|
-
super(input, testSpecification, testImplementation, testResourceRequirement, testInterface)
|
|
12
|
+
super(input, testSpecification, testImplementation, testResourceRequirement, testInterface, (cb) => {
|
|
13
|
+
window.removeEventListener("error", errorCallback);
|
|
14
|
+
errorCallback = (e) => {
|
|
15
|
+
console.log("window.addEventListener error", e);
|
|
16
|
+
cb(e);
|
|
17
|
+
// throw e;
|
|
18
|
+
};
|
|
19
|
+
window.addEventListener("error", errorCallback);
|
|
20
|
+
window.removeEventListener("unhandledrejection", unhandledrejectionCallback);
|
|
21
|
+
/////////////////////
|
|
22
|
+
window.removeEventListener("unhandledrejection", unhandledrejectionCallback);
|
|
23
|
+
unhandledrejectionCallback = (event) => {
|
|
24
|
+
console.log("window.addEventListener unhandledrejection", event);
|
|
25
|
+
cb({ error: event.reason.message });
|
|
26
|
+
// throw event;
|
|
27
|
+
};
|
|
28
|
+
window.addEventListener("unhandledrejection", unhandledrejectionCallback);
|
|
29
|
+
});
|
|
7
30
|
}
|
|
8
31
|
async receiveTestResourceConfig(partialTestResource) {
|
|
9
32
|
const t = partialTestResource; //JSON.parse(partialTestResource);
|
|
10
33
|
const pm = new PM_Web(t);
|
|
11
34
|
const { failed, artifacts, logPromise, features } = await this.testJobs[0].receiveTestResourceConfig(pm);
|
|
12
|
-
pm.customclose();
|
|
13
35
|
return new Promise((res, rej) => {
|
|
14
|
-
res(features);
|
|
36
|
+
res({ features, failed });
|
|
15
37
|
});
|
|
16
|
-
// return features;
|
|
17
|
-
// Promise.all([...artifacts, logPromise]).then(async () => {
|
|
18
|
-
// console.log("hello world");
|
|
19
|
-
// pm.customclose();
|
|
20
|
-
// // we can't close the window becuase we might be taking a screenshot
|
|
21
|
-
// // window.close();
|
|
22
|
-
// // console.log(
|
|
23
|
-
// // "(window as any).browser",
|
|
24
|
-
// // JSON.stringify(await (window as any).browser)
|
|
25
|
-
// // );
|
|
26
|
-
// // var currentWindow = (await (window as any).browser).getCurrentWindow();
|
|
27
|
-
// // window.close();
|
|
28
|
-
// // var customWindow = window.open("", "_blank", "");
|
|
29
|
-
// // customWindow.close();
|
|
30
|
-
// // this.puppetMaster.browser.page
|
|
31
|
-
// // window["customclose"]();
|
|
32
|
-
// // console.log("goodbye", window["customclose"]());
|
|
33
|
-
// });
|
|
34
38
|
}
|
|
35
39
|
}
|
|
36
40
|
export default async (input, testSpecification, testImplementation, testInterface, testResourceRequirement = defaultTestResourceRequirement) => {
|
|
@@ -2,14 +2,12 @@ import fs from "fs";
|
|
|
2
2
|
import path from "path";
|
|
3
3
|
const otherInputs = {};
|
|
4
4
|
const register = (entrypoint, sources) => {
|
|
5
|
-
console.log("register", entrypoint, sources);
|
|
6
5
|
if (!otherInputs[entrypoint]) {
|
|
7
6
|
otherInputs[entrypoint] = new Set();
|
|
8
7
|
}
|
|
9
8
|
sources.forEach((s) => otherInputs[entrypoint].add(s));
|
|
10
9
|
};
|
|
11
10
|
function tree(meta, key) {
|
|
12
|
-
console.log("searching metafile for", key);
|
|
13
11
|
const outputKey = Object.keys(meta.outputs).find((k) => {
|
|
14
12
|
return meta.outputs[k].entryPoint === key;
|
|
15
13
|
});
|