testeranto 0.49.10 → 0.70.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 (250) hide show
  1. package/.nvmrc +1 -0
  2. package/README.md +92 -9
  3. package/dist/cjs-shim.js +12 -0
  4. package/dist/common/Features.js +2 -3
  5. package/dist/common/Node.js +37 -62
  6. package/dist/common/NodeWriter.js +7 -9
  7. package/dist/common/Project.js +130 -627
  8. package/dist/common/SubPackages/puppeteer.js +19 -0
  9. package/dist/common/{subPackages → SubPackages}/react/component/node.js +4 -4
  10. package/dist/common/{subPackages → SubPackages}/react/component/web.js +4 -4
  11. package/dist/common/SubPackages/react/jsx/index.js +13 -0
  12. package/dist/common/SubPackages/react/jsx/node.js +10 -0
  13. package/dist/common/SubPackages/react/jsx/web.js +10 -0
  14. package/dist/common/{subPackages → SubPackages}/react-dom/component/node.js +6 -6
  15. package/dist/common/{subPackages → SubPackages}/react-dom/component/web.js +11 -12
  16. package/dist/common/SubPackages/react-dom/jsx/node.js +39 -0
  17. package/dist/common/{subPackages → SubPackages}/react-dom/jsx/web.js +19 -20
  18. package/dist/common/{subPackages → SubPackages}/react-test-renderer/MemoExoticComponent/node.js +3 -3
  19. package/dist/common/{subPackages → SubPackages}/react-test-renderer/component/index.js +25 -15
  20. package/dist/common/{subPackages/react-test-renderer/jsx → SubPackages/react-test-renderer/component}/node.js +3 -5
  21. package/dist/common/{subPackages/react-test-renderer/jsx → SubPackages/react-test-renderer/component}/web.js +3 -5
  22. package/dist/common/{subPackages → SubPackages}/react-test-renderer/fc/node.js +4 -4
  23. package/dist/common/{subPackages → SubPackages}/react-test-renderer/fc/web.js +4 -4
  24. package/dist/common/{subPackages → SubPackages}/react-test-renderer/jsx/index.js +8 -3
  25. package/dist/common/{subPackages/react-test-renderer/jsx-promised → SubPackages/react-test-renderer/jsx}/node.js +4 -4
  26. package/dist/common/{subPackages/react → SubPackages/react-test-renderer}/jsx/web.js +4 -4
  27. package/dist/common/{subPackages → SubPackages}/react-test-renderer/jsx-promised/index.js +3 -3
  28. package/dist/common/{subPackages/react/jsx → SubPackages/react-test-renderer/jsx-promised}/node.js +2 -2
  29. package/dist/common/Types.js +2 -0
  30. package/dist/common/Web.js +49 -113
  31. package/dist/common/electron.js +256 -42
  32. package/dist/common/esbuildConfigs/features.js +14 -0
  33. package/dist/common/esbuildConfigs/index.js +20 -0
  34. package/dist/common/esbuildConfigs/node.js +37 -0
  35. package/dist/common/esbuildConfigs/report.js +13 -0
  36. package/dist/common/esbuildConfigs/tests.js +13 -0
  37. package/dist/common/esbuildConfigs/web.js +53 -0
  38. package/dist/common/lib/abstractBase.js +200 -0
  39. package/dist/common/lib/basebuilder.js +86 -0
  40. package/dist/common/lib/classBuilder.js +40 -0
  41. package/dist/common/lib/core.js +81 -0
  42. package/dist/common/lib/index.js +21 -0
  43. package/dist/common/lib/types.js +2 -0
  44. package/dist/common/preload.js +15 -24
  45. package/dist/common/puppeteerConfiger.js +24 -0
  46. package/dist/common/report.html.js +31 -0
  47. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  48. package/dist/common/web.html.js +22 -0
  49. package/dist/module/Features.js +2 -3
  50. package/dist/module/Node.js +37 -62
  51. package/dist/module/NodeWriter.js +7 -9
  52. package/dist/module/Project.js +131 -605
  53. package/dist/module/SubPackages/puppeteer.js +14 -0
  54. package/dist/module/{subPackages → SubPackages}/react/component/node.js +3 -3
  55. package/dist/module/{subPackages → SubPackages}/react/component/web.js +3 -3
  56. package/dist/module/SubPackages/react/jsx/index.js +10 -0
  57. package/dist/module/SubPackages/react/jsx/node.js +5 -0
  58. package/dist/module/SubPackages/react/jsx/web.js +5 -0
  59. package/dist/module/{subPackages → SubPackages}/react-dom/component/node.js +7 -7
  60. package/dist/module/{subPackages → SubPackages}/react-dom/component/web.js +10 -11
  61. package/dist/module/SubPackages/react-dom/jsx/node.js +31 -0
  62. package/dist/module/{subPackages → SubPackages}/react-dom/jsx/web.js +20 -21
  63. package/dist/module/{subPackages → SubPackages}/react-test-renderer/MemoExoticComponent/node.js +3 -3
  64. package/dist/module/{subPackages → SubPackages}/react-test-renderer/component/index.js +22 -15
  65. package/dist/module/{subPackages → SubPackages}/react-test-renderer/component/node.js +2 -2
  66. package/dist/module/{subPackages → SubPackages}/react-test-renderer/component/web.js +2 -2
  67. package/dist/module/{subPackages → SubPackages}/react-test-renderer/fc/node.js +3 -3
  68. package/dist/module/{subPackages → SubPackages}/react-test-renderer/fc/web.js +3 -3
  69. package/dist/module/{subPackages → SubPackages}/react-test-renderer/jsx/index.js +8 -3
  70. package/dist/module/SubPackages/react-test-renderer/jsx/node.js +5 -0
  71. package/dist/module/SubPackages/react-test-renderer/jsx/web.js +5 -0
  72. package/dist/module/{subPackages → SubPackages}/react-test-renderer/jsx-promised/index.js +3 -3
  73. package/dist/module/{subPackages/react-test-renderer/jsx → SubPackages/react-test-renderer/jsx-promised}/node.js +1 -1
  74. package/dist/module/Types.js +2 -0
  75. package/dist/module/Web.js +49 -113
  76. package/dist/module/electron.js +257 -43
  77. package/dist/module/esbuildConfigs/features.js +12 -0
  78. package/dist/module/esbuildConfigs/index.js +18 -0
  79. package/dist/module/esbuildConfigs/node.js +32 -0
  80. package/dist/module/esbuildConfigs/report.js +11 -0
  81. package/dist/module/esbuildConfigs/tests.js +11 -0
  82. package/dist/module/esbuildConfigs/web.js +48 -0
  83. package/dist/module/lib/abstractBase.js +192 -0
  84. package/dist/module/lib/basebuilder.js +82 -0
  85. package/dist/module/lib/classBuilder.js +36 -0
  86. package/dist/module/lib/core.js +78 -0
  87. package/dist/module/lib/index.js +17 -0
  88. package/dist/module/lib/types.js +1 -0
  89. package/dist/module/preload.js +12 -24
  90. package/dist/module/puppeteerConfiger.js +19 -0
  91. package/dist/module/report.html.js +29 -0
  92. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  93. package/dist/module/web.html.js +20 -0
  94. package/dist/prebuild/Report.css +10326 -0
  95. package/dist/prebuild/Report.js +37456 -0
  96. package/dist/types/Features.d.ts +5 -5
  97. package/dist/types/Node.d.ts +5 -11
  98. package/dist/types/NodeWriter.d.ts +1 -1
  99. package/dist/types/Project.d.ts +2 -28
  100. package/dist/types/SubPackages/puppeteer.d.ts +6 -0
  101. package/dist/types/SubPackages/react/component/node.d.ts +7 -0
  102. package/dist/types/SubPackages/react/component/web.d.ts +7 -0
  103. package/dist/types/SubPackages/react/jsx/index.d.ts +15 -0
  104. package/dist/types/SubPackages/react/jsx/node.d.ts +4 -0
  105. package/dist/types/SubPackages/react/jsx/web.d.ts +4 -0
  106. package/dist/types/SubPackages/react-dom/component/node.d.ts +12 -0
  107. package/dist/types/SubPackages/react-dom/component/web.d.ts +5 -0
  108. package/dist/types/SubPackages/react-dom/jsx/node.d.ts +6 -0
  109. package/dist/types/SubPackages/react-dom/jsx/web.d.ts +5 -0
  110. package/dist/types/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +5 -0
  111. package/dist/types/{subPackages → SubPackages}/react-test-renderer/component/index.d.ts +6 -6
  112. package/dist/types/{subPackages → SubPackages}/react-test-renderer/component/node.d.ts +4 -4
  113. package/dist/types/SubPackages/react-test-renderer/component/web.d.ts +4 -0
  114. package/dist/types/SubPackages/react-test-renderer/fc/node.d.ts +8 -0
  115. package/dist/types/SubPackages/react-test-renderer/fc/web.d.ts +8 -0
  116. package/dist/types/{subPackages → SubPackages}/react-test-renderer/jsx/index.d.ts +5 -4
  117. package/dist/types/SubPackages/react-test-renderer/jsx/node.d.ts +9 -0
  118. package/dist/types/SubPackages/react-test-renderer/jsx/web.d.ts +9 -0
  119. package/dist/types/{subPackages → SubPackages}/react-test-renderer/jsx-promised/index.d.ts +4 -4
  120. package/dist/types/SubPackages/react-test-renderer/jsx-promised/node.d.ts +5 -0
  121. package/dist/types/SubPackages/react-test-renderer/jsx-promised/web.d.ts +5 -0
  122. package/dist/types/Types.d.ts +49 -17
  123. package/dist/types/Web.d.ts +5 -11
  124. package/dist/types/esbuildConfigs/features.d.ts +4 -0
  125. package/dist/types/esbuildConfigs/index.d.ts +4 -0
  126. package/dist/types/esbuildConfigs/node.d.ts +4 -0
  127. package/dist/types/esbuildConfigs/report.d.ts +4 -0
  128. package/dist/types/esbuildConfigs/tests.d.ts +4 -0
  129. package/dist/types/esbuildConfigs/web.d.ts +4 -0
  130. package/dist/types/lib/abstractBase.d.ts +103 -0
  131. package/dist/types/lib/basebuilder.d.ts +25 -0
  132. package/dist/types/lib/classBuilder.d.ts +7 -0
  133. package/dist/types/lib/core.d.ts +8 -0
  134. package/dist/types/lib/index.d.ts +58 -0
  135. package/dist/types/lib/types.d.ts +70 -0
  136. package/dist/types/puppeteerConfiger.d.ts +4 -0
  137. package/dist/types/report.html.d.ts +2 -0
  138. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  139. package/dist/types/web.html.d.ts +2 -0
  140. package/electronBuild.ts +32 -0
  141. package/index.html +30 -0
  142. package/package.json +123 -87
  143. package/src/Features.ts +2 -4
  144. package/src/Node.ts +79 -155
  145. package/src/NodeWriter.ts +22 -22
  146. package/src/Project.ts +185 -783
  147. package/src/Report.tsx +30 -15
  148. package/src/SubPackages/puppeteer.ts +51 -0
  149. package/src/SubPackages/react/component/node.ts +43 -0
  150. package/src/SubPackages/react/component/web.ts +43 -0
  151. package/src/SubPackages/react/jsx/index.ts +32 -0
  152. package/src/SubPackages/react/jsx/node.ts +29 -0
  153. package/src/SubPackages/react/jsx/web.ts +30 -0
  154. package/src/{subPackages → SubPackages}/react-dom/component/node.ts +24 -44
  155. package/src/SubPackages/react-dom/component/web.ts +104 -0
  156. package/src/{subPackages → SubPackages}/react-dom/jsx/index.ts +0 -1
  157. package/src/SubPackages/react-dom/jsx/node.ts +68 -0
  158. package/src/SubPackages/react-dom/jsx/web.ts +102 -0
  159. package/src/SubPackages/react-test-renderer/MemoExoticComponent/node.ts +38 -0
  160. package/src/{subPackages → SubPackages}/react-test-renderer/component/index.ts +37 -49
  161. package/src/SubPackages/react-test-renderer/component/node.ts +16 -0
  162. package/src/SubPackages/react-test-renderer/component/web.ts +16 -0
  163. package/src/SubPackages/react-test-renderer/fc/node.ts +49 -0
  164. package/src/SubPackages/react-test-renderer/fc/web.ts +48 -0
  165. package/src/SubPackages/react-test-renderer/jsx/index.ts +49 -0
  166. package/src/SubPackages/react-test-renderer/jsx/node.ts +20 -0
  167. package/src/SubPackages/react-test-renderer/jsx/web.ts +20 -0
  168. package/src/{subPackages → SubPackages}/react-test-renderer/jsx-promised/index.ts +15 -26
  169. package/src/SubPackages/react-test-renderer/jsx-promised/node.ts +19 -0
  170. package/src/SubPackages/react-test-renderer/jsx-promised/web.ts +22 -0
  171. package/src/Types.ts +114 -17
  172. package/src/Web.ts +100 -225
  173. package/src/cjs-shim.js +12 -0
  174. package/src/electron.ts +303 -45
  175. package/src/esbuildConfigs/features.ts +17 -0
  176. package/src/esbuildConfigs/index.ts +22 -0
  177. package/src/esbuildConfigs/node.ts +60 -0
  178. package/src/esbuildConfigs/report.ts +15 -0
  179. package/src/esbuildConfigs/tests.ts +14 -0
  180. package/src/esbuildConfigs/web.ts +73 -0
  181. package/src/lib/abstractBase.ts +412 -0
  182. package/src/lib/basebuilder.ts +228 -0
  183. package/src/lib/classBuilder.ts +118 -0
  184. package/src/lib/core.ts +214 -0
  185. package/src/lib/index.ts +117 -0
  186. package/src/lib/types.ts +206 -0
  187. package/src/preload.ts +13 -27
  188. package/src/puppeteerConfiger.ts +26 -0
  189. package/src/report.html.ts +29 -0
  190. package/src/web.html.ts +20 -0
  191. package/tests/Rectangle.test.ts +189 -0
  192. package/tsconfig.json +19 -6
  193. package/tsconfig.module.json +15 -4
  194. package/tsconfig.types.json +14 -4
  195. package/yarn-error.log +3144 -0
  196. package/dist/common/core.js +0 -397
  197. package/dist/common/subPackages/react/jsx/index.js +0 -26
  198. package/dist/common/subPackages/react-dom/jsx/node.js +0 -95
  199. package/dist/common/subPackages/react-test-renderer/component/node.js +0 -8
  200. package/dist/common/subPackages/react-test-renderer/component/web.js +0 -8
  201. package/dist/module/Report.js +0 -186
  202. package/dist/module/core.js +0 -388
  203. package/dist/module/subPackages/react/jsx/index.js +0 -22
  204. package/dist/module/subPackages/react/jsx/node.js +0 -5
  205. package/dist/module/subPackages/react/jsx/web.js +0 -5
  206. package/dist/module/subPackages/react-dom/jsx/node.js +0 -87
  207. package/dist/module/subPackages/react-test-renderer/jsx/web.js +0 -5
  208. package/dist/module/subPackages/react-test-renderer/jsx-promised/node.js +0 -5
  209. package/dist/types/core.d.ts +0 -220
  210. package/dist/types/subPackages/react/component/node.d.ts +0 -12
  211. package/dist/types/subPackages/react/component/web.d.ts +0 -12
  212. package/dist/types/subPackages/react/jsx/index.d.ts +0 -15
  213. package/dist/types/subPackages/react/jsx/node.d.ts +0 -4
  214. package/dist/types/subPackages/react/jsx/web.d.ts +0 -4
  215. package/dist/types/subPackages/react-dom/component/node.d.ts +0 -14
  216. package/dist/types/subPackages/react-dom/component/web.d.ts +0 -19
  217. package/dist/types/subPackages/react-dom/jsx/node.d.ts +0 -8
  218. package/dist/types/subPackages/react-dom/jsx/web.d.ts +0 -5
  219. package/dist/types/subPackages/react-test-renderer/MemoExoticComponent/node.d.ts +0 -8
  220. package/dist/types/subPackages/react-test-renderer/component/web.d.ts +0 -9
  221. package/dist/types/subPackages/react-test-renderer/fc/node.d.ts +0 -9
  222. package/dist/types/subPackages/react-test-renderer/fc/web.d.ts +0 -9
  223. package/dist/types/subPackages/react-test-renderer/jsx/node.d.ts +0 -4
  224. package/dist/types/subPackages/react-test-renderer/jsx/web.d.ts +0 -4
  225. package/dist/types/subPackages/react-test-renderer/jsx-promised/node.d.ts +0 -4
  226. package/dist/types/subPackages/react-test-renderer/jsx-promised/web.d.ts +0 -4
  227. package/src/core.ts +0 -1399
  228. package/src/subPackages/react/component/node.ts +0 -75
  229. package/src/subPackages/react/component/web.ts +0 -80
  230. package/src/subPackages/react/jsx/index.ts +0 -64
  231. package/src/subPackages/react/jsx/node.ts +0 -29
  232. package/src/subPackages/react/jsx/web.ts +0 -29
  233. package/src/subPackages/react-dom/component/web.ts +0 -129
  234. package/src/subPackages/react-dom/jsx/node.ts +0 -145
  235. package/src/subPackages/react-dom/jsx/web.ts +0 -145
  236. package/src/subPackages/react-test-renderer/MemoExoticComponent/node.ts +0 -67
  237. package/src/subPackages/react-test-renderer/component/node.ts +0 -30
  238. package/src/subPackages/react-test-renderer/component/web.ts +0 -30
  239. package/src/subPackages/react-test-renderer/fc/node.ts +0 -77
  240. package/src/subPackages/react-test-renderer/fc/web.ts +0 -77
  241. package/src/subPackages/react-test-renderer/jsx/index.ts +0 -51
  242. package/src/subPackages/react-test-renderer/jsx/node.ts +0 -31
  243. package/src/subPackages/react-test-renderer/jsx/web.ts +0 -31
  244. package/src/subPackages/react-test-renderer/jsx-promised/node.ts +0 -31
  245. package/src/subPackages/react-test-renderer/jsx-promised/web.ts +0 -31
  246. /package/dist/common/{subPackages → SubPackages}/react-dom/jsx/index.js +0 -0
  247. /package/dist/common/{subPackages → SubPackages}/react-test-renderer/jsx-promised/web.js +0 -0
  248. /package/dist/module/{subPackages → SubPackages}/react-dom/jsx/index.js +0 -0
  249. /package/dist/module/{subPackages → SubPackages}/react-test-renderer/jsx-promised/web.js +0 -0
  250. /package/dist/types/{subPackages → SubPackages}/react-dom/jsx/index.d.ts +0 -0
@@ -3,121 +3,57 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const core_1 = require("./core");
7
- const core_2 = __importDefault(require("./core"));
8
- let webSocket;
9
- try {
10
- webSocket = new WebSocket("ws://localhost:8080");
11
- }
12
- catch (e) {
13
- console.error(e);
14
- }
15
- const receiveTestResourceConfigUnscheduled = async (t, testresource) => {
16
- const { failed, artifacts, logPromise } = await t.receiveTestResourceConfig(testresource);
17
- Promise.all([...artifacts, logPromise]).then(async () => {
18
- // ipcRenderer.invoke('quit-app', failed);
19
- window.exit(failed);
20
- });
21
- };
22
- const receiveTestResourceConfigScheduled = async (t, testresource) => {
23
- const { failed, artifacts, logPromise } = await t.receiveTestResourceConfig(testresource);
24
- webSocket.send(JSON.stringify({
25
- type: "testeranto:adios",
26
- data: {
27
- failed,
28
- testResourceConfiguration: t.test.testResourceConfiguration,
29
- results: t.toObj(),
30
- },
31
- }));
32
- Promise.all([...artifacts, logPromise]).then(async () => {
33
- // ipcRenderer.invoke('quit-app', failed);
34
- window.exit(failed);
35
- });
36
- };
37
- exports.default = async (input, testSpecification, testImplementation, testInterface, testResourceRequirement = core_1.defaultTestResourceRequirement) => {
38
- console.log("web NodeWriter", window.NodeWriter);
39
- const mrt = new core_2.default(input, testSpecification, testImplementation, testInterface, testResourceRequirement, testInterface.assertioner || (async (t) => t), testInterface.beforeEach ||
40
- async function (subject, initialValues, testResource) {
41
- return subject;
42
- }, testInterface.afterEach || (async (s) => s), testInterface.afterAll || ((store) => undefined), testInterface.butThen || (async (a) => a), testInterface.andWhen, testInterface.actionHandler ||
43
- function (b) {
44
- return b;
45
- }, window.NodeWriter);
46
- const tl2 = mrt;
47
- const t = tl2.testJobs[0];
48
- const testResourceArg = decodeURIComponent(new URLSearchParams(location.search).get('requesting') || '');
49
- try {
50
- const partialTestResource = JSON.parse(testResourceArg);
51
- console.log("initial test resource", partialTestResource);
52
- if (partialTestResource.scheduled) {
53
- console.log("test is scheduled");
54
- console.log("awaiting test resources via WS...");
55
- webSocket.addEventListener("open", (event) => {
56
- webSocket.addEventListener("message", (event) => {
57
- console.log("Message from server ", event.data);
58
- });
59
- const r = JSON.stringify({
60
- type: "testeranto:hola",
61
- data: {
62
- requirement: Object.assign(Object.assign({}, testResourceRequirement), { name: partialTestResource.name })
63
- },
64
- });
65
- webSocket.send(r);
66
- console.log("awaiting test resources via websocket...", r);
67
- webSocket.onmessage = (async (msg) => {
68
- console.log("message: ", msg);
69
- const resourcesFromWs = JSON.parse(msg.data);
70
- console.log("secondary test resource", resourcesFromWs);
71
- const secondTestResource = Object.assign(Object.assign({ fs: "." }, JSON.parse(JSON.stringify(partialTestResource))), JSON.parse(JSON.stringify(resourcesFromWs)));
72
- console.log("final test resource", secondTestResource);
73
- receiveTestResourceConfigScheduled(t, secondTestResource);
74
- });
75
- });
6
+ const core_js_1 = __importDefault(require("./lib/core.js"));
7
+ const index_js_1 = require("./lib/index.js");
8
+ // const remote = require("@electron/remote");
9
+ // import remote from "@electron/remote";
10
+ // const electron = require("electron");
11
+ // const remote =
12
+ // process.type === "browser" ? electron : require("@electron/remote");
13
+ class WebTesteranto extends core_js_1.default {
14
+ constructor(input, testSpecification, testImplementation, testResourceRequirement, testInterface) {
15
+ super(input, testSpecification, testImplementation, testResourceRequirement, window.NodeWriter, testInterface);
16
+ const testResourceArg = decodeURIComponent(new URLSearchParams(location.search).get("requesting") || "");
17
+ try {
18
+ const partialTestResource = JSON.parse(testResourceArg);
19
+ this.receiveTestResourceConfig(this.testJobs[0], partialTestResource);
20
+ }
21
+ catch (e) {
22
+ console.error(e);
23
+ // process.exit(-1);
76
24
  }
77
- else {
78
- receiveTestResourceConfigUnscheduled(t, partialTestResource);
25
+ const requesting = new URLSearchParams(location.search).get("requesting");
26
+ if (requesting) {
27
+ const testResourceArg = decodeURIComponent(requesting);
28
+ try {
29
+ const partialTestResource = JSON.parse(testResourceArg);
30
+ console.log("initial test resource", partialTestResource);
31
+ this.receiveTestResourceConfig(this.testJobs[0], partialTestResource);
32
+ }
33
+ catch (e) {
34
+ console.error(e);
35
+ // process.exit(-1);
36
+ }
79
37
  }
80
- // const partialTestResource = JSON.parse(
81
- // testResourceArg
82
- // ) as ITTestResourceConfiguration;
83
- // if (partialTestResource.fs && partialTestResource.ports) {
84
- // receiveTestResourceConfig(t, partialTestResource);
85
- // } else {
86
- // console.log("test configuration is incomplete", partialTestResource);
87
- // console.log(
88
- // "requesting test resources via ws",
89
- // testResourceRequirement
90
- // );
91
- // webSocket.addEventListener("open", (event) => {
92
- // webSocket.addEventListener("message", (event) => {
93
- // console.log("Message from server ", event.data);
94
- // });
95
- // const r = JSON.stringify({
96
- // type: "testeranto:hola",
97
- // data: {
98
- // testResourceRequirement,
99
- // },
100
- // });
101
- // webSocket.send(r);
102
- // console.log("awaiting test resources via websocket...", r);
103
- // webSocket.onmessage = (
104
- // async (msg: MessageEvent<any>) => {
105
- // console.log("message: ", msg);
106
- // const resourcesFromPm2 = msg.data.testResourceConfiguration;
107
- // const secondTestResource = {
108
- // fs: ".",
109
- // ...JSON.parse(JSON.stringify(partialTestResource)),
110
- // ...JSON.parse(JSON.stringify(resourcesFromPm2)),
111
- // } as ITTestResourceConfiguration;
112
- // console.log("secondTestResource", secondTestResource);
113
- // receiveTestResourceConfig(t, secondTestResource);
114
- // }
115
- // );
116
- // });
117
- // }
118
38
  }
119
- catch (e) {
120
- console.error(e);
121
- // process.exit(-1);
39
+ async receiveTestResourceConfig(t, partialTestResource) {
40
+ const { failed, artifacts, logPromise } = await t.receiveTestResourceConfig(partialTestResource, {
41
+ browser: await window.browser,
42
+ ipc: window.ipcRenderer,
43
+ });
44
+ console.log("test is done, awaiting test result write to fs");
45
+ Promise.all([...artifacts, logPromise]).then(async () => {
46
+ // we can't close the window becuase we might be taking a screenshot
47
+ // window.close();
48
+ // console.log(
49
+ // "(window as any).browser",
50
+ // JSON.stringify(await (window as any).browser)
51
+ // );
52
+ // var currentWindow = (await (window as any).browser).getCurrentWindow();
53
+ // currentWindow.close();
54
+ });
122
55
  }
56
+ }
57
+ exports.default = async (input, testSpecification, testImplementation, testInterface, testResourceRequirement = index_js_1.defaultTestResourceRequirement) => {
58
+ return new WebTesteranto(input, testSpecification, testImplementation, testResourceRequirement, testInterface);
123
59
  };
@@ -3,50 +3,264 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ const readline_1 = __importDefault(require("readline"));
6
7
  const electron_1 = require("electron");
8
+ const puppeteer_in_electron_1 = __importDefault(require("puppeteer-in-electron"));
9
+ const puppeteer_core_1 = __importDefault(require("puppeteer-core"));
10
+ const fs_1 = __importDefault(require("fs"));
7
11
  const path_1 = __importDefault(require("path"));
8
- const url_1 = __importDefault(require("url"));
9
- let win;
10
- function createWindow() {
11
- win = new electron_1.BrowserWindow({
12
- webPreferences: {
13
- devTools: true,
14
- nodeIntegration: true,
15
- nodeIntegrationInWorker: true,
16
- contextIsolation: false,
17
- preload: path_1.default.join(electron_1.app.getAppPath(), 'preload.js'),
18
- sandbox: false
19
- },
20
- width: 800,
21
- height: 600,
22
- show: true,
23
- });
24
- const u = url_1.default.format({
25
- pathname: path_1.default.join(process.cwd(), process.argv[2]),
26
- protocol: "file:",
27
- slashes: true,
28
- query: {
29
- requesting: encodeURIComponent(process.argv[3]),
12
+ const jsonc_1 = require("jsonc");
13
+ const uuid_1 = require("uuid");
14
+ var mode = process.argv[2] === "-dev" ? "DEV" : "PROD";
15
+ console.log("hello electron", mode);
16
+ const nodeChildren = {};
17
+ const webChildren = {};
18
+ const node2web = {};
19
+ const web2node = {};
20
+ const childProcesses = {};
21
+ readline_1.default.emitKeypressEvents(process.stdin);
22
+ if (process.stdin.isTTY)
23
+ process.stdin.setRawMode(true);
24
+ console.log("\n Electron is running. Press 'q' to quit\n");
25
+ process.stdin.on("keypress", (str, key) => {
26
+ if (key.name === "q") {
27
+ mode = "PROD";
28
+ // process.exit();
29
+ console.log("Switching to prod mode. Begin shutdown sequence...");
30
+ // process.exit(-1);
31
+ const allDone = Object.values(childProcesses).every((v) => v === "done");
32
+ if (allDone && mode === "PROD") {
33
+ console.log("Goodbye Testeranto by manual shutdown");
34
+ process.exit();
30
35
  }
31
- });
32
- console.log("loading", u);
33
- win.loadURL(u);
34
- win.webContents.openDevTools();
35
- }
36
- electron_1.app.on("ready", createWindow);
37
- electron_1.ipcMain.handle('web-log', (x, message) => {
38
- console.log("web-log)", message);
39
- });
40
- electron_1.ipcMain.handle('web-error', (x, message) => {
41
- console.log("web-error)", message);
42
- });
43
- electron_1.ipcMain.handle('web-warn', (x, message) => {
44
- console.log("web-warn)", message);
45
- });
46
- electron_1.ipcMain.handle('web-info', (x, message) => {
47
- console.log("web-info)", message);
36
+ else {
37
+ console.log(childProcesses);
38
+ }
39
+ }
48
40
  });
49
- electron_1.ipcMain.handle('quit-app', (x, failed) => {
50
- console.log("quit-app", failed);
51
- // app.exit(failed);
41
+ const onDone = (test) => {
42
+ console.log("onDone", test);
43
+ childProcesses[test] = "done";
44
+ const allDone = Object.values(childProcesses).every((v) => v === "done");
45
+ if (allDone && mode === "PROD") {
46
+ console.log("Goodbye Testeranto by auto shutdown");
47
+ process.exit();
48
+ }
49
+ else {
50
+ console.log(childProcesses);
51
+ }
52
+ };
53
+ process.on("message", function (message) {
54
+ console.log("message: " + message);
55
+ process.exit();
52
56
  });
57
+ const remoteMain = require("@electron/remote/main");
58
+ remoteMain.initialize();
59
+ const main = async () => {
60
+ const configs = jsonc_1.jsonc.parse((await fs_1.default.readFileSync("./docs/testeranto.json")).toString());
61
+ const loadReport = (configs) => {
62
+ const win = new electron_1.BrowserWindow({
63
+ show: true,
64
+ webPreferences: {
65
+ offscreen: false,
66
+ devTools: true,
67
+ },
68
+ });
69
+ win.loadFile(`/${configs.buildDir}/report.html`).then(async (x) => {
70
+ // pie.connect(app, puppeteer).then(async (browser) => {
71
+ // pie.getPage(browser, win).then(async (page) => {
72
+ // await page.screenshot({
73
+ // path: 'electron-puppeteer-screenshot1.jpg'
74
+ // });
75
+ // })
76
+ // })
77
+ });
78
+ };
79
+ const launchNode = (src, dest) => {
80
+ var _a, _b;
81
+ console.log("launchNode", src);
82
+ childProcesses[src] = "running";
83
+ const destFolder = dest.replace(".mjs", "");
84
+ const argz = JSON.stringify({
85
+ scheduled: true,
86
+ name: src,
87
+ ports: [3333],
88
+ // fs: path.resolve(configs.buildDir, "web", destFolder + "/"),
89
+ // fs: destFolder,
90
+ fs: ".",
91
+ });
92
+ // console.log("launchNode", src, dest, " -> ", destFolder, argz);
93
+ const child = electron_1.utilityProcess.fork(dest + ".mjs", [argz], {
94
+ cwd: destFolder,
95
+ stdio: "pipe",
96
+ });
97
+ const nodeGuid = (0, uuid_1.v4)();
98
+ nodeChildren[nodeGuid] = child;
99
+ if (!fs_1.default.existsSync(destFolder)) {
100
+ fs_1.default.mkdirSync(destFolder, { recursive: true });
101
+ }
102
+ fs_1.default.rmSync(`${destFolder}/stdout.log`, { force: true });
103
+ fs_1.default.rmSync(`${destFolder}/stderr.log`, { force: true });
104
+ const stdout = fs_1.default.createWriteStream(`${destFolder}/stdout.log`);
105
+ const stderr = fs_1.default.createWriteStream(`${destFolder}/stderr.log`);
106
+ child
107
+ .on("message", (data) => {
108
+ console.log("from child", JSON.stringify(data));
109
+ if (data.launchWeb) {
110
+ const guid = (0, uuid_1.v4)();
111
+ const webChild = launchWebSecondary(process.cwd() + data.launchWeb);
112
+ // child.postMessage({ webLaunched: guid });
113
+ webChild.webContents.on("did-finish-load", () => {
114
+ // webChild.webContents.send("message", "hello world");
115
+ child.postMessage({ webLaunched: guid });
116
+ webChildren[guid] = webChild;
117
+ node2web[nodeGuid] = [...(node2web[nodeGuid] || []), guid];
118
+ });
119
+ }
120
+ if (data.teardown) {
121
+ webChildren[data.teardown].close();
122
+ delete webChildren[data.teardown];
123
+ node2web[nodeGuid] = node2web[nodeGuid].filter((x) => x !== data.teardown);
124
+ }
125
+ })
126
+ .on("exit", (data) => {
127
+ stdout.close();
128
+ stderr.close();
129
+ console.log(`ending node ${src}`);
130
+ onDone(src);
131
+ });
132
+ (_a = child.stdout) === null || _a === void 0 ? void 0 : _a.pipe(stdout);
133
+ (_b = child.stderr) === null || _b === void 0 ? void 0 : _b.pipe(stderr);
134
+ };
135
+ const launchWebSecondary = (htmlFile) => {
136
+ console.log("launchWebSecondary", htmlFile);
137
+ const subWin = new electron_1.BrowserWindow({
138
+ show: false,
139
+ webPreferences: {
140
+ nodeIntegration: true,
141
+ nodeIntegrationInWorker: true,
142
+ contextIsolation: false,
143
+ preload: path_1.default.join(electron_1.app.getAppPath(), "preload.js"),
144
+ offscreen: false,
145
+ devTools: true,
146
+ },
147
+ });
148
+ remoteMain.enable(subWin.webContents);
149
+ subWin.webContents.openDevTools();
150
+ subWin.loadFile(htmlFile);
151
+ return subWin;
152
+ // const uuid = uuidv4();
153
+ // windows[uuid] = subWin;
154
+ // return uuid;
155
+ };
156
+ const launchWeb = (t, dest) => {
157
+ console.log("launchWeb", t);
158
+ childProcesses[t] = "running";
159
+ const destFolder = dest.replace(".mjs", "");
160
+ const subWin = new electron_1.BrowserWindow({
161
+ show: true,
162
+ webPreferences: {
163
+ nodeIntegration: true,
164
+ nodeIntegrationInWorker: true,
165
+ contextIsolation: false,
166
+ preload: path_1.default.join(electron_1.app.getAppPath(), "preload.js"),
167
+ offscreen: false,
168
+ devTools: true,
169
+ },
170
+ });
171
+ webChildren[(0, uuid_1.v4)()] = subWin;
172
+ remoteMain.enable(subWin.webContents);
173
+ const webArgz = JSON.stringify({
174
+ name: dest,
175
+ ports: [].toString(),
176
+ fs: destFolder,
177
+ });
178
+ // console.log("webArgz", webArgz);
179
+ subWin.loadFile(`${dest}.html`, {
180
+ query: {
181
+ requesting: encodeURIComponent(webArgz),
182
+ },
183
+ });
184
+ if (!fs_1.default.existsSync(destFolder)) {
185
+ fs_1.default.mkdirSync(destFolder, { recursive: true });
186
+ }
187
+ const stdout = fs_1.default.createWriteStream(`${destFolder}/stdout.log`);
188
+ subWin.webContents.on("console-message", (event, level, message, line, sourceId) => {
189
+ stdout.write(JSON.stringify({
190
+ event,
191
+ level,
192
+ message: JSON.stringify(message),
193
+ line,
194
+ sourceId,
195
+ }, null, 2));
196
+ stdout.write("\n");
197
+ });
198
+ subWin.on("closed", () => {
199
+ stdout.close();
200
+ console.log(`ending web ${t}`);
201
+ // childProcesses[t] = "done";
202
+ onDone(t);
203
+ });
204
+ electron_1.ipcMain.on("message", (message, data) => {
205
+ console.log("ipcMain message: " + JSON.stringify(data));
206
+ // process.exit();
207
+ });
208
+ };
209
+ const destinationOfRuntime = (f, r) => {
210
+ return path_1.default
211
+ .normalize(`${configs.buildDir}/${r}/${f}`)
212
+ .split(".")
213
+ .slice(0, -1)
214
+ .join(".");
215
+ };
216
+ puppeteer_in_electron_1.default.initialize(electron_1.app, 2999).then(async () => {
217
+ electron_1.app.on("ready", () => {
218
+ loadReport(configs);
219
+ console.log("running all the tests once initially");
220
+ configs.tests.forEach(([test, runtime, secondaryArtifacts]) => {
221
+ childProcesses[test] = "loaded";
222
+ if (runtime === "node") {
223
+ launchNode(test, destinationOfRuntime(test, "node"));
224
+ }
225
+ else if (runtime === "web") {
226
+ launchWeb(test, destinationOfRuntime(test, "web"));
227
+ }
228
+ else {
229
+ console.error("runtime makes no sense", runtime);
230
+ }
231
+ });
232
+ console.log("ready and watching for changes...", configs.buildDir);
233
+ fs_1.default.watch(configs.buildDir, {
234
+ recursive: true,
235
+ }, (eventType, changedFile) => {
236
+ // console.log(eventType);
237
+ if (changedFile) {
238
+ configs.tests.forEach(([test, runtime, secondaryArtifacts]) => {
239
+ if (eventType === "change" || eventType === "rename") {
240
+ if (changedFile ===
241
+ test
242
+ .replace("./", "node/")
243
+ .split(".")
244
+ .slice(0, -1)
245
+ .concat("mjs")
246
+ .join(".")) {
247
+ launchNode(test, destinationOfRuntime(test, "node"));
248
+ }
249
+ if (changedFile ===
250
+ test
251
+ .replace("./", "web/")
252
+ .split(".")
253
+ .slice(0, -1)
254
+ .concat("mjs")
255
+ .join(".")) {
256
+ launchWeb(test, destinationOfRuntime(test, "web"));
257
+ }
258
+ }
259
+ });
260
+ }
261
+ });
262
+ });
263
+ });
264
+ await puppeteer_in_electron_1.default.connect(electron_1.app, puppeteer_core_1.default);
265
+ };
266
+ main();
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = (config) => {
4
+ return {
5
+ bundle: true,
6
+ entryPoints: [config.features],
7
+ minify: config.minify === true,
8
+ outbase: config.outbase,
9
+ write: true,
10
+ outfile: `${config.outdir}/features.test.js`,
11
+ // external: ["graphology"],
12
+ format: "esm",
13
+ };
14
+ };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = (config) => {
4
+ return {
5
+ target: "esnext",
6
+ format: "esm",
7
+ splitting: true,
8
+ outExtension: { ".js": ".mjs" },
9
+ outbase: config.outbase,
10
+ jsx: "transform",
11
+ bundle: true,
12
+ minify: config.minify === true,
13
+ write: true,
14
+ loader: {
15
+ ".js": "jsx",
16
+ ".png": "binary",
17
+ ".jpg": "binary",
18
+ },
19
+ };
20
+ };
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const index_js_1 = __importDefault(require("./index.js"));
7
+ exports.default = (config, entryPoints) => {
8
+ return Object.assign(Object.assign({}, (0, index_js_1.default)(config)), { splitting: true, outdir: config.outdir + "/node", inject: [`./node_modules/testeranto/dist/cjs-shim.js`], supported: {
9
+ "dynamic-import": true,
10
+ }, define: {
11
+ "process.env.FLUENTFFMPEG_COV": "0",
12
+ }, absWorkingDir: process.cwd(), banner: {
13
+ js: `import { createRequire } from 'module';const require = createRequire(import.meta.url);`,
14
+ }, platform: "node", external: [
15
+ // "testeranto.json",
16
+ // "features.test.js",
17
+ // "react",
18
+ // "events",
19
+ // "ganache"
20
+ ...config.externals,
21
+ ], entryPoints: [...entryPoints], plugins: [
22
+ ...(config.nodePlugins || []),
23
+ {
24
+ name: "rebuild-notify",
25
+ setup(build) {
26
+ build.onEnd((result) => {
27
+ console.log(`node build ended with ${result.errors.length} errors`);
28
+ if (result.errors.length > 0) {
29
+ console.log(result);
30
+ }
31
+ // console.log(result);
32
+ // result.errors.length !== 0 && process.exit(-1);
33
+ });
34
+ },
35
+ },
36
+ ] });
37
+ };
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = (config) => {
4
+ return {
5
+ bundle: true,
6
+ entryPoints: ["./node_modules/testeranto/dist/module/report.js"],
7
+ minify: config.minify === true,
8
+ outbase: config.outbase,
9
+ write: true,
10
+ outfile: `${config.outdir}/report.js`,
11
+ external: ["tests.json", "features.test.js"],
12
+ };
13
+ };
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = (config) => {
4
+ return {
5
+ bundle: true,
6
+ entryPoints: [config.features],
7
+ minify: config.minify === true,
8
+ outbase: config.outbase,
9
+ write: true,
10
+ outfile: `${config.outdir}/tests.test.js`,
11
+ // external: ["graphology"]
12
+ };
13
+ };
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const path_1 = __importDefault(require("path"));
7
+ const index_js_1 = __importDefault(require("./index.js"));
8
+ exports.default = (config, entryPoints) => {
9
+ return Object.assign(Object.assign({}, (0, index_js_1.default)(config)), {
10
+ // inject: ["./node_modules/testeranto/dist/cjs-shim.js"],
11
+ // banner: {
12
+ // js: `import { createRequire } from 'module';const require = createRequire(import.meta.url);`,
13
+ // },
14
+ // splitting: true,
15
+ outdir: config.outdir + "/web", alias: {
16
+ react: path_1.default.resolve("./node_modules/react"),
17
+ }, external: [
18
+ "testeranto.json",
19
+ "features.test.ts",
20
+ // "url",
21
+ "react",
22
+ "electron",
23
+ "path",
24
+ "fs",
25
+ "stream",
26
+ "http",
27
+ "constants",
28
+ "net",
29
+ "assert",
30
+ "tls",
31
+ "os",
32
+ "child_process",
33
+ "readline",
34
+ "zlib",
35
+ "crypto",
36
+ "https",
37
+ ], platform: "browser", entryPoints: [...entryPoints], plugins: [
38
+ ...(config.webPlugins || []),
39
+ {
40
+ name: "rebuild-notify",
41
+ setup(build) {
42
+ build.onEnd((result) => {
43
+ console.log(`web build ended with ${result.errors.length} errors`);
44
+ if (result.errors.length > 0) {
45
+ console.log(result);
46
+ }
47
+ // console.log(result);
48
+ // result.errors.length !== 0 && process.exit(-1);
49
+ });
50
+ },
51
+ },
52
+ ] });
53
+ };