testeranto 0.75.0 → 0.79.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 (257) hide show
  1. package/.eslintrc.js +5 -2
  2. package/Bundle.Dockerfile +52 -0
  3. package/README.md +25 -24
  4. package/build-tests.ts +16 -0
  5. package/dist/common/build-tests.js +38 -0
  6. package/dist/common/init-docs.js +8 -0
  7. package/dist/common/run-tests.js +34 -0
  8. package/dist/common/src/Aider.js +96 -0
  9. package/dist/common/src/Init.js +10 -0
  10. package/dist/common/{Node.js → src/Node.js} +1 -0
  11. package/dist/common/src/PM/index.js +7 -0
  12. package/dist/common/{PM → src/PM}/main.js +287 -10
  13. package/dist/common/{PM → src/PM}/node.js +4 -0
  14. package/dist/common/{PM → src/PM}/web.js +3 -0
  15. package/dist/common/{Project.js → src/Project.js} +15 -57
  16. package/dist/common/{Puppeteer.js → src/Puppeteer.js} +65 -26
  17. package/dist/common/{SubPackages → src/SubPackages}/react-dom/component/web.js +5 -25
  18. package/dist/common/src/SubPackages/react-dom/jsx/web.js +117 -0
  19. package/dist/common/{SubPackages/react-test-renderer/component/index.js → src/SubPackages/react-test-renderer/component/interface.js} +0 -20
  20. package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/component/node.js +2 -2
  21. package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/component/web.js +2 -2
  22. package/dist/common/{Types.js → src/Types.js} +0 -2
  23. package/dist/common/{esbuildConfigs → src/esbuildConfigs}/index.js +1 -0
  24. package/dist/common/src/esbuildConfigs/inputFilesPlugin.js +52 -0
  25. package/dist/common/{esbuildConfigs → src/esbuildConfigs}/node.js +5 -1
  26. package/dist/common/src/esbuildConfigs/report.js +14 -0
  27. package/dist/common/{esbuildConfigs → src/esbuildConfigs}/web.js +3 -1
  28. package/dist/common/src/lib/abstractBase.js +581 -0
  29. package/dist/common/{lib → src/lib}/basebuilder.js +12 -38
  30. package/dist/common/{lib → src/lib}/classBuilder.js +1 -3
  31. package/dist/common/{lib → src/lib}/core.js +3 -5
  32. package/dist/common/src/lib/types.js +2 -0
  33. package/dist/common/src/utils.js +16 -0
  34. package/dist/common/testeranto.js +15 -0
  35. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  36. package/dist/module/build-tests.js +10 -0
  37. package/dist/module/init-docs.js +3 -0
  38. package/dist/module/run-tests.js +6 -0
  39. package/dist/module/src/Aider.js +89 -0
  40. package/dist/module/src/Init.js +5 -0
  41. package/dist/module/{Node.js → src/Node.js} +1 -0
  42. package/dist/module/src/PM/index.js +3 -0
  43. package/dist/module/src/PM/main.js +617 -0
  44. package/dist/module/{PM → src/PM}/node.js +4 -0
  45. package/dist/module/{PM → src/PM}/web.js +3 -0
  46. package/dist/module/{Project.js → src/Project.js} +15 -57
  47. package/dist/module/{Puppeteer.js → src/Puppeteer.js} +65 -26
  48. package/dist/module/{SubPackages → src/SubPackages}/react-dom/component/web.js +5 -25
  49. package/dist/module/src/SubPackages/react-dom/jsx/web.js +89 -0
  50. package/dist/module/{SubPackages/react-test-renderer/component/index.js → src/SubPackages/react-test-renderer/component/interface.js} +0 -20
  51. package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/component/node.js +1 -1
  52. package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/component/web.js +1 -1
  53. package/dist/module/{esbuildConfigs → src/esbuildConfigs}/index.js +1 -0
  54. package/dist/module/src/esbuildConfigs/inputFilesPlugin.js +47 -0
  55. package/dist/module/{esbuildConfigs → src/esbuildConfigs}/node.js +5 -1
  56. package/dist/module/src/esbuildConfigs/report.js +14 -0
  57. package/dist/module/{esbuildConfigs → src/esbuildConfigs}/web.js +3 -1
  58. package/dist/module/src/lib/abstractBase.js +573 -0
  59. package/dist/module/{lib → src/lib}/basebuilder.js +12 -38
  60. package/dist/module/{lib → src/lib}/classBuilder.js +1 -3
  61. package/dist/module/{lib → src/lib}/core.js +3 -5
  62. package/dist/module/src/utils.js +9 -0
  63. package/dist/module/testeranto.js +13 -0
  64. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  65. package/dist/types/build-tests.d.ts +3 -0
  66. package/dist/types/init-docs.d.ts +2 -0
  67. package/dist/types/run-tests.d.ts +2 -0
  68. package/dist/types/src/Aider.d.ts +1 -0
  69. package/dist/types/src/Init.d.ts +2 -0
  70. package/dist/types/src/Node.d.ts +6 -0
  71. package/dist/types/{PM → src/PM}/index.d.ts +3 -2
  72. package/dist/types/{PM → src/PM}/main.d.ts +6 -3
  73. package/dist/types/{PM → src/PM}/node.d.ts +2 -0
  74. package/dist/types/{PM → src/PM}/web.d.ts +1 -0
  75. package/dist/types/{Project.d.ts → src/Project.d.ts} +1 -1
  76. package/dist/types/src/Puppeteer.d.ts +2 -0
  77. package/dist/types/src/SubPackages/puppeteer.d.ts +6 -0
  78. package/dist/types/{SubPackages → src/SubPackages}/react/component/node.d.ts +1 -1
  79. package/dist/types/{SubPackages → src/SubPackages}/react/component/web.d.ts +1 -1
  80. package/dist/types/src/SubPackages/react/jsx/node.d.ts +4 -0
  81. package/dist/types/src/SubPackages/react/jsx/web.d.ts +4 -0
  82. package/dist/types/{SubPackages → src/SubPackages}/react-dom/component/node.d.ts +2 -2
  83. package/dist/types/src/SubPackages/react-dom/component/web.d.ts +11 -0
  84. package/dist/types/src/SubPackages/react-dom/jsx/node.d.ts +6 -0
  85. package/dist/types/src/SubPackages/react-dom/jsx/web.d.ts +5 -0
  86. package/dist/types/src/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +5 -0
  87. package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/component/index.d.ts +0 -7
  88. package/dist/types/src/SubPackages/react-test-renderer/component/interface.d.ts +9 -0
  89. package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/component/node.d.ts +1 -2
  90. package/dist/types/src/SubPackages/react-test-renderer/component/web.d.ts +3 -0
  91. package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/fc/node.d.ts +1 -1
  92. package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/fc/web.d.ts +1 -1
  93. package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/jsx/node.d.ts +1 -2
  94. package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/jsx/web.d.ts +1 -2
  95. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/node.d.ts +4 -0
  96. package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/web.d.ts +4 -0
  97. package/dist/types/src/Types.d.ts +51 -0
  98. package/dist/types/src/Web.d.ts +6 -0
  99. package/dist/types/src/esbuildConfigs/inputFilesPlugin.d.ts +5 -0
  100. package/dist/types/{lib → src/lib}/abstractBase.d.ts +8 -8
  101. package/dist/types/{lib → src/lib}/basebuilder.d.ts +1 -1
  102. package/dist/types/{lib → src/lib}/classBuilder.d.ts +1 -1
  103. package/dist/types/{lib → src/lib}/core.d.ts +1 -1
  104. package/dist/types/{lib → src/lib}/index.d.ts +5 -5
  105. package/dist/types/{lib → src/lib}/types.d.ts +15 -15
  106. package/dist/types/src/utils.d.ts +2 -0
  107. package/dist/types/testeranto.d.ts +16 -0
  108. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  109. package/docker-compose.yml +37 -0
  110. package/init-docs.ts +5 -0
  111. package/package.json +72 -25
  112. package/run-tests.ts +9 -0
  113. package/src/Aider.ts +125 -0
  114. package/src/Init.ts +20 -0
  115. package/src/Node.ts +31 -2
  116. package/src/PM/index.ts +7 -84
  117. package/src/PM/main.ts +400 -16
  118. package/src/PM/node.ts +6 -0
  119. package/src/PM/web.ts +4 -0
  120. package/src/Project.ts +33 -84
  121. package/src/Puppeteer.ts +115 -62
  122. package/src/SubPackages/react-dom/component/web.ts +10 -30
  123. package/src/SubPackages/react-dom/jsx/web.ts +110 -76
  124. package/src/SubPackages/react-test-renderer/component/index.ts +0 -66
  125. package/src/SubPackages/react-test-renderer/component/interface.ts +48 -0
  126. package/src/SubPackages/react-test-renderer/component/node.ts +2 -1
  127. package/src/SubPackages/react-test-renderer/component/web.ts +2 -1
  128. package/src/Types.ts +138 -29
  129. package/src/Web.ts +32 -2
  130. package/src/esbuildConfigs/index.ts +1 -0
  131. package/src/esbuildConfigs/inputFilesPlugin.ts +67 -0
  132. package/src/esbuildConfigs/node.ts +4 -2
  133. package/src/esbuildConfigs/report.ts +13 -13
  134. package/src/esbuildConfigs/web.ts +4 -0
  135. package/src/lib/abstractBase.ts +366 -36
  136. package/src/lib/basebuilder.ts +26 -52
  137. package/src/lib/classBuilder.ts +14 -2
  138. package/src/lib/core.ts +18 -7
  139. package/src/lib/index.ts +115 -7
  140. package/src/lib/types.ts +143 -37
  141. package/src/utils.ts +15 -0
  142. package/testeranto.ts +13 -0
  143. package/tsconfig.common.json +12 -4
  144. package/tsconfig.json +9 -3
  145. package/tsconfig.module.json +2 -3
  146. package/tsconfig.types.json +1 -2
  147. package/dist/common/Features.js +0 -84
  148. package/dist/common/PM/index.js +0 -71
  149. package/dist/common/Reporter.js +0 -119
  150. package/dist/common/Scheduler.js +0 -1
  151. package/dist/common/SubPackages/react-dom/jsx/web.js +0 -93
  152. package/dist/common/esbuildConfigs/report.js +0 -13
  153. package/dist/common/lib/abstractBase.js +0 -348
  154. package/dist/common/preload.js +0 -15
  155. package/dist/common/report.html.js +0 -31
  156. package/dist/module/Features.js +0 -73
  157. package/dist/module/PM/index.js +0 -67
  158. package/dist/module/PM/main.js +0 -340
  159. package/dist/module/Reporter.js +0 -114
  160. package/dist/module/Scheduler.js +0 -1
  161. package/dist/module/SubPackages/react-dom/jsx/web.js +0 -65
  162. package/dist/module/Types.js +0 -3
  163. package/dist/module/esbuildConfigs/report.js +0 -11
  164. package/dist/module/lib/abstractBase.js +0 -340
  165. package/dist/module/preload.js +0 -15
  166. package/dist/module/report.html.js +0 -29
  167. package/dist/prebuild/Report.css +0 -11358
  168. package/dist/prebuild/Report.js +0 -37585
  169. package/dist/types/Features.d.ts +0 -68
  170. package/dist/types/Node.d.ts +0 -6
  171. package/dist/types/SubPackages/puppeteer.d.ts +0 -6
  172. package/dist/types/SubPackages/react/jsx/node.d.ts +0 -4
  173. package/dist/types/SubPackages/react/jsx/web.d.ts +0 -4
  174. package/dist/types/SubPackages/react-dom/component/web.d.ts +0 -5
  175. package/dist/types/SubPackages/react-dom/jsx/node.d.ts +0 -6
  176. package/dist/types/SubPackages/react-dom/jsx/web.d.ts +0 -5
  177. package/dist/types/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +0 -5
  178. package/dist/types/SubPackages/react-test-renderer/component/web.d.ts +0 -4
  179. package/dist/types/SubPackages/react-test-renderer/jsx-promised/node.d.ts +0 -5
  180. package/dist/types/SubPackages/react-test-renderer/jsx-promised/web.d.ts +0 -5
  181. package/dist/types/Types.d.ts +0 -50
  182. package/dist/types/Web.d.ts +0 -6
  183. package/dist/types/esbuildConfigs/report.d.ts +0 -4
  184. package/dist/types/preload.d.ts +0 -0
  185. package/dist/types/report.html.d.ts +0 -2
  186. package/electronBuild.ts +0 -32
  187. package/src/Features.ts +0 -118
  188. package/src/Report.tsx +0 -521
  189. package/src/Reporter.ts +0 -134
  190. package/src/Scheduler.ts +0 -0
  191. package/src/preload.ts +0 -17
  192. package/src/report.html.ts +0 -29
  193. package/tests/Rectangle.test.ts +0 -189
  194. /package/dist/common/{SubPackages → src/SubPackages}/puppeteer.js +0 -0
  195. /package/dist/common/{SubPackages → src/SubPackages}/react/component/node.js +0 -0
  196. /package/dist/common/{SubPackages → src/SubPackages}/react/component/web.js +0 -0
  197. /package/dist/common/{SubPackages → src/SubPackages}/react/jsx/index.js +0 -0
  198. /package/dist/common/{SubPackages → src/SubPackages}/react/jsx/node.js +0 -0
  199. /package/dist/common/{SubPackages → src/SubPackages}/react/jsx/web.js +0 -0
  200. /package/dist/common/{SubPackages → src/SubPackages}/react-dom/component/node.js +0 -0
  201. /package/dist/common/{SubPackages → src/SubPackages}/react-dom/jsx/index.js +0 -0
  202. /package/dist/common/{SubPackages → src/SubPackages}/react-dom/jsx/node.js +0 -0
  203. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/MemoExoticComponent/node.js +0 -0
  204. /package/dist/common/{lib/types.js → src/SubPackages/react-test-renderer/component/index.js} +0 -0
  205. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/fc/node.js +0 -0
  206. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/fc/web.js +0 -0
  207. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/jsx/index.js +0 -0
  208. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/jsx/node.js +0 -0
  209. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/jsx/web.js +0 -0
  210. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/index.js +0 -0
  211. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/node.js +0 -0
  212. /package/dist/common/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/web.js +0 -0
  213. /package/dist/common/{Web.js → src/Web.js} +0 -0
  214. /package/dist/common/{esbuildConfigs → src/esbuildConfigs}/features.js +0 -0
  215. /package/dist/common/{esbuildConfigs → src/esbuildConfigs}/tests.js +0 -0
  216. /package/dist/common/{lib → src/lib}/index.js +0 -0
  217. /package/dist/common/{puppeteerConfiger.js → src/puppeteerConfiger.js} +0 -0
  218. /package/dist/common/{web.html.js → src/web.html.js} +0 -0
  219. /package/dist/module/{SubPackages → src/SubPackages}/puppeteer.js +0 -0
  220. /package/dist/module/{SubPackages → src/SubPackages}/react/component/node.js +0 -0
  221. /package/dist/module/{SubPackages → src/SubPackages}/react/component/web.js +0 -0
  222. /package/dist/module/{SubPackages → src/SubPackages}/react/jsx/index.js +0 -0
  223. /package/dist/module/{SubPackages → src/SubPackages}/react/jsx/node.js +0 -0
  224. /package/dist/module/{SubPackages → src/SubPackages}/react/jsx/web.js +0 -0
  225. /package/dist/module/{SubPackages → src/SubPackages}/react-dom/component/node.js +0 -0
  226. /package/dist/module/{SubPackages → src/SubPackages}/react-dom/jsx/index.js +0 -0
  227. /package/dist/module/{SubPackages → src/SubPackages}/react-dom/jsx/node.js +0 -0
  228. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/MemoExoticComponent/node.js +0 -0
  229. /package/dist/module/{lib/types.js → src/SubPackages/react-test-renderer/component/index.js} +0 -0
  230. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/fc/node.js +0 -0
  231. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/fc/web.js +0 -0
  232. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/jsx/index.js +0 -0
  233. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/jsx/node.js +0 -0
  234. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/jsx/web.js +0 -0
  235. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/index.js +0 -0
  236. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/node.js +0 -0
  237. /package/dist/module/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/web.js +0 -0
  238. /package/dist/{types/Puppeteer.d.ts → module/src/Types.js} +0 -0
  239. /package/dist/module/{Web.js → src/Web.js} +0 -0
  240. /package/dist/module/{esbuildConfigs → src/esbuildConfigs}/features.js +0 -0
  241. /package/dist/module/{esbuildConfigs → src/esbuildConfigs}/tests.js +0 -0
  242. /package/dist/module/{lib → src/lib}/index.js +0 -0
  243. /package/dist/{types/Reporter.d.ts → module/src/lib/types.js} +0 -0
  244. /package/dist/module/{puppeteerConfiger.js → src/puppeteerConfiger.js} +0 -0
  245. /package/dist/module/{web.html.js → src/web.html.js} +0 -0
  246. /package/dist/types/{SubPackages → src/SubPackages}/react/jsx/index.d.ts +0 -0
  247. /package/dist/types/{SubPackages → src/SubPackages}/react-dom/jsx/index.d.ts +0 -0
  248. /package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/jsx/index.d.ts +0 -0
  249. /package/dist/types/{SubPackages → src/SubPackages}/react-test-renderer/jsx-promised/index.d.ts +0 -0
  250. /package/dist/types/{esbuildConfigs → src/esbuildConfigs}/features.d.ts +0 -0
  251. /package/dist/types/{esbuildConfigs → src/esbuildConfigs}/index.d.ts +0 -0
  252. /package/dist/types/{esbuildConfigs → src/esbuildConfigs}/node.d.ts +0 -0
  253. /package/dist/types/{Scheduler.d.ts → src/esbuildConfigs/report.d.ts} +0 -0
  254. /package/dist/types/{esbuildConfigs → src/esbuildConfigs}/tests.d.ts +0 -0
  255. /package/dist/types/{esbuildConfigs → src/esbuildConfigs}/web.d.ts +0 -0
  256. /package/dist/types/{puppeteerConfiger.d.ts → src/puppeteerConfiger.d.ts} +0 -0
  257. /package/dist/types/{web.html.d.ts → src/web.html.d.ts} +0 -0
package/src/PM/main.ts CHANGED
@@ -1,12 +1,13 @@
1
1
  import fs from "fs";
2
2
  import path from "path";
3
- import puppeteer, { ScreenshotOptions } from "puppeteer-core";
3
+ import puppeteer, { Page, ScreenshotOptions } from "puppeteer-core";
4
4
  import { PassThrough } from "stream";
5
5
 
6
- import { ITLog } from "../lib";
7
- import { IBuiltConfig } from "../lib/types";
6
+ import { IBuiltConfig, ITestTypes } from "../lib/types";
8
7
 
9
8
  import { PM } from "./index.js";
9
+ import { destinationOfRuntime } from "../utils.js";
10
+ import { ITLog } from "../lib/index.js";
10
11
 
11
12
  type IFPaths = string[];
12
13
 
@@ -16,6 +17,9 @@ const files: Record<string, Set<string>> = {}; // = new Set<string>();
16
17
  const screenshots: Record<string, Promise<Uint8Array>[]> = {};
17
18
 
18
19
  export class PM_Main extends PM {
20
+ customScreenShot(opts: object) {
21
+ throw new Error("Method not implemented.");
22
+ }
19
23
  configs: IBuiltConfig;
20
24
  ports: Record<number, boolean>;
21
25
  queue: any[];
@@ -43,6 +47,8 @@ export class PM_Main extends PM {
43
47
  contents: string,
44
48
  testName: string
45
49
  ) => {
50
+ console.log("globalThis-writeFileSync", filepath);
51
+
46
52
  // Create directories if they don't exist
47
53
  const dir = path.dirname(filepath.split("/").slice(0, -1).join("/"));
48
54
 
@@ -78,6 +84,46 @@ export class PM_Main extends PM {
78
84
  fileStreams3[uid].end();
79
85
  };
80
86
 
87
+ globalThis["customScreenShot"] = async (
88
+ opts: { path: string },
89
+ page: Page
90
+ ) => {
91
+ // // fileStreams3[uid].write(contents);
92
+ // // console.log("asd", opts.path.split("/").slice(0, -1).join("/"));
93
+
94
+ // // const dir = path.dirname(opts.path.split("/").slice(0, -1).join("/"));
95
+ // // console.log("dir", dir);
96
+ // fs.mkdirSync(opts.path.split("/").slice(0, -1).join("/"), {
97
+ // recursive: true,
98
+ // });
99
+
100
+ // return page.screenshot(opts);
101
+
102
+ console.log("main.ts node custom-screenshot", page);
103
+ const p = opts.path as string;
104
+ const dir = path.dirname(p);
105
+ fs.mkdirSync(dir, {
106
+ recursive: true,
107
+ });
108
+ if (!files[opts.path]) {
109
+ files[opts.path] = new Set();
110
+ }
111
+ files[opts.path].add(opts.path as string);
112
+
113
+ const sPromise = page.screenshot({
114
+ ...opts,
115
+ path: p,
116
+ });
117
+
118
+ if (!screenshots[opts.path]) {
119
+ screenshots[opts.path] = [];
120
+ }
121
+ screenshots[opts.path].push(sPromise);
122
+
123
+ await sPromise;
124
+ return sPromise;
125
+ };
126
+
81
127
  globalThis["customclose"] = (p: string, testName: string) => {
82
128
  if (!files[testName]) {
83
129
  files[testName] = new Set();
@@ -117,7 +163,7 @@ export class PM_Main extends PM {
117
163
  }
118
164
 
119
165
  async startPuppeteer(options: any, destfolder: string): Promise<any> {
120
- this.browser = await puppeteer.launch(options);
166
+ this.browser = (await puppeteer.launch(options)) as any;
121
167
  return this.browser;
122
168
  }
123
169
 
@@ -151,9 +197,11 @@ export class PM_Main extends PM {
151
197
  const openPorts = Object.entries(this.ports).filter(
152
198
  ([portnumber, portopen]) => portopen
153
199
  );
200
+ console.log("openPorts", openPorts);
154
201
  if (openPorts.length >= testConfigResource.ports) {
155
202
  for (let i = 0; i < testConfigResource.ports; i++) {
156
203
  portsToUse.push(openPorts[i][0]);
204
+
157
205
  this.ports[openPorts[i][0]] = false; // port is now closed
158
206
  }
159
207
 
@@ -162,7 +210,7 @@ export class PM_Main extends PM {
162
210
  name: src,
163
211
  // ports: [3333],
164
212
  ports: portsToUse,
165
- fs: ".",
213
+ fs: destFolder,
166
214
  browserWSEndpoint: this.browser.wsEndpoint(),
167
215
  });
168
216
  } else {
@@ -176,6 +224,26 @@ export class PM_Main extends PM {
176
224
 
177
225
  const builtfile = dest + ".mjs";
178
226
 
227
+ await Promise.all(
228
+ testConfig[3].map((sidecar) => {
229
+ if (sidecar[1] === "web") {
230
+ return this.launchWebSideCar(
231
+ sidecar[0],
232
+ destinationOfRuntime(sidecar[0], "web", this.configs),
233
+ sidecar
234
+ );
235
+ }
236
+
237
+ if (sidecar[1] === "node") {
238
+ return this.launchNodeSideCar(
239
+ sidecar[0],
240
+ destinationOfRuntime(sidecar[0], "node", this.configs),
241
+ sidecar
242
+ );
243
+ }
244
+ })
245
+ );
246
+
179
247
  this.server[builtfile] = await import(
180
248
  `${builtfile}?cacheBust=${Date.now()}`
181
249
  ).then((module) => {
@@ -184,6 +252,7 @@ export class PM_Main extends PM {
184
252
  .receiveTestResourceConfig(argz)
185
253
  .then((x) => {
186
254
  console.log("then", x);
255
+
187
256
  return x;
188
257
  })
189
258
  .catch((e) => {
@@ -192,14 +261,309 @@ export class PM_Main extends PM {
192
261
  });
193
262
  });
194
263
 
264
+ console.log("portsToUse", portsToUse);
265
+ for (let i = 0; i <= portsToUse.length; i++) {
266
+ if (portsToUse[i]) {
267
+ this.ports[portsToUse[i]] = "true"; //port is open again
268
+ }
269
+ }
270
+ };
271
+
272
+ launchWebSideCar = async (
273
+ src: string,
274
+ dest: string,
275
+ testConfig: ITestTypes
276
+ ) => {
277
+ const d = dest + ".mjs";
278
+ console.log("launchWebSideCar", src, dest, d);
279
+ const destFolder = dest.replace(".mjs", "");
280
+ const webArgz = JSON.stringify({
281
+ name: dest,
282
+ ports: [].toString(),
283
+ fs: destFolder,
284
+ browserWSEndpoint: this.browser.wsEndpoint(),
285
+ });
286
+
287
+ const evaluation = `
288
+ console.log("importing ${dest}.mjs");
289
+ import('${dest}.mjs').then(async (x) => {
290
+ console.log("imported", x.default);
291
+ })`;
292
+
293
+ const fileStreams2: fs.WriteStream[] = [];
294
+ const doneFileStream2: Promise<any>[] = [];
295
+
296
+ return new Promise((res, rej) => {
297
+ this.browser
298
+ .newPage()
299
+ .then((page) => {
300
+ page.on("console", (msg) => {
301
+ console.log("web > ", msg.args(), msg.text());
302
+ // for (let i = 0; i < msg._args.length; ++i)
303
+ // console.log(`${i}: ${msg._args[i]}`);
304
+ });
305
+
306
+ page.exposeFunction(
307
+ "custom-screenshot",
308
+ async (ssOpts: ScreenshotOptions, testName: string) => {
309
+ console.log("main.ts browser custom-screenshot", testName);
310
+ const p = ssOpts.path as string;
311
+ const dir = path.dirname(p);
312
+ fs.mkdirSync(dir, {
313
+ recursive: true,
314
+ });
315
+ files[testName].add(ssOpts.path as string);
316
+
317
+ const sPromise = page.screenshot({
318
+ ...ssOpts,
319
+ path: p,
320
+ });
321
+
322
+ if (!screenshots[testName]) {
323
+ screenshots[testName] = [];
324
+ }
325
+ screenshots[testName].push(sPromise);
326
+ // sPromise.then(())
327
+ await sPromise;
328
+ return sPromise;
329
+ // page.evaluate(`window["screenshot done"]`);
330
+ }
331
+ );
332
+
333
+ page.exposeFunction(
334
+ "writeFileSync",
335
+ (fp: string, contents: string, testName: string) => {
336
+ const dir = path.dirname(fp);
337
+
338
+ fs.mkdirSync(dir, {
339
+ recursive: true,
340
+ });
341
+
342
+ const p = new Promise<string>(async (res, rej) => {
343
+ fs.writeFileSync(fp, contents);
344
+ res(fp);
345
+ });
346
+ doneFileStream2.push(p);
347
+
348
+ if (!files[testName]) {
349
+ files[testName] = new Set();
350
+ }
351
+ files[testName].add(fp);
352
+ return p;
353
+ }
354
+ );
355
+
356
+ page.exposeFunction("existsSync", (fp: string, contents: string) => {
357
+ return fs.existsSync(fp);
358
+ });
359
+
360
+ page.exposeFunction("mkdirSync", (fp: string) => {
361
+ if (!fs.existsSync(fp)) {
362
+ return fs.mkdirSync(fp, {
363
+ recursive: true,
364
+ });
365
+ }
366
+ return false;
367
+ });
368
+
369
+ page.exposeFunction(
370
+ "createWriteStream",
371
+ (fp: string, testName: string) => {
372
+ const f = fs.createWriteStream(fp);
373
+
374
+ if (!files[testName]) {
375
+ files[testName] = new Set();
376
+ }
377
+ files[testName].add(fp);
378
+
379
+ const p = new Promise<string>((res, rej) => {
380
+ res(fp);
381
+ });
382
+ doneFileStream2.push(p);
383
+ f.on("close", async () => {
384
+ await p;
385
+ });
386
+ fileStreams2.push(f);
387
+ return {
388
+ ...JSON.parse(JSON.stringify(f)),
389
+ uid: fileStreams2.length - 1,
390
+ };
391
+ }
392
+ );
393
+
394
+ page.exposeFunction(
395
+ "write",
396
+ async (uid: number, contents: string) => {
397
+ return fileStreams2[uid].write(contents);
398
+ }
399
+ );
400
+
401
+ page.exposeFunction("end", async (uid: number) => {
402
+ return fileStreams2[uid].end();
403
+ });
404
+
405
+ page.exposeFunction("customclose", (p: string, testName: string) => {
406
+ fs.writeFileSync(
407
+ p + "/manifest.json",
408
+ JSON.stringify(Array.from(files[testName]))
409
+ );
410
+ delete files[testName];
411
+
412
+ Promise.all(screenshots[testName] || []).then(() => {
413
+ delete screenshots[testName];
414
+ page.close();
415
+ });
416
+
417
+ // globalThis["writeFileSync"](
418
+ // p + "/manifest.json",
419
+ // // files.entries()
420
+ // JSON.stringify(Array.from(files[testName]))
421
+ // );
422
+
423
+ // console.log("closing doneFileStream2", doneFileStream2);
424
+ // console.log("closing doneFileStream2", doneFileStream2);
425
+ // Promise.all([...doneFileStream2, ...screenshots2]).then(() => {
426
+ // page.close();
427
+ // });
428
+
429
+ // Promise.all(screenshots).then(() => {
430
+ // page.close();
431
+ // });
432
+ // setTimeout(() => {
433
+ // console.log("Delayed for 1 second.");
434
+ // page.close();
435
+ // }, 5000);
436
+
437
+ // return page.close();
438
+ });
439
+
440
+ return page;
441
+ })
442
+ .then(async (page) => {
443
+ page.on("console", (log) =>
444
+ console.debug(`Log from client: [${log.text()}] `)
445
+ );
446
+ await page.goto(`file://${`${dest}.html`}`, {});
447
+ res(page);
448
+
449
+ // page.evaluate(evaluation).finally(() => {
450
+ // console.log("evaluation failed.", dest);
451
+ // });
452
+
453
+ // return page;
454
+ });
455
+ });
456
+ };
457
+
458
+ // launchNodeSideCar = async (src: string, dest: string) => {};
459
+ launchNodeSideCar = async (
460
+ src: string,
461
+ dest: string,
462
+ testConfig: ITestTypes
463
+ ) => {
464
+ const d = dest + ".mjs";
465
+ console.log("launchNodeSideCar", src, dest, d);
466
+
467
+ const destFolder = dest.replace(".mjs", "");
468
+
469
+ let argz = "";
470
+
471
+ // const testConfig = this.configs.tests.find((t) => {
472
+ // return t[0] === src;
473
+ // });
474
+
475
+ // if (!testConfig) {
476
+ // console.error("missing test config");
477
+ // process.exit(-1);
478
+ // }
479
+ const testConfigResource = testConfig[2];
480
+
481
+ let portsToUse: string[] = [];
482
+ if (testConfigResource.ports === 0) {
483
+ argz = JSON.stringify({
484
+ scheduled: true,
485
+ name: src,
486
+ ports: portsToUse,
487
+ fs: destFolder,
488
+ browserWSEndpoint: this.browser.wsEndpoint(),
489
+ });
490
+ } else if (testConfigResource.ports > 0) {
491
+ const openPorts = Object.entries(this.ports).filter(
492
+ ([portnumber, portopen]) => portopen
493
+ );
494
+ console.log("openPorts", openPorts);
495
+ if (openPorts.length >= testConfigResource.ports) {
496
+ for (let i = 0; i < testConfigResource.ports; i++) {
497
+ portsToUse.push(openPorts[i][0]);
498
+
499
+ this.ports[openPorts[i][0]] = false; // port is now closed
500
+ }
501
+
502
+ argz = JSON.stringify({
503
+ scheduled: true,
504
+ name: src,
505
+ // ports: [3333],
506
+ ports: portsToUse,
507
+ fs: ".",
508
+ browserWSEndpoint: this.browser.wsEndpoint(),
509
+ });
510
+ } else {
511
+ this.queue.push(src);
512
+ return;
513
+ }
514
+ } else {
515
+ console.error("negative port makes no sense", src);
516
+ process.exit(-1);
517
+ }
518
+
519
+ const builtfile = dest + ".mjs";
520
+
521
+ // console.log(
522
+ // "node builtfile",
523
+ // (await import(`${builtfile}?cacheBust=${Date.now()}`)).default
524
+ // );
525
+ this.server[builtfile] = await import(
526
+ `${builtfile}?cacheBust=${Date.now()}`
527
+ ).then((module) => {
528
+ return module.default.then((defaultModule) => {
529
+ console.log("defaultModule", defaultModule);
530
+ const s = new defaultModule();
531
+ s.receiveTestResourceConfig(argz);
532
+ // Object.create(defaultModule);
533
+
534
+ // defaultModule
535
+ // .receiveTestResourceConfig(argz)
536
+ // .then((x) => {
537
+ // console.log("then", x);
538
+ // return x;
539
+ // })
540
+ // .catch((e) => {
541
+ // console.log("catch", e);
542
+ // });
543
+ });
544
+ });
545
+
546
+ console.log("portsToUse", portsToUse);
195
547
  for (let i = 0; i <= portsToUse.length; i++) {
196
- this.ports[i] = true; //port is open again
548
+ if (portsToUse[i]) {
549
+ this.ports[portsToUse[i]] = "true"; //port is open again
550
+ }
197
551
  }
198
552
  };
199
553
 
200
- launchWeb = (t: string, dest: string) => {
554
+ launchWeb = (t: string, dest: string, sidecars: ITestTypes[]) => {
201
555
  console.log("launchWeb", t, dest);
202
556
 
557
+ sidecars.map((sidecar) => {
558
+ if (sidecar[1] === "node") {
559
+ return this.launchNodeSideCar(
560
+ sidecar[0],
561
+ destinationOfRuntime(sidecar[0], "node", this.configs),
562
+ sidecar
563
+ );
564
+ }
565
+ });
566
+
203
567
  const destFolder = dest.replace(".mjs", "");
204
568
 
205
569
  const webArgz = JSON.stringify({
@@ -209,8 +573,10 @@ export class PM_Main extends PM {
209
573
  browserWSEndpoint: this.browser.wsEndpoint(),
210
574
  });
211
575
 
212
- const evaluation = `import('${dest}.mjs').then(async (x) => {
213
- console.log("imported", x, (x.default));
576
+ const evaluation = `
577
+ console.log("importing ${dest}.mjs");
578
+ import('${dest}.mjs').then(async (x) => {
579
+ console.log("imported", x.default);
214
580
  try {
215
581
  await (await x.default).receiveTestResourceConfig(${webArgz})
216
582
  } catch (e) {
@@ -219,15 +585,19 @@ export class PM_Main extends PM {
219
585
  })`;
220
586
 
221
587
  const fileStreams2: fs.WriteStream[] = [];
222
-
223
- // const screenshots2: Promise<any>[] = [];
224
588
  const doneFileStream2: Promise<any>[] = [];
225
589
 
226
590
  this.browser
227
591
  .newPage()
228
592
  .then((page) => {
593
+ page.on("console", (msg) => {
594
+ console.log("web > ", msg.args(), msg.text());
595
+ // for (let i = 0; i < msg._args.length; ++i)
596
+ // console.log(`${i}: ${msg._args[i]}`);
597
+ });
598
+
229
599
  page.exposeFunction(
230
- "custom-screenshot",
600
+ "customScreenShot",
231
601
  async (ssOpts: ScreenshotOptions, testName: string) => {
232
602
  console.log("main.ts browser custom-screenshot", testName);
233
603
  const p = ssOpts.path as string;
@@ -235,6 +605,9 @@ export class PM_Main extends PM {
235
605
  fs.mkdirSync(dir, {
236
606
  recursive: true,
237
607
  });
608
+ if (!files[testName]) {
609
+ files[testName] = new Set();
610
+ }
238
611
  files[testName].add(ssOpts.path as string);
239
612
 
240
613
  const sPromise = page.screenshot({
@@ -323,6 +696,8 @@ export class PM_Main extends PM {
323
696
  });
324
697
 
325
698
  page.exposeFunction("customclose", (p: string, testName: string) => {
699
+ console.log("\t closing", p);
700
+
326
701
  fs.writeFileSync(
327
702
  p + "/manifest.json",
328
703
  JSON.stringify(Array.from(files[testName]))
@@ -331,7 +706,7 @@ export class PM_Main extends PM {
331
706
 
332
707
  Promise.all(screenshots[testName] || []).then(() => {
333
708
  delete screenshots[testName];
334
- page.close();
709
+ // page.close();
335
710
  });
336
711
 
337
712
  // globalThis["writeFileSync"](
@@ -360,11 +735,20 @@ export class PM_Main extends PM {
360
735
  return page;
361
736
  })
362
737
  .then(async (page) => {
738
+ page.on("console", (log) =>
739
+ console.debug(`Log from client: [${log.text()}] `)
740
+ );
363
741
  await page.goto(`file://${`${dest}.html`}`, {});
364
742
 
365
- page.evaluate(evaluation).finally(() => {
366
- console.log("evaluation failed.", dest);
367
- });
743
+ page
744
+ .evaluate(evaluation)
745
+ .catch((e) => {
746
+ console.log("evaluation failed.", dest);
747
+ console.log(e);
748
+ })
749
+ .finally(() => {
750
+ console.log("evaluation complete.", dest);
751
+ });
368
752
 
369
753
  return page;
370
754
  });
package/src/PM/node.ts CHANGED
@@ -6,6 +6,7 @@ import { PassThrough } from "stream";
6
6
  import { ITLog, ITTestResourceConfiguration } from "../lib";
7
7
 
8
8
  import { PM } from "./index.js";
9
+ import { Page } from "puppeteer-core/lib/esm/puppeteer";
9
10
 
10
11
  type IFPaths = string[];
11
12
  const fPaths: IFPaths = [];
@@ -22,6 +23,10 @@ export class PM_Node extends PM {
22
23
  this.testResourceConfiguration = t;
23
24
  }
24
25
 
26
+ customScreenShot(opts: object, page: Page) {
27
+ return globalThis["customScreenShot"](opts, page);
28
+ }
29
+
25
30
  existsSync(destFolder: string): boolean {
26
31
  return globalThis["existsSync"](
27
32
  this.testResourceConfiguration.fs + "/" + destFolder
@@ -37,6 +42,7 @@ export class PM_Node extends PM {
37
42
  }
38
43
 
39
44
  writeFileSync(filepath: string, contents: string) {
45
+ console.log("pm_node-writeFileSync", this.testResourceConfiguration);
40
46
  return globalThis["writeFileSync"](
41
47
  this.testResourceConfiguration.fs + "/" + filepath,
42
48
  contents,
package/src/PM/web.ts CHANGED
@@ -15,6 +15,10 @@ export class PM_Web extends PM {
15
15
  this.testResourceConfiguration = t;
16
16
  }
17
17
 
18
+ customScreenShot(opts: object) {
19
+ window["customScreenShot"](opts);
20
+ }
21
+
18
22
  existsSync(destFolder: string): boolean {
19
23
  return window["existsSync"](destFolder);
20
24
  }