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
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.90.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("globalThis-writeFileSync", filepath);
60
+ // console.log(testName, "writeFileSync", filepath, testName);
61
61
 
62
62
  // Create directories if they don't exist
63
- const dir = path.dirname(filepath.split("/").slice(0, -1).join("/"));
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
- if (!files[testName]) {
127
- files[testName] = new Set();
128
- }
129
-
130
- fs.writeFileSync(
131
- p + "/manifest.json",
132
- JSON.stringify(Array.from(files[testName]))
133
- );
134
- delete files[testName];
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
- return this.launchWebSideCar(
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: string[]) => {
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("catch", e);
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
- name: dest,
399
- ports: [].toString(),
400
- fs: destFolder,
401
- browserWSEndpoint: this.browser.wsEndpoint(),
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
- fs.writeFileSync(
525
- p + "/manifest.json",
526
- JSON.stringify(Array.from(files[testName]))
527
- );
528
- delete files[testName];
529
-
530
- Promise.all(screenshots[testName] || []).then(() => {
531
- delete screenshots[testName];
532
- // page.close();
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
- const dir = path.dirname(fp);
741
-
742
- fs.mkdirSync(dir, {
743
- recursive: true,
744
- });
745
-
746
- const p = new Promise<string>(async (res, rej) => {
747
- fs.writeFileSync(fp, contents);
748
- res(fp);
749
- });
750
- doneFileStream2.push(p);
751
-
752
- if (!files[testName]) {
753
- files[testName] = new Set();
754
- }
755
- files[testName].add(fp);
756
- return p;
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
- // console.log("closing", p);
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
- // globalThis["writeFileSync"](
824
- // p + "/manifest.json",
825
- // // files.entries()
826
- // JSON.stringify(Array.from(files[testName]))
827
- // );
814
+ // console.log("\t GOODBYE customclose");
828
815
 
829
- // console.log("closing doneFileStream2", doneFileStream2);
830
- // console.log("closing doneFileStream2", doneFileStream2);
831
- // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
832
- // page.close();
833
- // });
816
+ // fs.writeFileSync(
817
+ // p + "/manifest.json",
818
+ // JSON.stringify(Array.from(files[testName]))
819
+ // );
820
+ // delete files[testName];
834
821
 
835
- // Promise.all(screenshots).then(() => {
836
- // page.close();
837
- // });
838
- // setTimeout(() => {
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
- // return page.close();
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
- console.log("evaluation complete.", dest);
899
- page.off("pageerror");
900
- page.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();
901
916
 
902
- this.deregister(t);
903
- stderrStream.close();
904
- stdoutStream.close();
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: string[]) => {
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("evaluation failed.", dest);
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
- // console.error(`stderr: ${data}`);
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: false,
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
  });
@@ -29,7 +29,7 @@ export default <ITestShape extends IBaseTest>(
29
29
  testSpecifications,
30
30
  testImplementations,
31
31
  {
32
- beforeAll(x) {
32
+ beforeAll: (x) => {
33
33
  // process.parentPort.postMessage(
34
34
  // `/docs/web/src/ClassicalComponent/test.html`
35
35
  // );
@@ -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
- const x = React.createElement(subject);
35
- console.log("react-element", x);
36
- resolve(x);
40
+ resolve(React.createElement(s));
37
41
  });
42
+ // return whenCB(s);
38
43
  },
39
- andWhen: function (s: IStore, whenCB): Promise<ISelection> {
40
- return whenCB(s);
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
- ...baseInterface,
23
- ...testInterface,
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 (initialProps, artificer): Promise<ISubject> => {
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
- // Ignore these type errors
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
- // beforeEach: async (
83
- // s,
84
- // initializer,
85
- // testResource,
86
- // artificer,
87
- // initialValues
88
- // ): Promise<IStore> => {
89
- // return new Promise((resolve, rej) => {
90
- // console.log("beforeEach" + TesterantoComponent);
91
-
92
- // // const domRoot = ReactDom.createRoot(htmlElement);
93
- // // // Ignore these type errors
94
- // // domRoot.render(
95
- // // createElement(
96
- // // TesterantoComponent,
97
- // // {
98
- // // ...initializer,
99
- // // done: (reactElement) => {
100
- // // resolve({
101
- // // htmlElement,
102
- // // reactElement,
103
- // // domRoot,
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
  },