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.
Files changed (60) hide show
  1. package/dist/common/src/Node.js +5 -3
  2. package/dist/common/src/PM/main.js +102 -92
  3. package/dist/common/src/Project.js +5 -3
  4. package/dist/common/src/Puppeteer.js +1 -3
  5. package/dist/common/src/SubPackages/puppeteer.js +1 -1
  6. package/dist/common/src/SubPackages/react/jsx/index.js +14 -6
  7. package/dist/common/src/SubPackages/react/jsx/node.js +7 -2
  8. package/dist/common/src/SubPackages/react-dom/component/web.js +13 -39
  9. package/dist/common/src/SubPackages/react-test-renderer/component/interface.js +2 -10
  10. package/dist/common/src/Web.js +25 -21
  11. package/dist/common/src/esbuildConfigs/inputFilesPlugin.js +0 -2
  12. package/dist/common/src/lib/abstractBase.js +29 -184
  13. package/dist/common/src/lib/basebuilder.js +1 -11
  14. package/dist/common/src/lib/classBuilder.js +1 -1
  15. package/dist/common/src/lib/core.js +8 -28
  16. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  17. package/dist/module/src/Node.js +5 -3
  18. package/dist/module/src/PM/main.js +102 -92
  19. package/dist/module/src/Project.js +5 -3
  20. package/dist/module/src/Puppeteer.js +1 -3
  21. package/dist/module/src/SubPackages/puppeteer.js +1 -1
  22. package/dist/module/src/SubPackages/react/jsx/index.js +14 -6
  23. package/dist/module/src/SubPackages/react/jsx/node.js +7 -2
  24. package/dist/module/src/SubPackages/react-dom/component/web.js +13 -39
  25. package/dist/module/src/SubPackages/react-test-renderer/component/interface.js +2 -10
  26. package/dist/module/src/Web.js +25 -21
  27. package/dist/module/src/esbuildConfigs/inputFilesPlugin.js +0 -2
  28. package/dist/module/src/lib/abstractBase.js +29 -184
  29. package/dist/module/src/lib/basebuilder.js +1 -11
  30. package/dist/module/src/lib/classBuilder.js +1 -1
  31. package/dist/module/src/lib/core.js +8 -28
  32. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  33. package/dist/prebuild/build-tests.mjs +4 -3
  34. package/dist/prebuild/run-tests.mjs +30 -66
  35. package/dist/types/src/Node.d.ts +4 -1
  36. package/dist/types/src/PM/main.d.ts +2 -1
  37. package/dist/types/src/SubPackages/react/jsx/node.d.ts +1 -1
  38. package/dist/types/src/SubPackages/react-test-renderer/component/interface.d.ts +1 -1
  39. package/dist/types/src/Web.d.ts +2 -2
  40. package/dist/types/src/lib/abstractBase.d.ts +6 -2
  41. package/dist/types/src/lib/core.d.ts +3 -3
  42. package/dist/types/src/lib/types.d.ts +5 -1
  43. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  44. package/package.json +13 -13
  45. package/src/Node.ts +6 -3
  46. package/src/PM/main.ts +121 -111
  47. package/src/Project.ts +6 -5
  48. package/src/Puppeteer.ts +1 -3
  49. package/src/SubPackages/puppeteer.ts +1 -1
  50. package/src/SubPackages/react/jsx/index.ts +15 -7
  51. package/src/SubPackages/react/jsx/node.ts +6 -5
  52. package/src/SubPackages/react-dom/component/web.ts +28 -51
  53. package/src/SubPackages/react-test-renderer/component/interface.ts +4 -11
  54. package/src/Web.ts +45 -23
  55. package/src/esbuildConfigs/inputFilesPlugin.ts +0 -3
  56. package/src/lib/abstractBase.ts +38 -188
  57. package/src/lib/basebuilder.ts +1 -12
  58. package/src/lib/classBuilder.ts +2 -1
  59. package/src/lib/core.ts +17 -29
  60. package/src/lib/types.ts +3 -1
@@ -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
- await Promise.all(testConfig[3].map((sidecar) => {
84
+ const webSideCares = [];
85
+ await Promise.all(testConfig[3].map(async (sidecar) => {
85
86
  if (sidecar[1] === "web") {
86
- return this.launchWebSideCar(sidecar[0], destinationOfRuntime(sidecar[0], "web", this.configs), sidecar);
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("catch", e);
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
- name: dest,
120
- ports: [].toString(),
121
- fs: destFolder,
122
- browserWSEndpoint: this.browser.wsEndpoint(),
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
- fs.writeFileSync(p + "/manifest.json", JSON.stringify(Array.from(files[testName])));
210
- delete files[testName];
211
- Promise.all(screenshots[testName] || []).then(() => {
212
- delete screenshots[testName];
213
- // page.close();
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
- const dir = path.dirname(fp);
372
- fs.mkdirSync(dir, {
373
- recursive: true,
374
- });
375
- const p = new Promise(async (res, rej) => {
376
- fs.writeFileSync(fp, contents);
377
- res(fp);
378
- });
379
- doneFileStream2.push(p);
380
- if (!files[testName]) {
381
- files[testName] = new Set();
382
- }
383
- files[testName].add(fp);
384
- return p;
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
- // console.log("closing", p);
421
- fs.writeFileSync(p + "/manifest.json", JSON.stringify(Array.from(files[testName])));
422
- delete files[testName];
423
- // console.log("screenshots[testName]", screenshots[testName]);
424
- Promise.all(screenshots[testName] || []).then(() => {
425
- delete screenshots[testName];
426
- // page.close();
427
- // console.log("\t GOODBYE");
428
- // whyIsNodeRunning();
429
- });
430
- // globalThis["writeFileSync"](
431
- // p + "/manifest.json",
432
- // // files.entries()
433
- // JSON.stringify(Array.from(files[testName]))
434
- // );
435
- // console.log("closing doneFileStream2", doneFileStream2);
436
- // console.log("closing doneFileStream2", doneFileStream2);
437
- // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
438
- // page.close();
439
- // });
440
- // Promise.all(screenshots).then(() => {
441
- // page.close();
442
- // });
443
- // setTimeout(() => {
444
- // console.log("Delayed for 1 second.");
445
- // page.close();
446
- // }, 5000);
447
- // return page.close();
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
- console.log("evaluation complete.", dest);
482
- page.off("pageerror");
483
- page.close();
484
- this.deregister(t);
485
- stderrStream.close();
486
- stdoutStream.close();
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("evaluation failed.", dest);
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("globalThis-writeFileSync", filepath);
607
+ // console.log(testName, "writeFileSync", filepath, testName);
603
608
  // Create directories if they don't exist
604
- const dir = path.dirname(filepath.split("/").slice(0, -1).join("/"));
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
- if (!files[testName]) {
650
- files[testName] = new Set();
651
- }
652
- fs.writeFileSync(p + "/manifest.json", JSON.stringify(Array.from(files[testName])));
653
- delete files[testName];
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
- // console.error(`stderr: ${data}`);
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: false,
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
- const x = React.createElement(subject);
12
- console.log("react-element", x);
13
- resolve(x);
17
+ resolve(React.createElement(s));
14
18
  });
19
+ // return whenCB(s);
15
20
  },
16
- andWhen: function (s, whenCB) {
17
- return whenCB(s);
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, Object.assign(Object.assign({}, baseInterface), testInterface));
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 (initialProps, artificer) => {
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
- // Ignore these type errors
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
- // beforeEach: async (
34
- // s,
35
- // initializer,
36
- // testResource,
37
- // artificer,
38
- // initialValues
39
- // ): Promise<IStore> => {
40
- // return new Promise((resolve, rej) => {
41
- // console.log("beforeEach" + TesterantoComponent);
42
- // // const domRoot = ReactDom.createRoot(htmlElement);
43
- // // // Ignore these type errors
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(props) {
6
- const p = props.props;
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
  };
@@ -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
  });