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/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "testeranto",
|
|
3
3
|
"description": "the AI powered BDD test framework for typescript projects",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.94.0",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": "18.18.0"
|
|
7
7
|
},
|
|
@@ -25,16 +25,16 @@
|
|
|
25
25
|
"require": "./dist/common/SubPackages/puppeteer.js"
|
|
26
26
|
},
|
|
27
27
|
"./src/SubPackages/react/jsx/index": {
|
|
28
|
-
"import": "./dist/module/SubPackages/react/jsx/index.js",
|
|
29
|
-
"require": "./dist/common/SubPackages/react/jsx/index.js"
|
|
28
|
+
"import": "./dist/module/src/SubPackages/react/jsx/index.js",
|
|
29
|
+
"require": "./dist/common/src/SubPackages/react/jsx/index.js"
|
|
30
30
|
},
|
|
31
31
|
"./src/SubPackages/react/jsx/web": {
|
|
32
32
|
"import": "./src/SubPackages/react/jsx/web.ts",
|
|
33
33
|
"require": "./src/SubPackages/react/jsx/web.ts"
|
|
34
34
|
},
|
|
35
35
|
"./src/SubPackages/react/jsx/node": {
|
|
36
|
-
"import": "./dist/module/SubPackages/react/jsx/node.js",
|
|
37
|
-
"require": "./dist/common/SubPackages/react/jsx/node.js"
|
|
36
|
+
"import": "./dist/module/src/SubPackages/react/jsx/node.js",
|
|
37
|
+
"require": "./dist/common/src/SubPackages/react/jsx/node.js"
|
|
38
38
|
},
|
|
39
39
|
"./src/SubPackages/react/component/index": {
|
|
40
40
|
"import": "./dist/module/SubPackages/react/component/index.js",
|
|
@@ -57,12 +57,12 @@
|
|
|
57
57
|
"require": "./src/SubPackages/react-test-renderer/component/index.ts"
|
|
58
58
|
},
|
|
59
59
|
"./src/SubPackages/react-test-renderer/component/web": {
|
|
60
|
-
"import": "./dist/module/SubPackages/react-test-renderer/component/web.js",
|
|
61
|
-
"require": "./dist/common/SubPackages/react-test-renderer/component/web.js"
|
|
60
|
+
"import": "./dist/module/src/SubPackages/react-test-renderer/component/web.js",
|
|
61
|
+
"require": "./dist/common/src/SubPackages/react-test-renderer/component/web.js"
|
|
62
62
|
},
|
|
63
63
|
"./src/SubPackages/react-test-renderer/component/node": {
|
|
64
|
-
"import": "./dist/module/SubPackages/react-test-renderer/component/node.js",
|
|
65
|
-
"require": "./dist/common/SubPackages/react-test-renderer/component/node.js"
|
|
64
|
+
"import": "./dist/module/src/SubPackages/react-test-renderer/component/node.js",
|
|
65
|
+
"require": "./dist/common/src/SubPackages/react-test-renderer/component/node.js"
|
|
66
66
|
},
|
|
67
67
|
"./src/SubPackages/react-test-renderer/jsx/index.js": {
|
|
68
68
|
"import": "./dist/module/src/SubPackages/react-test-renderer/jsx/index.js",
|
|
@@ -109,12 +109,12 @@
|
|
|
109
109
|
"require": "./dist/common/SubPackages/react-dom/jsx/index.js"
|
|
110
110
|
},
|
|
111
111
|
"./src/SubPackages/react-dom/component/web": {
|
|
112
|
-
"import": "./dist/module/SubPackages/react-dom/component/web.js",
|
|
113
|
-
"require": "./dist/common/SubPackages/react-dom/component/web.js"
|
|
112
|
+
"import": "./dist/module/src/SubPackages/react-dom/component/web.js",
|
|
113
|
+
"require": "./dist/common/src/SubPackages/react-dom/component/web.js"
|
|
114
114
|
},
|
|
115
115
|
"./src/SubPackages/react-dom/component/node": {
|
|
116
|
-
"import": "./dist/module/SubPackages/react-dom/component/node.js",
|
|
117
|
-
"require": "./dist/common/SubPackages/react-dom/component/node.js"
|
|
116
|
+
"import": "./dist/module/src/SubPackages/react-dom/component/node.js",
|
|
117
|
+
"require": "./dist/common/src/SubPackages/react-dom/component/node.js"
|
|
118
118
|
},
|
|
119
119
|
"./src/Types": {
|
|
120
120
|
"import": "./src/Types.ts",
|
package/src/Node.ts
CHANGED
|
@@ -40,7 +40,10 @@ export class NodeTesteranto<
|
|
|
40
40
|
testSpecification,
|
|
41
41
|
testImplementation,
|
|
42
42
|
testResourceRequirement,
|
|
43
|
-
testInterface
|
|
43
|
+
testInterface,
|
|
44
|
+
() => {
|
|
45
|
+
// no-op
|
|
46
|
+
}
|
|
44
47
|
);
|
|
45
48
|
}
|
|
46
49
|
|
|
@@ -49,8 +52,8 @@ export class NodeTesteranto<
|
|
|
49
52
|
const pm = new PM_Node(t);
|
|
50
53
|
const { failed, artifacts, logPromise, features } =
|
|
51
54
|
await this.testJobs[0].receiveTestResourceConfig(pm);
|
|
52
|
-
pm.customclose();
|
|
53
|
-
return features;
|
|
55
|
+
// pm.customclose();
|
|
56
|
+
return { features, failed };
|
|
54
57
|
}
|
|
55
58
|
}
|
|
56
59
|
|
package/src/PM/main.ts
CHANGED
|
@@ -8,7 +8,7 @@ import puppeteer, {
|
|
|
8
8
|
import { PassThrough } from "stream";
|
|
9
9
|
import crypto from "crypto";
|
|
10
10
|
|
|
11
|
-
import { IBuiltConfig, ITestTypes } from "../lib/types";
|
|
11
|
+
import { IBuiltConfig, IFinalResults, ITestTypes } from "../lib/types";
|
|
12
12
|
|
|
13
13
|
import { PM } from "./index.js";
|
|
14
14
|
import { destinationOfRuntime } from "../utils.js";
|
|
@@ -57,14 +57,19 @@ export class PM_Main extends PM {
|
|
|
57
57
|
contents: string,
|
|
58
58
|
testName: string
|
|
59
59
|
) => {
|
|
60
|
-
// console.log("
|
|
60
|
+
// console.log(testName, "writeFileSync", filepath, testName);
|
|
61
61
|
|
|
62
62
|
// Create directories if they don't exist
|
|
63
|
-
const dir = path.dirname(filepath
|
|
63
|
+
const dir = path.dirname(filepath);
|
|
64
|
+
|
|
65
|
+
// console.log(testName, "mkdirSync", dir);
|
|
64
66
|
|
|
65
67
|
fs.mkdirSync(dir, {
|
|
66
68
|
recursive: true,
|
|
67
69
|
});
|
|
70
|
+
|
|
71
|
+
// console.log(testName, "mkdirSync2");
|
|
72
|
+
|
|
68
73
|
if (!files[testName]) {
|
|
69
74
|
files[testName] = new Set();
|
|
70
75
|
}
|
|
@@ -122,17 +127,17 @@ export class PM_Main extends PM {
|
|
|
122
127
|
return sPromise;
|
|
123
128
|
};
|
|
124
129
|
|
|
125
|
-
globalThis["customclose"] = (p: string, testName: string) => {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
};
|
|
130
|
+
// globalThis["customclose"] = (p: string, testName: string) => {
|
|
131
|
+
// if (!files[testName]) {
|
|
132
|
+
// files[testName] = new Set();
|
|
133
|
+
// }
|
|
134
|
+
|
|
135
|
+
// fs.writeFileSync(
|
|
136
|
+
// p + "/manifest.json",
|
|
137
|
+
// JSON.stringify(Array.from(files[testName]))
|
|
138
|
+
// );
|
|
139
|
+
// delete files[testName];
|
|
140
|
+
// };
|
|
136
141
|
}
|
|
137
142
|
|
|
138
143
|
$(selector: string): boolean {
|
|
@@ -340,14 +345,18 @@ export class PM_Main extends PM {
|
|
|
340
345
|
|
|
341
346
|
const builtfile = dest + ".mjs";
|
|
342
347
|
|
|
348
|
+
const webSideCares: Page[] = [];
|
|
349
|
+
|
|
343
350
|
await Promise.all(
|
|
344
|
-
testConfig[3].map((sidecar) => {
|
|
351
|
+
testConfig[3].map(async (sidecar) => {
|
|
345
352
|
if (sidecar[1] === "web") {
|
|
346
|
-
|
|
353
|
+
const s = await this.launchWebSideCar(
|
|
347
354
|
sidecar[0],
|
|
348
355
|
destinationOfRuntime(sidecar[0], "web", this.configs),
|
|
349
356
|
sidecar
|
|
350
357
|
);
|
|
358
|
+
webSideCares.push(s);
|
|
359
|
+
return s;
|
|
351
360
|
}
|
|
352
361
|
|
|
353
362
|
if (sidecar[1] === "node") {
|
|
@@ -366,13 +375,15 @@ export class PM_Main extends PM {
|
|
|
366
375
|
return module.default.then((defaultModule) => {
|
|
367
376
|
defaultModule
|
|
368
377
|
.receiveTestResourceConfig(argz)
|
|
369
|
-
.then(async (features:
|
|
378
|
+
.then(async ({ features, failed }: IFinalResults) => {
|
|
370
379
|
this.receiveFeatures(features, destFolder);
|
|
380
|
+
console.log(`${src} completed with ${failed} errors`);
|
|
371
381
|
})
|
|
372
382
|
.catch((e) => {
|
|
373
|
-
console.log(
|
|
383
|
+
console.log(`${src} errored with`, e);
|
|
374
384
|
})
|
|
375
385
|
.finally(() => {
|
|
386
|
+
webSideCares.forEach((webSideCar) => webSideCar.close());
|
|
376
387
|
this.deregister(src);
|
|
377
388
|
});
|
|
378
389
|
});
|
|
@@ -390,23 +401,16 @@ export class PM_Main extends PM {
|
|
|
390
401
|
src: string,
|
|
391
402
|
dest: string,
|
|
392
403
|
testConfig: ITestTypes
|
|
393
|
-
) => {
|
|
404
|
+
): Promise<Page> => {
|
|
394
405
|
const d = dest + ".mjs";
|
|
395
406
|
console.log("launchWebSideCar", src, dest, d);
|
|
396
407
|
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
|
-
// })`;
|
|
408
|
+
// const webArgz = JSON.stringify({
|
|
409
|
+
// name: dest,
|
|
410
|
+
// ports: [].toString(),
|
|
411
|
+
// fs: destFolder,
|
|
412
|
+
// browserWSEndpoint: this.browser.wsEndpoint(),
|
|
413
|
+
// });
|
|
410
414
|
|
|
411
415
|
const fileStreams2: fs.WriteStream[] = [];
|
|
412
416
|
const doneFileStream2: Promise<any>[] = [];
|
|
@@ -520,18 +524,18 @@ export class PM_Main extends PM {
|
|
|
520
524
|
return fileStreams2[uid].end();
|
|
521
525
|
});
|
|
522
526
|
|
|
523
|
-
page.exposeFunction("customclose", (p: string, testName: string) => {
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
});
|
|
527
|
+
// page.exposeFunction("customclose", (p: string, testName: string) => {
|
|
528
|
+
// fs.writeFileSync(
|
|
529
|
+
// p + "/manifest.json",
|
|
530
|
+
// JSON.stringify(Array.from(files[testName]))
|
|
531
|
+
// );
|
|
532
|
+
// delete files[testName];
|
|
533
|
+
|
|
534
|
+
// Promise.all(screenshots[testName] || []).then(() => {
|
|
535
|
+
// delete screenshots[testName];
|
|
536
|
+
// // page.close();
|
|
537
|
+
// });
|
|
538
|
+
// });
|
|
535
539
|
|
|
536
540
|
return page;
|
|
537
541
|
})
|
|
@@ -737,23 +741,24 @@ export class PM_Main extends PM {
|
|
|
737
741
|
page.exposeFunction(
|
|
738
742
|
"writeFileSync",
|
|
739
743
|
(fp: string, contents: string, testName: string) => {
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
744
|
+
return globalThis["writeFileSync"](fp, contents, testName);
|
|
745
|
+
// const dir = path.dirname(fp);
|
|
746
|
+
|
|
747
|
+
// fs.mkdirSync(dir, {
|
|
748
|
+
// recursive: true,
|
|
749
|
+
// });
|
|
750
|
+
|
|
751
|
+
// const p = new Promise<string>(async (res, rej) => {
|
|
752
|
+
// fs.writeFileSync(fp, contents);
|
|
753
|
+
// res(fp);
|
|
754
|
+
// });
|
|
755
|
+
// doneFileStream2.push(p);
|
|
756
|
+
|
|
757
|
+
// if (!files[testName]) {
|
|
758
|
+
// files[testName] = new Set();
|
|
759
|
+
// }
|
|
760
|
+
// files[testName].add(fp);
|
|
761
|
+
// return p;
|
|
757
762
|
}
|
|
758
763
|
);
|
|
759
764
|
|
|
@@ -803,45 +808,44 @@ export class PM_Main extends PM {
|
|
|
803
808
|
return fileStreams2[uid].end();
|
|
804
809
|
});
|
|
805
810
|
|
|
806
|
-
page.exposeFunction("customclose", (p: string, testName: string) => {
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
fs.writeFileSync(
|
|
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
|
-
});
|
|
811
|
+
// page.exposeFunction("customclose", (p: string, testName: string) => {
|
|
812
|
+
// // console.log("closing", p);
|
|
822
813
|
|
|
823
|
-
|
|
824
|
-
// p + "/manifest.json",
|
|
825
|
-
// // files.entries()
|
|
826
|
-
// JSON.stringify(Array.from(files[testName]))
|
|
827
|
-
// );
|
|
814
|
+
// console.log("\t GOODBYE customclose");
|
|
828
815
|
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
816
|
+
// fs.writeFileSync(
|
|
817
|
+
// p + "/manifest.json",
|
|
818
|
+
// JSON.stringify(Array.from(files[testName]))
|
|
819
|
+
// );
|
|
820
|
+
// delete files[testName];
|
|
834
821
|
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
// console.log("Delayed for 1 second.");
|
|
840
|
-
// page.close();
|
|
841
|
-
// }, 5000);
|
|
822
|
+
// // console.log("screenshots[testName]", screenshots[testName]);
|
|
823
|
+
// Promise.all(screenshots[testName] || []).then(() => {
|
|
824
|
+
// delete screenshots[testName];
|
|
825
|
+
// });
|
|
842
826
|
|
|
843
|
-
|
|
844
|
-
|
|
827
|
+
// // globalThis["writeFileSync"](
|
|
828
|
+
// // p + "/manifest.json",
|
|
829
|
+
// // // files.entries()
|
|
830
|
+
// // JSON.stringify(Array.from(files[testName]))
|
|
831
|
+
// // );
|
|
832
|
+
|
|
833
|
+
// // console.log("closing doneFileStream2", doneFileStream2);
|
|
834
|
+
// // console.log("closing doneFileStream2", doneFileStream2);
|
|
835
|
+
// // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
|
|
836
|
+
// // page.close();
|
|
837
|
+
// // });
|
|
838
|
+
|
|
839
|
+
// // Promise.all(screenshots).then(() => {
|
|
840
|
+
// // page.close();
|
|
841
|
+
// // });
|
|
842
|
+
// // setTimeout(() => {
|
|
843
|
+
// // console.log("Delayed for 1 second.");
|
|
844
|
+
// // page.close();
|
|
845
|
+
// // }, 5000);
|
|
846
|
+
|
|
847
|
+
// // return page.close();
|
|
848
|
+
// });
|
|
845
849
|
|
|
846
850
|
page.exposeFunction("page", () => {
|
|
847
851
|
return page.mainFrame()._id;
|
|
@@ -895,13 +899,25 @@ export class PM_Main extends PM {
|
|
|
895
899
|
})
|
|
896
900
|
.then(async (page) => {
|
|
897
901
|
const close = () => {
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
902
|
+
if (!files[t]) {
|
|
903
|
+
files[t] = new Set();
|
|
904
|
+
}
|
|
905
|
+
// files[t].add(filepath);
|
|
906
|
+
|
|
907
|
+
fs.writeFileSync(
|
|
908
|
+
dest + "/manifest.json",
|
|
909
|
+
JSON.stringify(Array.from(files[t]))
|
|
910
|
+
);
|
|
911
|
+
delete files[t];
|
|
912
|
+
|
|
913
|
+
Promise.all(screenshots[t] || []).then(() => {
|
|
914
|
+
delete screenshots[t];
|
|
915
|
+
page.close();
|
|
901
916
|
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
917
|
+
this.deregister(t);
|
|
918
|
+
stderrStream.close();
|
|
919
|
+
stdoutStream.close();
|
|
920
|
+
});
|
|
905
921
|
};
|
|
906
922
|
|
|
907
923
|
page.on("pageerror", (err: Error) => {
|
|
@@ -936,20 +952,15 @@ export class PM_Main extends PM {
|
|
|
936
952
|
|
|
937
953
|
await page
|
|
938
954
|
.evaluate(evaluation)
|
|
939
|
-
.then(async (features:
|
|
955
|
+
.then(async ({ failed, features }: IFinalResults) => {
|
|
940
956
|
this.receiveFeatures(features, destFolder);
|
|
957
|
+
console.log(`${t} completed with ${failed} errors`);
|
|
941
958
|
})
|
|
942
959
|
.catch((e) => {
|
|
943
|
-
console.log(
|
|
944
|
-
console.log(e);
|
|
960
|
+
console.log(`${t} errored with`, e);
|
|
945
961
|
})
|
|
946
962
|
.finally(() => {
|
|
947
963
|
close();
|
|
948
|
-
// console.log("evaluation complete.", dest);
|
|
949
|
-
// page.close();
|
|
950
|
-
// this.deregister(t);
|
|
951
|
-
// stderrStream.close();
|
|
952
|
-
// stdoutStream.close();
|
|
953
964
|
});
|
|
954
965
|
|
|
955
966
|
return page;
|
|
@@ -957,7 +968,6 @@ export class PM_Main extends PM {
|
|
|
957
968
|
};
|
|
958
969
|
|
|
959
970
|
receiveFeatures = (features: string[], destFolder: string) => {
|
|
960
|
-
console.log("this.receiveFeatures", features);
|
|
961
971
|
features
|
|
962
972
|
.reduce(async (mm, featureStringKey) => {
|
|
963
973
|
const accum = await mm;
|
package/src/Project.ts
CHANGED
|
@@ -89,18 +89,19 @@ const compile = () => {
|
|
|
89
89
|
const tsc = spawn("tsc", ["-noEmit"]);
|
|
90
90
|
|
|
91
91
|
tsc.stdout.on("data", (data) => {
|
|
92
|
-
// console.log(`stdout: ${data}`);
|
|
92
|
+
// console.log(`tsc stdout: ${data}`);
|
|
93
93
|
const lines = data.toString().split("\n");
|
|
94
94
|
logContent.push(...lines);
|
|
95
95
|
});
|
|
96
96
|
|
|
97
97
|
tsc.stderr.on("data", (data) => {
|
|
98
|
-
|
|
98
|
+
console.error(`stderr: ${data}`);
|
|
99
|
+
process.exit(-1);
|
|
99
100
|
});
|
|
100
101
|
|
|
101
102
|
tsc.on("close", (code) => {
|
|
102
103
|
parseTsErrors();
|
|
103
|
-
|
|
104
|
+
console.log("tsc done");
|
|
104
105
|
resolve(`tsc process exited with code ${code}`);
|
|
105
106
|
// if (code !== 0) {
|
|
106
107
|
// resolve(`tsc process exited with code ${code}`);
|
|
@@ -143,8 +144,6 @@ export class ITProject {
|
|
|
143
144
|
)
|
|
144
145
|
);
|
|
145
146
|
|
|
146
|
-
compile();
|
|
147
|
-
|
|
148
147
|
Promise.resolve(
|
|
149
148
|
Promise.all(
|
|
150
149
|
[...this.getSecondaryEndpointsPoints("web")].map(
|
|
@@ -188,6 +187,8 @@ export class ITProject {
|
|
|
188
187
|
});
|
|
189
188
|
|
|
190
189
|
Promise.all([
|
|
190
|
+
compile(),
|
|
191
|
+
|
|
191
192
|
esbuild
|
|
192
193
|
.context(esbuildNodeConfiger(this.config, nodeEntryPoints))
|
|
193
194
|
.then(async (nodeContext) => {
|
package/src/Puppeteer.ts
CHANGED
|
@@ -36,7 +36,7 @@ export default async (partialConfig) => {
|
|
|
36
36
|
executablePath:
|
|
37
37
|
// process.env.CHROMIUM_PATH || "/opt/homebrew/bin/chromium",
|
|
38
38
|
"/opt/homebrew/bin/chromium",
|
|
39
|
-
headless:
|
|
39
|
+
headless: true,
|
|
40
40
|
dumpio: true,
|
|
41
41
|
// timeout: 0,
|
|
42
42
|
devtools: true,
|
|
@@ -83,10 +83,8 @@ export default async (partialConfig) => {
|
|
|
83
83
|
process.stdin.on("keypress", (str, key) => {
|
|
84
84
|
if (key.name === "q") {
|
|
85
85
|
pm.shutDown();
|
|
86
|
-
// process.exit();
|
|
87
86
|
}
|
|
88
87
|
if (key.name === "x") {
|
|
89
|
-
// pm.shutDown();
|
|
90
88
|
process.exit(-1);
|
|
91
89
|
}
|
|
92
90
|
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CElement } from "react";
|
|
2
|
+
import React from "react";
|
|
2
3
|
|
|
3
4
|
import {
|
|
4
5
|
IBaseTest,
|
|
@@ -6,7 +7,6 @@ import {
|
|
|
6
7
|
ITestImplementation,
|
|
7
8
|
ITestSpecification,
|
|
8
9
|
} from "../../../Types";
|
|
9
|
-
import React from "react";
|
|
10
10
|
|
|
11
11
|
export type IWhenShape = any;
|
|
12
12
|
export type IThenShape = any;
|
|
@@ -29,14 +29,22 @@ export const testInterface: IPartialInterface<any> = {
|
|
|
29
29
|
// // resolve(x());
|
|
30
30
|
// // });
|
|
31
31
|
// },
|
|
32
|
-
beforeEach: async (subject, initializer, artificer): Promise<IStore> => {
|
|
32
|
+
// beforeEach: async (subject, initializer, artificer): Promise<IStore> => {
|
|
33
|
+
// return new Promise((resolve, rej) => {
|
|
34
|
+
// resolve(React.createElement(subject));
|
|
35
|
+
// });
|
|
36
|
+
// },
|
|
37
|
+
andWhen: async (s: IStore, whenCB): Promise<IStore> => {
|
|
38
|
+
await whenCB(s());
|
|
33
39
|
return new Promise((resolve, rej) => {
|
|
34
|
-
|
|
35
|
-
console.log("react-element", x);
|
|
36
|
-
resolve(x);
|
|
40
|
+
resolve(React.createElement(s));
|
|
37
41
|
});
|
|
42
|
+
// return whenCB(s);
|
|
38
43
|
},
|
|
39
|
-
|
|
40
|
-
|
|
44
|
+
butThen: async (subject, thenCB) => {
|
|
45
|
+
await thenCB(subject());
|
|
46
|
+
return new Promise((resolve, rej) => {
|
|
47
|
+
resolve(React.createElement(subject));
|
|
48
|
+
});
|
|
41
49
|
},
|
|
42
50
|
};
|
|
@@ -12,15 +12,16 @@ export default <ITestShape extends IBaseTest>(
|
|
|
12
12
|
testImplementations: ITestImpl<ITestShape>,
|
|
13
13
|
testSpecifications: ITestSpec<ITestShape>,
|
|
14
14
|
testInput: IInput,
|
|
15
|
-
testInterface: IPartialInterface<ITestShape>
|
|
15
|
+
testInterface: IPartialInterface<ITestShape> = baseInterface
|
|
16
16
|
) => {
|
|
17
17
|
return Testeranto<ITestShape>(
|
|
18
18
|
testInput,
|
|
19
19
|
testSpecifications,
|
|
20
20
|
testImplementations,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
testInterface
|
|
22
|
+
// {
|
|
23
|
+
// ...baseInterface,
|
|
24
|
+
// ...testInterface,
|
|
25
|
+
// }
|
|
25
26
|
);
|
|
26
27
|
};
|
|
@@ -25,7 +25,7 @@ export type IStore = {
|
|
|
25
25
|
|
|
26
26
|
type ISubject = {
|
|
27
27
|
htmlElement: HTMLElement;
|
|
28
|
-
reactElement: any; //CElement<any, any>,
|
|
28
|
+
// reactElement: any; //CElement<any, any>,
|
|
29
29
|
domRoot: ReactDom.Root;
|
|
30
30
|
};
|
|
31
31
|
|
|
@@ -52,63 +52,40 @@ export default <ITestShape extends IBaseTest, IWhen, IGiven>(
|
|
|
52
52
|
testSpecifications,
|
|
53
53
|
testImplementations,
|
|
54
54
|
{
|
|
55
|
-
beforeAll: async (
|
|
55
|
+
beforeAll: async (subject, artificer): Promise<ISubject> => {
|
|
56
56
|
return await new Promise((resolve, rej) => {
|
|
57
57
|
const htmlElement = document.getElementById("root");
|
|
58
58
|
if (htmlElement) {
|
|
59
59
|
const domRoot = ReactDom.createRoot(htmlElement);
|
|
60
|
-
|
|
61
|
-
domRoot.render(
|
|
62
|
-
createElement(
|
|
63
|
-
TesterantoComponent,
|
|
64
|
-
{
|
|
65
|
-
...initialProps,
|
|
66
|
-
done: (reactElement) => {
|
|
67
|
-
resolve({
|
|
68
|
-
htmlElement,
|
|
69
|
-
reactElement,
|
|
70
|
-
domRoot,
|
|
71
|
-
});
|
|
72
|
-
},
|
|
73
|
-
},
|
|
74
|
-
[]
|
|
75
|
-
)
|
|
76
|
-
);
|
|
77
|
-
|
|
78
|
-
// resolve({ htmlElement });
|
|
60
|
+
resolve({ domRoot, htmlElement });
|
|
79
61
|
}
|
|
80
62
|
});
|
|
81
63
|
},
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
// // []
|
|
108
|
-
// // )
|
|
109
|
-
// // );
|
|
110
|
-
// });
|
|
111
|
-
// },
|
|
64
|
+
beforeEach: async (
|
|
65
|
+
{ domRoot, htmlElement },
|
|
66
|
+
initialValues,
|
|
67
|
+
testResource,
|
|
68
|
+
artificer
|
|
69
|
+
): Promise<IStore> => {
|
|
70
|
+
return new Promise(async (resolve, rej) => {
|
|
71
|
+
domRoot.render(
|
|
72
|
+
createElement(
|
|
73
|
+
TesterantoComponent,
|
|
74
|
+
{
|
|
75
|
+
...initialValues,
|
|
76
|
+
done: (reactElement) => {
|
|
77
|
+
resolve({
|
|
78
|
+
htmlElement,
|
|
79
|
+
reactElement,
|
|
80
|
+
domRoot,
|
|
81
|
+
});
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
[]
|
|
85
|
+
)
|
|
86
|
+
);
|
|
87
|
+
});
|
|
88
|
+
},
|
|
112
89
|
andWhen: function (s: IStore, whenCB): Promise<ISelection> {
|
|
113
90
|
return whenCB(s);
|
|
114
91
|
},
|