testeranto 0.85.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/README.md +1 -3
- package/bin/init-docs.js +24 -0
- package/bundle.js +53 -0
- package/dist/common/dist/module/src/Init.js +40 -0
- package/dist/common/src/Init.js +30 -0
- package/dist/common/src/Node.js +5 -3
- package/dist/common/src/PM/main.js +136 -90
- package/dist/common/src/Project.js +82 -0
- package/dist/common/src/Puppeteer.js +0 -2
- 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/{run-tests.js → src/build-tests.js} +10 -5
- package/dist/common/src/defaultConfig.js +19 -0
- package/dist/common/src/esbuildConfigs/inputFilesPlugin.js +26 -16
- package/dist/common/src/init-docs.js +43 -0
- package/dist/common/src/lib/abstractBase.js +29 -248
- 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 -26
- package/dist/common/{build-tests.js → src/run-tests.js} +10 -9
- package/dist/common/tsconfig.common.tsbuildinfo +1 -1
- package/dist/module/src/Init.js +30 -0
- package/dist/module/src/Node.js +5 -3
- package/dist/module/src/PM/main.js +136 -90
- package/dist/module/src/Project.js +82 -0
- package/dist/module/src/Puppeteer.js +0 -2
- 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/build-tests.js +11 -0
- package/dist/module/src/defaultConfig.js +17 -0
- package/dist/module/src/esbuildConfigs/inputFilesPlugin.js +26 -16
- package/dist/module/src/init-docs.js +15 -0
- package/dist/module/src/lib/abstractBase.js +29 -248
- 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 -26
- package/dist/module/src/run-tests.js +11 -0
- package/dist/module/tsconfig.module.tsbuildinfo +1 -1
- package/dist/prebuild/build-tests.mjs +553 -0
- package/dist/prebuild/init-docs.mjs +48 -0
- package/dist/prebuild/run-tests.mjs +871 -0
- package/dist/types/dist/module/src/Init.d.ts +2 -0
- 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/build-tests.d.ts +1 -0
- package/dist/types/src/defaultConfig.d.ts +3 -0
- package/dist/types/src/init-docs.d.ts +1 -0
- 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/src/run-tests.d.ts +1 -0
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/package.json +21 -24
- package/src/Init.ts +28 -0
- package/src/Node.ts +6 -3
- package/src/PM/main.ts +168 -110
- package/src/Project.ts +103 -0
- package/src/Puppeteer.ts +0 -2
- 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/build-tests.ts +12 -0
- package/src/defaultConfig.ts +20 -0
- package/src/esbuildConfigs/inputFilesPlugin.ts +46 -17
- package/src/init-docs.ts +19 -0
- package/src/lib/abstractBase.ts +38 -255
- 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/src/run-tests.ts +12 -0
- package/tsconfig.json +1 -1
- package/build-tests.ts +0 -16
- package/dist/common/init-docs.js +0 -8
- package/dist/module/build-tests.js +0 -10
- package/dist/module/init-docs.js +0 -3
- package/dist/module/run-tests.js +0 -6
- package/dist/prebuild/Puppeteer.mjs +0 -82033
- package/dist/types/build-tests.d.ts +0 -3
- package/dist/types/init-docs.d.ts +0 -2
- package/dist/types/run-tests.d.ts +0 -2
- package/init-docs.ts +0 -5
- package/pupBuild.js +0 -18
- package/run-tests.ts +0 -9
package/package.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "testeranto",
|
|
3
|
-
"description": "
|
|
4
|
-
"version": "0.
|
|
3
|
+
"description": "the AI powered BDD test framework for typescript projects",
|
|
4
|
+
"version": "0.94.0",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": "18.18.0"
|
|
7
7
|
},
|
|
8
|
+
"bin": {
|
|
9
|
+
"testeranto-init": "bin/init-docs.js testeranto.mts"
|
|
10
|
+
},
|
|
8
11
|
"type": "module",
|
|
9
12
|
"types": "./dist/index.d.mts",
|
|
10
13
|
"module": "dist/module/index.js",
|
|
@@ -22,16 +25,16 @@
|
|
|
22
25
|
"require": "./dist/common/SubPackages/puppeteer.js"
|
|
23
26
|
},
|
|
24
27
|
"./src/SubPackages/react/jsx/index": {
|
|
25
|
-
"import": "./dist/module/SubPackages/react/jsx/index.js",
|
|
26
|
-
"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"
|
|
27
30
|
},
|
|
28
31
|
"./src/SubPackages/react/jsx/web": {
|
|
29
32
|
"import": "./src/SubPackages/react/jsx/web.ts",
|
|
30
33
|
"require": "./src/SubPackages/react/jsx/web.ts"
|
|
31
34
|
},
|
|
32
35
|
"./src/SubPackages/react/jsx/node": {
|
|
33
|
-
"import": "./dist/module/SubPackages/react/jsx/node.js",
|
|
34
|
-
"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"
|
|
35
38
|
},
|
|
36
39
|
"./src/SubPackages/react/component/index": {
|
|
37
40
|
"import": "./dist/module/SubPackages/react/component/index.js",
|
|
@@ -54,12 +57,12 @@
|
|
|
54
57
|
"require": "./src/SubPackages/react-test-renderer/component/index.ts"
|
|
55
58
|
},
|
|
56
59
|
"./src/SubPackages/react-test-renderer/component/web": {
|
|
57
|
-
"import": "./dist/module/SubPackages/react-test-renderer/component/web.js",
|
|
58
|
-
"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"
|
|
59
62
|
},
|
|
60
63
|
"./src/SubPackages/react-test-renderer/component/node": {
|
|
61
|
-
"import": "./dist/module/SubPackages/react-test-renderer/component/node.js",
|
|
62
|
-
"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"
|
|
63
66
|
},
|
|
64
67
|
"./src/SubPackages/react-test-renderer/jsx/index.js": {
|
|
65
68
|
"import": "./dist/module/src/SubPackages/react-test-renderer/jsx/index.js",
|
|
@@ -106,12 +109,12 @@
|
|
|
106
109
|
"require": "./dist/common/SubPackages/react-dom/jsx/index.js"
|
|
107
110
|
},
|
|
108
111
|
"./src/SubPackages/react-dom/component/web": {
|
|
109
|
-
"import": "./dist/module/SubPackages/react-dom/component/web.js",
|
|
110
|
-
"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"
|
|
111
114
|
},
|
|
112
115
|
"./src/SubPackages/react-dom/component/node": {
|
|
113
|
-
"import": "./dist/module/SubPackages/react-dom/component/node.js",
|
|
114
|
-
"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"
|
|
115
118
|
},
|
|
116
119
|
"./src/Types": {
|
|
117
120
|
"import": "./src/Types.ts",
|
|
@@ -185,19 +188,13 @@
|
|
|
185
188
|
"ATDD"
|
|
186
189
|
],
|
|
187
190
|
"scripts": {
|
|
188
|
-
"commit": "yarn build; git add --all && git commit -m 'stash'",
|
|
189
191
|
"doit": "rm -rf node_modules && yarn install && yarn build",
|
|
190
|
-
"build": "sh prebuild.sh; cp ./src/cjs-shim.js ./dist/cjs-shim.js; tsc -p tsconfig.module.json; tsc -p tsconfig.common.json; tsc -p tsconfig.types.json; sh postBuild.sh",
|
|
192
|
+
"build": "sh prebuild.sh; cp ./src/cjs-shim.js ./dist/cjs-shim.js; tsc -p tsconfig.module.json; tsc -p tsconfig.common.json; tsc -p tsconfig.types.json; sh postBuild.sh; yarn bundle",
|
|
191
193
|
"dev": "cp ./src/cjs-shim.js ./dist/cjs-shim.js && tsc -p tsconfig.module.json --watch & tsc -p tsconfig.common.json --watch & tsc -p tsconfig.types.json --watch ",
|
|
192
|
-
"
|
|
194
|
+
"bundle": "node bundle.js",
|
|
193
195
|
"build-module": "tsc -p tsconfig.module.json",
|
|
194
196
|
"build-common": "tsc -p tsconfig.common.json",
|
|
195
|
-
"build-types": "tsc -p tsconfig.types.json"
|
|
196
|
-
"build-tests": "ts-node-esm ./project.ts",
|
|
197
|
-
"run-tests": "ts-node-esm ./run-tests.ts",
|
|
198
|
-
"init-docs": "ts-node-esm init-docs.ts",
|
|
199
|
-
"test": "yarn build-tests & yarn run-tests",
|
|
200
|
-
"scratch": "node scratch/build.js && node dist/scratch/server.js"
|
|
197
|
+
"build-types": "tsc -p tsconfig.types.json"
|
|
201
198
|
},
|
|
202
199
|
"peerDependencies": {
|
|
203
200
|
"@types/react": "18.2.0",
|
|
@@ -252,4 +249,4 @@
|
|
|
252
249
|
"why-is-node-running": "^3.2.2",
|
|
253
250
|
"ws": "^8.16.0"
|
|
254
251
|
}
|
|
255
|
-
}
|
|
252
|
+
}
|
package/src/Init.ts
CHANGED
|
@@ -6,6 +6,12 @@ export default async (partialConfig) => {
|
|
|
6
6
|
buildDir: process.cwd() + "/" + partialConfig.outdir,
|
|
7
7
|
};
|
|
8
8
|
|
|
9
|
+
try {
|
|
10
|
+
fs.mkdirSync(`${process.cwd()}/${config.outdir}`);
|
|
11
|
+
} catch {
|
|
12
|
+
// console.log()
|
|
13
|
+
}
|
|
14
|
+
|
|
9
15
|
fs.writeFileSync(
|
|
10
16
|
`${config.outdir}/testeranto.json`,
|
|
11
17
|
JSON.stringify(
|
|
@@ -17,4 +23,26 @@ export default async (partialConfig) => {
|
|
|
17
23
|
2
|
|
18
24
|
)
|
|
19
25
|
);
|
|
26
|
+
|
|
27
|
+
try {
|
|
28
|
+
fs.mkdirSync(`${process.cwd()}/${config.outdir}/node`);
|
|
29
|
+
} catch {
|
|
30
|
+
// console.log()
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
try {
|
|
34
|
+
fs.mkdirSync(`${process.cwd()}/${config.outdir}/web`);
|
|
35
|
+
} catch {
|
|
36
|
+
// console.log()
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
fs.mkdirSync(`${process.cwd()}/${config.outdir}/features`);
|
|
40
|
+
} catch {
|
|
41
|
+
// console.log()
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
fs.mkdirSync(`${process.cwd()}/${config.outdir}/ts`);
|
|
45
|
+
} catch {
|
|
46
|
+
// console.log()
|
|
47
|
+
}
|
|
20
48
|
};
|
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
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import path from "path";
|
|
3
|
-
import puppeteer, {
|
|
3
|
+
import puppeteer, {
|
|
4
|
+
Browser,
|
|
5
|
+
ConsoleMessage,
|
|
6
|
+
ScreenshotOptions,
|
|
7
|
+
} from "puppeteer-core";
|
|
4
8
|
import { PassThrough } from "stream";
|
|
5
9
|
import crypto from "crypto";
|
|
6
10
|
|
|
7
|
-
import { IBuiltConfig, ITestTypes } from "../lib/types";
|
|
11
|
+
import { IBuiltConfig, IFinalResults, ITestTypes } from "../lib/types";
|
|
8
12
|
|
|
9
13
|
import { PM } from "./index.js";
|
|
10
14
|
import { destinationOfRuntime } from "../utils.js";
|
|
11
15
|
import { ITLog } from "../lib/index.js";
|
|
12
16
|
import { Page } from "puppeteer-core/lib/esm/puppeteer";
|
|
13
17
|
|
|
18
|
+
const fileStreams3: fs.WriteStream[] = [];
|
|
19
|
+
|
|
14
20
|
type IFPaths = string[];
|
|
15
21
|
|
|
16
22
|
const fPaths: IFPaths = [];
|
|
17
|
-
|
|
23
|
+
|
|
18
24
|
const files: Record<string, Set<string>> = {};
|
|
19
25
|
const screenshots: Record<string, Promise<Uint8Array>[]> = {};
|
|
20
26
|
|
|
@@ -51,14 +57,19 @@ export class PM_Main extends PM {
|
|
|
51
57
|
contents: string,
|
|
52
58
|
testName: string
|
|
53
59
|
) => {
|
|
54
|
-
// console.log("
|
|
60
|
+
// console.log(testName, "writeFileSync", filepath, testName);
|
|
55
61
|
|
|
56
62
|
// Create directories if they don't exist
|
|
57
|
-
const dir = path.dirname(filepath
|
|
63
|
+
const dir = path.dirname(filepath);
|
|
64
|
+
|
|
65
|
+
// console.log(testName, "mkdirSync", dir);
|
|
58
66
|
|
|
59
67
|
fs.mkdirSync(dir, {
|
|
60
68
|
recursive: true,
|
|
61
69
|
});
|
|
70
|
+
|
|
71
|
+
// console.log(testName, "mkdirSync2");
|
|
72
|
+
|
|
62
73
|
if (!files[testName]) {
|
|
63
74
|
files[testName] = new Set();
|
|
64
75
|
}
|
|
@@ -116,17 +127,17 @@ export class PM_Main extends PM {
|
|
|
116
127
|
return sPromise;
|
|
117
128
|
};
|
|
118
129
|
|
|
119
|
-
globalThis["customclose"] = (p: string, testName: string) => {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
};
|
|
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
|
+
// };
|
|
130
141
|
}
|
|
131
142
|
|
|
132
143
|
$(selector: string): boolean {
|
|
@@ -334,14 +345,18 @@ export class PM_Main extends PM {
|
|
|
334
345
|
|
|
335
346
|
const builtfile = dest + ".mjs";
|
|
336
347
|
|
|
348
|
+
const webSideCares: Page[] = [];
|
|
349
|
+
|
|
337
350
|
await Promise.all(
|
|
338
|
-
testConfig[3].map((sidecar) => {
|
|
351
|
+
testConfig[3].map(async (sidecar) => {
|
|
339
352
|
if (sidecar[1] === "web") {
|
|
340
|
-
|
|
353
|
+
const s = await this.launchWebSideCar(
|
|
341
354
|
sidecar[0],
|
|
342
355
|
destinationOfRuntime(sidecar[0], "web", this.configs),
|
|
343
356
|
sidecar
|
|
344
357
|
);
|
|
358
|
+
webSideCares.push(s);
|
|
359
|
+
return s;
|
|
345
360
|
}
|
|
346
361
|
|
|
347
362
|
if (sidecar[1] === "node") {
|
|
@@ -360,13 +375,15 @@ export class PM_Main extends PM {
|
|
|
360
375
|
return module.default.then((defaultModule) => {
|
|
361
376
|
defaultModule
|
|
362
377
|
.receiveTestResourceConfig(argz)
|
|
363
|
-
.then(async (features:
|
|
378
|
+
.then(async ({ features, failed }: IFinalResults) => {
|
|
364
379
|
this.receiveFeatures(features, destFolder);
|
|
380
|
+
console.log(`${src} completed with ${failed} errors`);
|
|
365
381
|
})
|
|
366
382
|
.catch((e) => {
|
|
367
|
-
console.log(
|
|
383
|
+
console.log(`${src} errored with`, e);
|
|
368
384
|
})
|
|
369
385
|
.finally(() => {
|
|
386
|
+
webSideCares.forEach((webSideCar) => webSideCar.close());
|
|
370
387
|
this.deregister(src);
|
|
371
388
|
});
|
|
372
389
|
});
|
|
@@ -384,22 +401,16 @@ export class PM_Main extends PM {
|
|
|
384
401
|
src: string,
|
|
385
402
|
dest: string,
|
|
386
403
|
testConfig: ITestTypes
|
|
387
|
-
) => {
|
|
404
|
+
): Promise<Page> => {
|
|
388
405
|
const d = dest + ".mjs";
|
|
389
406
|
console.log("launchWebSideCar", src, dest, d);
|
|
390
407
|
const destFolder = dest.replace(".mjs", "");
|
|
391
|
-
const webArgz = JSON.stringify({
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
});
|
|
397
|
-
|
|
398
|
-
// const evaluation = `
|
|
399
|
-
// console.log("importing ${dest}.mjs");
|
|
400
|
-
// import('${dest}.mjs').then(async (x) => {
|
|
401
|
-
// console.log("imported", x.default);
|
|
402
|
-
// })`;
|
|
408
|
+
// const webArgz = JSON.stringify({
|
|
409
|
+
// name: dest,
|
|
410
|
+
// ports: [].toString(),
|
|
411
|
+
// fs: destFolder,
|
|
412
|
+
// browserWSEndpoint: this.browser.wsEndpoint(),
|
|
413
|
+
// });
|
|
403
414
|
|
|
404
415
|
const fileStreams2: fs.WriteStream[] = [];
|
|
405
416
|
const doneFileStream2: Promise<any>[] = [];
|
|
@@ -482,9 +493,9 @@ export class PM_Main extends PM {
|
|
|
482
493
|
(fp: string, testName: string) => {
|
|
483
494
|
const f = fs.createWriteStream(fp);
|
|
484
495
|
|
|
485
|
-
if (!files[testName]) {
|
|
486
|
-
|
|
487
|
-
}
|
|
496
|
+
// if (!files[testName]) {
|
|
497
|
+
// files[testName] = new Set();
|
|
498
|
+
// }
|
|
488
499
|
files[testName].add(fp);
|
|
489
500
|
|
|
490
501
|
const p = new Promise<string>((res, rej) => {
|
|
@@ -513,18 +524,18 @@ export class PM_Main extends PM {
|
|
|
513
524
|
return fileStreams2[uid].end();
|
|
514
525
|
});
|
|
515
526
|
|
|
516
|
-
page.exposeFunction("customclose", (p: string, testName: string) => {
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
});
|
|
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
|
+
// });
|
|
528
539
|
|
|
529
540
|
return page;
|
|
530
541
|
})
|
|
@@ -659,6 +670,9 @@ export class PM_Main extends PM {
|
|
|
659
670
|
const fileStreams2: fs.WriteStream[] = [];
|
|
660
671
|
const doneFileStream2: Promise<any>[] = [];
|
|
661
672
|
|
|
673
|
+
const stdoutStream = fs.createWriteStream(`${dest}/stdout.log`);
|
|
674
|
+
const stderrStream = fs.createWriteStream(`${dest}/stderr.log`);
|
|
675
|
+
|
|
662
676
|
this.browser
|
|
663
677
|
.newPage()
|
|
664
678
|
.then((page) => {
|
|
@@ -727,23 +741,24 @@ export class PM_Main extends PM {
|
|
|
727
741
|
page.exposeFunction(
|
|
728
742
|
"writeFileSync",
|
|
729
743
|
(fp: string, contents: string, testName: string) => {
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
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;
|
|
747
762
|
}
|
|
748
763
|
);
|
|
749
764
|
|
|
@@ -793,45 +808,44 @@ export class PM_Main extends PM {
|
|
|
793
808
|
return fileStreams2[uid].end();
|
|
794
809
|
});
|
|
795
810
|
|
|
796
|
-
page.exposeFunction("customclose", (p: string, testName: string) => {
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
fs.writeFileSync(
|
|
800
|
-
p + "/manifest.json",
|
|
801
|
-
JSON.stringify(Array.from(files[testName]))
|
|
802
|
-
);
|
|
803
|
-
delete files[testName];
|
|
804
|
-
|
|
805
|
-
// console.log("screenshots[testName]", screenshots[testName]);
|
|
806
|
-
Promise.all(screenshots[testName] || []).then(() => {
|
|
807
|
-
delete screenshots[testName];
|
|
808
|
-
// page.close();
|
|
809
|
-
// console.log("\t GOODBYE");
|
|
810
|
-
// whyIsNodeRunning();
|
|
811
|
-
});
|
|
811
|
+
// page.exposeFunction("customclose", (p: string, testName: string) => {
|
|
812
|
+
// // console.log("closing", p);
|
|
812
813
|
|
|
813
|
-
|
|
814
|
-
// p + "/manifest.json",
|
|
815
|
-
// // files.entries()
|
|
816
|
-
// JSON.stringify(Array.from(files[testName]))
|
|
817
|
-
// );
|
|
814
|
+
// console.log("\t GOODBYE customclose");
|
|
818
815
|
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
816
|
+
// fs.writeFileSync(
|
|
817
|
+
// p + "/manifest.json",
|
|
818
|
+
// JSON.stringify(Array.from(files[testName]))
|
|
819
|
+
// );
|
|
820
|
+
// delete files[testName];
|
|
824
821
|
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
// console.log("Delayed for 1 second.");
|
|
830
|
-
// page.close();
|
|
831
|
-
// }, 5000);
|
|
822
|
+
// // console.log("screenshots[testName]", screenshots[testName]);
|
|
823
|
+
// Promise.all(screenshots[testName] || []).then(() => {
|
|
824
|
+
// delete screenshots[testName];
|
|
825
|
+
// });
|
|
832
826
|
|
|
833
|
-
|
|
834
|
-
|
|
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
|
+
// });
|
|
835
849
|
|
|
836
850
|
page.exposeFunction("page", () => {
|
|
837
851
|
return page.mainFrame()._id;
|
|
@@ -884,24 +898,69 @@ export class PM_Main extends PM {
|
|
|
884
898
|
return page;
|
|
885
899
|
})
|
|
886
900
|
.then(async (page) => {
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
901
|
+
const close = () => {
|
|
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();
|
|
916
|
+
|
|
917
|
+
this.deregister(t);
|
|
918
|
+
stderrStream.close();
|
|
919
|
+
stdoutStream.close();
|
|
920
|
+
});
|
|
921
|
+
};
|
|
922
|
+
|
|
923
|
+
page.on("pageerror", (err: Error) => {
|
|
924
|
+
console.debug(`Error from ${t}: [${err.name}] `);
|
|
925
|
+
stderrStream.write(err.name);
|
|
926
|
+
|
|
927
|
+
if (err.cause) {
|
|
928
|
+
console.debug(`Error from ${t} cause: [${err.cause}] `);
|
|
929
|
+
stderrStream.write(err.cause);
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
if (err.stack) {
|
|
933
|
+
console.debug(`Error from stack ${t}: [${err.stack}] `);
|
|
934
|
+
stderrStream.write(err.stack);
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
console.debug(`Error from message ${t}: [${err.message}] `);
|
|
938
|
+
stderrStream.write(err.message);
|
|
939
|
+
// close();
|
|
940
|
+
});
|
|
941
|
+
page.on("console", (log: ConsoleMessage) => {
|
|
942
|
+
// console.debug(`Log from ${t}: [${log.text()}] `);
|
|
943
|
+
// console.debug(`Log from ${t}: [${JSON.stringify(log.location())}] `);
|
|
944
|
+
// console.debug(
|
|
945
|
+
// `Log from ${t}: [${JSON.stringify(log.stackTrace())}] `
|
|
946
|
+
// );
|
|
947
|
+
stdoutStream.write(log.text());
|
|
948
|
+
stdoutStream.write(JSON.stringify(log.location()));
|
|
949
|
+
stdoutStream.write(JSON.stringify(log.stackTrace()));
|
|
950
|
+
});
|
|
890
951
|
await page.goto(`file://${`${dest}.html`}`, {});
|
|
891
952
|
|
|
892
953
|
await page
|
|
893
954
|
.evaluate(evaluation)
|
|
894
|
-
.then(async (features:
|
|
955
|
+
.then(async ({ failed, features }: IFinalResults) => {
|
|
895
956
|
this.receiveFeatures(features, destFolder);
|
|
957
|
+
console.log(`${t} completed with ${failed} errors`);
|
|
896
958
|
})
|
|
897
959
|
.catch((e) => {
|
|
898
|
-
console.log(
|
|
899
|
-
console.log(e);
|
|
960
|
+
console.log(`${t} errored with`, e);
|
|
900
961
|
})
|
|
901
962
|
.finally(() => {
|
|
902
|
-
|
|
903
|
-
// page.close();
|
|
904
|
-
this.deregister(t);
|
|
963
|
+
close();
|
|
905
964
|
});
|
|
906
965
|
|
|
907
966
|
return page;
|
|
@@ -909,7 +968,6 @@ export class PM_Main extends PM {
|
|
|
909
968
|
};
|
|
910
969
|
|
|
911
970
|
receiveFeatures = (features: string[], destFolder: string) => {
|
|
912
|
-
console.log("this.receiveFeatures", features);
|
|
913
971
|
features
|
|
914
972
|
.reduce(async (mm, featureStringKey) => {
|
|
915
973
|
const accum = await mm;
|