testeranto 0.49.9 → 0.62.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 (241) hide show
  1. package/.nvmrc +1 -0
  2. package/README.md +71 -9
  3. package/dist/cjs-shim.js +12 -0
  4. package/dist/common/Features.js +2 -3
  5. package/dist/common/Node.js +53 -61
  6. package/dist/common/Project.js +272 -606
  7. package/dist/common/SubPackages/puppeteer.js +19 -0
  8. package/dist/common/{subPackages → SubPackages}/react/component/node.js +4 -4
  9. package/dist/common/{subPackages → SubPackages}/react/component/web.js +4 -4
  10. package/dist/common/SubPackages/react/jsx/index.js +13 -0
  11. package/dist/common/SubPackages/react/jsx/node.js +10 -0
  12. package/dist/common/SubPackages/react/jsx/web.js +10 -0
  13. package/dist/common/{subPackages → SubPackages}/react-dom/component/node.js +6 -6
  14. package/dist/common/{subPackages → SubPackages}/react-dom/component/web.js +11 -12
  15. package/dist/common/SubPackages/react-dom/jsx/node.js +39 -0
  16. package/dist/common/{subPackages → SubPackages}/react-dom/jsx/web.js +6 -27
  17. package/dist/common/{subPackages → SubPackages}/react-test-renderer/MemoExoticComponent/node.js +2 -2
  18. package/dist/common/{subPackages → SubPackages}/react-test-renderer/component/index.js +26 -15
  19. package/dist/common/{subPackages/react-test-renderer/jsx → SubPackages/react-test-renderer/component}/node.js +3 -5
  20. package/dist/common/{subPackages/react-test-renderer/jsx → SubPackages/react-test-renderer/component}/web.js +3 -5
  21. package/dist/common/{subPackages → SubPackages}/react-test-renderer/fc/node.js +4 -4
  22. package/dist/common/{subPackages → SubPackages}/react-test-renderer/fc/web.js +4 -4
  23. package/dist/common/{subPackages → SubPackages}/react-test-renderer/jsx/index.js +8 -2
  24. package/dist/common/{subPackages/react-test-renderer/jsx-promised → SubPackages/react-test-renderer/jsx}/node.js +4 -4
  25. package/dist/common/{subPackages/react → SubPackages/react-test-renderer}/jsx/web.js +4 -4
  26. package/dist/common/{subPackages → SubPackages}/react-test-renderer/jsx-promised/index.js +2 -2
  27. package/dist/common/{subPackages/react/jsx → SubPackages/react-test-renderer/jsx-promised}/node.js +2 -2
  28. package/dist/common/Types.js +32 -0
  29. package/dist/common/Web.js +41 -112
  30. package/dist/common/electron.js +188 -44
  31. package/dist/common/esbuildConfigs/features.js +14 -0
  32. package/dist/common/esbuildConfigs/index.js +20 -0
  33. package/dist/common/esbuildConfigs/node.js +35 -0
  34. package/dist/common/esbuildConfigs/report.js +48 -0
  35. package/dist/common/esbuildConfigs/tests.js +14 -0
  36. package/dist/common/esbuildConfigs/web.js +50 -0
  37. package/dist/common/lib/abstractBase.js +193 -0
  38. package/dist/common/lib/basebuilder.js +86 -0
  39. package/dist/common/lib/browser.js +26 -0
  40. package/dist/common/lib/classBuilder.js +41 -0
  41. package/dist/common/lib/core.js +52 -0
  42. package/dist/common/lib/index.js +19 -0
  43. package/dist/common/nodeWriterElectron.js +55 -0
  44. package/dist/common/preload.js +22 -21
  45. package/dist/common/report.html.js +31 -0
  46. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  47. package/dist/common/web.html.js +22 -0
  48. package/dist/module/Features.js +2 -3
  49. package/dist/module/Node.js +53 -61
  50. package/dist/module/Project.js +272 -583
  51. package/dist/module/SubPackages/puppeteer.js +14 -0
  52. package/dist/module/{subPackages → SubPackages}/react/component/node.js +3 -3
  53. package/dist/module/{subPackages → SubPackages}/react/component/web.js +3 -3
  54. package/dist/module/SubPackages/react/jsx/index.js +10 -0
  55. package/dist/module/SubPackages/react/jsx/node.js +5 -0
  56. package/dist/module/SubPackages/react/jsx/web.js +5 -0
  57. package/dist/module/{subPackages → SubPackages}/react-dom/component/node.js +5 -5
  58. package/dist/module/{subPackages → SubPackages}/react-dom/component/web.js +10 -11
  59. package/dist/module/SubPackages/react-dom/jsx/node.js +31 -0
  60. package/dist/module/{subPackages → SubPackages}/react-dom/jsx/web.js +5 -26
  61. package/dist/module/{subPackages → SubPackages}/react-test-renderer/MemoExoticComponent/node.js +2 -2
  62. package/dist/module/{subPackages → SubPackages}/react-test-renderer/component/index.js +23 -15
  63. package/dist/module/{subPackages → SubPackages}/react-test-renderer/component/node.js +2 -2
  64. package/dist/module/{subPackages → SubPackages}/react-test-renderer/component/web.js +2 -2
  65. package/dist/module/{subPackages → SubPackages}/react-test-renderer/fc/node.js +3 -3
  66. package/dist/module/{subPackages → SubPackages}/react-test-renderer/fc/web.js +3 -3
  67. package/dist/module/{subPackages → SubPackages}/react-test-renderer/jsx/index.js +8 -2
  68. package/dist/module/SubPackages/react-test-renderer/jsx/node.js +5 -0
  69. package/dist/module/SubPackages/react-test-renderer/jsx/web.js +5 -0
  70. package/dist/module/{subPackages → SubPackages}/react-test-renderer/jsx-promised/index.js +2 -2
  71. package/dist/module/{subPackages/react-test-renderer/jsx → SubPackages/react-test-renderer/jsx-promised}/node.js +1 -1
  72. package/dist/module/Types.js +30 -1
  73. package/dist/module/Web.js +41 -112
  74. package/dist/module/electron.js +189 -45
  75. package/dist/module/esbuildConfigs/features.js +12 -0
  76. package/dist/module/esbuildConfigs/index.js +18 -0
  77. package/dist/module/esbuildConfigs/node.js +30 -0
  78. package/dist/module/esbuildConfigs/report.js +48 -0
  79. package/dist/module/esbuildConfigs/tests.js +12 -0
  80. package/dist/module/esbuildConfigs/web.js +45 -0
  81. package/dist/module/lib/abstractBase.js +185 -0
  82. package/dist/module/lib/basebuilder.js +82 -0
  83. package/dist/module/lib/browser.js +22 -0
  84. package/dist/module/lib/classBuilder.js +37 -0
  85. package/dist/module/lib/core.js +49 -0
  86. package/dist/module/lib/index.js +15 -0
  87. package/dist/module/nodeWriterElectron.js +52 -0
  88. package/dist/module/preload.js +22 -21
  89. package/dist/module/report.html.js +29 -0
  90. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  91. package/dist/module/web.html.js +20 -0
  92. package/dist/prebuild/Report.css +10326 -0
  93. package/dist/prebuild/Report.js +37456 -0
  94. package/dist/types/Features.d.ts +5 -5
  95. package/dist/types/Node.d.ts +4 -11
  96. package/dist/types/NodeWriter.d.ts +1 -1
  97. package/dist/types/Project.d.ts +2 -27
  98. package/dist/types/SubPackages/puppeteer.d.ts +6 -0
  99. package/dist/types/SubPackages/react/component/node.d.ts +7 -0
  100. package/dist/types/SubPackages/react/component/web.d.ts +7 -0
  101. package/dist/types/SubPackages/react/jsx/index.d.ts +15 -0
  102. package/dist/types/SubPackages/react/jsx/node.d.ts +4 -0
  103. package/dist/types/SubPackages/react/jsx/web.d.ts +4 -0
  104. package/dist/types/{subPackages → SubPackages}/react-dom/component/node.d.ts +2 -4
  105. package/dist/types/SubPackages/react-dom/component/web.d.ts +5 -0
  106. package/dist/types/{subPackages → SubPackages}/react-dom/jsx/index.d.ts +3 -3
  107. package/dist/types/SubPackages/react-dom/jsx/node.d.ts +6 -0
  108. package/dist/types/SubPackages/react-dom/jsx/web.d.ts +5 -0
  109. package/dist/types/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +5 -0
  110. package/dist/types/{subPackages → SubPackages}/react-test-renderer/component/index.d.ts +6 -6
  111. package/dist/types/SubPackages/react-test-renderer/component/node.d.ts +9 -0
  112. package/dist/types/SubPackages/react-test-renderer/component/web.d.ts +4 -0
  113. package/dist/types/SubPackages/react-test-renderer/fc/node.d.ts +8 -0
  114. package/dist/types/SubPackages/react-test-renderer/fc/web.d.ts +8 -0
  115. package/dist/types/{subPackages → SubPackages}/react-test-renderer/jsx/index.d.ts +5 -4
  116. package/dist/types/SubPackages/react-test-renderer/jsx/node.d.ts +9 -0
  117. package/dist/types/SubPackages/react-test-renderer/jsx/web.d.ts +9 -0
  118. package/dist/types/{subPackages → SubPackages}/react-test-renderer/jsx-promised/index.d.ts +4 -4
  119. package/dist/types/SubPackages/react-test-renderer/jsx-promised/node.d.ts +5 -0
  120. package/dist/types/SubPackages/react-test-renderer/jsx-promised/web.d.ts +5 -0
  121. package/dist/types/Types.d.ts +116 -3
  122. package/dist/types/Web.d.ts +4 -11
  123. package/dist/types/esbuildConfigs/features.d.ts +4 -0
  124. package/dist/types/esbuildConfigs/index.d.ts +4 -0
  125. package/dist/types/esbuildConfigs/node.d.ts +4 -0
  126. package/dist/types/esbuildConfigs/report.d.ts +0 -0
  127. package/dist/types/esbuildConfigs/tests.d.ts +4 -0
  128. package/dist/types/esbuildConfigs/web.d.ts +4 -0
  129. package/dist/types/lib/abstractBase.d.ts +102 -0
  130. package/dist/types/lib/basebuilder.d.ts +24 -0
  131. package/dist/types/lib/browser.d.ts +6 -0
  132. package/dist/types/lib/classBuilder.d.ts +6 -0
  133. package/dist/types/lib/core.d.ts +7 -0
  134. package/dist/types/lib/index.d.ts +57 -0
  135. package/dist/types/nodeWriterElectron.d.ts +2 -0
  136. package/dist/types/report.html.d.ts +2 -0
  137. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  138. package/dist/types/web.html.d.ts +2 -0
  139. package/electronBuild.ts +32 -0
  140. package/index.html +30 -0
  141. package/package.json +120 -85
  142. package/src/Features.ts +2 -4
  143. package/src/Node.ts +114 -160
  144. package/src/NodeWriter.ts +1 -4
  145. package/src/Project.ts +610 -753
  146. package/src/Report.tsx +30 -15
  147. package/src/SubPackages/puppeteer.ts +46 -0
  148. package/src/{subPackages → SubPackages}/react/component/node.ts +12 -32
  149. package/src/SubPackages/react/component/web.ts +53 -0
  150. package/src/SubPackages/react/jsx/index.ts +43 -0
  151. package/src/SubPackages/react/jsx/node.ts +29 -0
  152. package/src/SubPackages/react/jsx/web.ts +28 -0
  153. package/src/{subPackages → SubPackages}/react-dom/component/node.ts +11 -25
  154. package/src/{subPackages → SubPackages}/react-dom/component/web.ts +27 -32
  155. package/src/{subPackages → SubPackages}/react-dom/jsx/index.ts +3 -5
  156. package/src/SubPackages/react-dom/jsx/node.ts +68 -0
  157. package/src/{subPackages → SubPackages}/react-dom/jsx/web.ts +19 -62
  158. package/src/{subPackages → SubPackages}/react-test-renderer/MemoExoticComponent/node.ts +9 -28
  159. package/src/{subPackages → SubPackages}/react-test-renderer/component/index.ts +31 -29
  160. package/src/SubPackages/react-test-renderer/component/node.ts +22 -0
  161. package/src/SubPackages/react-test-renderer/component/web.ts +22 -0
  162. package/src/{subPackages → SubPackages}/react-test-renderer/fc/node.ts +14 -28
  163. package/src/{subPackages → SubPackages}/react-test-renderer/fc/web.ts +9 -25
  164. package/src/{subPackages → SubPackages}/react-test-renderer/jsx/index.ts +19 -16
  165. package/src/SubPackages/react-test-renderer/jsx/node.ts +24 -0
  166. package/src/SubPackages/react-test-renderer/jsx/web.ts +20 -0
  167. package/src/{subPackages → SubPackages}/react-test-renderer/jsx-promised/index.ts +7 -15
  168. package/src/SubPackages/react-test-renderer/jsx-promised/node.ts +19 -0
  169. package/src/SubPackages/react-test-renderer/jsx-promised/web.ts +22 -0
  170. package/src/Types.ts +334 -3
  171. package/src/Web.ts +104 -230
  172. package/src/cjs-shim.js +12 -0
  173. package/src/electron.ts +237 -46
  174. package/src/esbuildConfigs/features.ts +18 -0
  175. package/src/esbuildConfigs/index.ts +22 -0
  176. package/src/esbuildConfigs/node.ts +59 -0
  177. package/src/esbuildConfigs/report.ts +51 -0
  178. package/src/esbuildConfigs/tests.ts +20 -0
  179. package/src/esbuildConfigs/web.ts +73 -0
  180. package/src/lib/abstractBase.ts +459 -0
  181. package/src/lib/basebuilder.ts +253 -0
  182. package/src/lib/browser.ts +34 -0
  183. package/src/lib/classBuilder.ts +137 -0
  184. package/src/lib/core.ts +182 -0
  185. package/src/lib/index.ts +116 -0
  186. package/src/nodeWriterElectron.ts +71 -0
  187. package/src/preload.ts +23 -21
  188. package/src/report.html.ts +29 -0
  189. package/src/web.html.ts +20 -0
  190. package/tests/Rectangle.test.ts +189 -0
  191. package/tsconfig.json +19 -6
  192. package/tsconfig.module.json +15 -4
  193. package/tsconfig.types.json +14 -4
  194. package/yarn-error.log +3144 -0
  195. package/dist/common/core.js +0 -397
  196. package/dist/common/subPackages/react/jsx/index.js +0 -26
  197. package/dist/common/subPackages/react-dom/jsx/node.js +0 -95
  198. package/dist/common/subPackages/react-test-renderer/component/node.js +0 -8
  199. package/dist/common/subPackages/react-test-renderer/component/web.js +0 -8
  200. package/dist/module/Report.js +0 -186
  201. package/dist/module/core.js +0 -388
  202. package/dist/module/subPackages/react/jsx/index.js +0 -22
  203. package/dist/module/subPackages/react/jsx/node.js +0 -5
  204. package/dist/module/subPackages/react/jsx/web.js +0 -5
  205. package/dist/module/subPackages/react-dom/jsx/node.js +0 -87
  206. package/dist/module/subPackages/react-test-renderer/jsx/web.js +0 -5
  207. package/dist/module/subPackages/react-test-renderer/jsx-promised/node.js +0 -5
  208. package/dist/types/core.d.ts +0 -220
  209. package/dist/types/subPackages/react/component/node.d.ts +0 -12
  210. package/dist/types/subPackages/react/component/web.d.ts +0 -12
  211. package/dist/types/subPackages/react/jsx/index.d.ts +0 -15
  212. package/dist/types/subPackages/react/jsx/node.d.ts +0 -4
  213. package/dist/types/subPackages/react/jsx/web.d.ts +0 -4
  214. package/dist/types/subPackages/react-dom/component/web.d.ts +0 -19
  215. package/dist/types/subPackages/react-dom/jsx/node.d.ts +0 -8
  216. package/dist/types/subPackages/react-dom/jsx/web.d.ts +0 -5
  217. package/dist/types/subPackages/react-test-renderer/MemoExoticComponent/node.d.ts +0 -8
  218. package/dist/types/subPackages/react-test-renderer/component/node.d.ts +0 -9
  219. package/dist/types/subPackages/react-test-renderer/component/web.d.ts +0 -9
  220. package/dist/types/subPackages/react-test-renderer/fc/node.d.ts +0 -9
  221. package/dist/types/subPackages/react-test-renderer/fc/web.d.ts +0 -9
  222. package/dist/types/subPackages/react-test-renderer/jsx/node.d.ts +0 -4
  223. package/dist/types/subPackages/react-test-renderer/jsx/web.d.ts +0 -4
  224. package/dist/types/subPackages/react-test-renderer/jsx-promised/node.d.ts +0 -4
  225. package/dist/types/subPackages/react-test-renderer/jsx-promised/web.d.ts +0 -4
  226. package/src/core.ts +0 -1399
  227. package/src/subPackages/react/component/web.ts +0 -80
  228. package/src/subPackages/react/jsx/index.ts +0 -64
  229. package/src/subPackages/react/jsx/node.ts +0 -29
  230. package/src/subPackages/react/jsx/web.ts +0 -29
  231. package/src/subPackages/react-dom/jsx/node.ts +0 -146
  232. package/src/subPackages/react-test-renderer/component/node.ts +0 -30
  233. package/src/subPackages/react-test-renderer/component/web.ts +0 -30
  234. package/src/subPackages/react-test-renderer/jsx/node.ts +0 -31
  235. package/src/subPackages/react-test-renderer/jsx/web.ts +0 -31
  236. package/src/subPackages/react-test-renderer/jsx-promised/node.ts +0 -31
  237. package/src/subPackages/react-test-renderer/jsx-promised/web.ts +0 -31
  238. /package/dist/common/{subPackages → SubPackages}/react-dom/jsx/index.js +0 -0
  239. /package/dist/common/{subPackages → SubPackages}/react-test-renderer/jsx-promised/web.js +0 -0
  240. /package/dist/module/{subPackages → SubPackages}/react-dom/jsx/index.js +0 -0
  241. /package/dist/module/{subPackages → SubPackages}/react-test-renderer/jsx-promised/web.js +0 -0
package/src/Web.ts CHANGED
@@ -1,241 +1,115 @@
1
+ import type {
2
+ IBaseTest,
3
+ ITestImplementation,
4
+ ITestInterface,
5
+ ITestSpecification
6
+ } from "./Types";
7
+ import Testeranto from "./lib/core.js";
1
8
  import {
2
9
  ITTestResourceConfiguration,
3
10
  ITTestResourceRequest,
4
- ITTestShape,
5
- ITestArtificer,
6
11
  ITestJob,
7
- ITestSpecification,
8
- defaultTestResourceRequirement,
9
- } from "./core";
10
- import TesterantoLevelTwo from "./core";
11
-
12
- let webSocket: WebSocket;
13
- try {
14
- webSocket = new WebSocket("ws://localhost:8080");
15
- } catch (e) {
16
- console.error(e)
17
- }
18
-
19
-
20
- const receiveTestResourceConfigUnscheduled = async (t, testresource) => {
21
- const {
22
- failed,
23
- artifacts,
24
- logPromise
25
- } = await t.receiveTestResourceConfig(testresource);
26
-
27
- Promise.all([...artifacts, logPromise]).then(async () => {
28
- // ipcRenderer.invoke('quit-app', failed);
29
- (window as any).exit(failed)
30
- })
31
- }
32
-
33
- const receiveTestResourceConfigScheduled = async (t, testresource) => {
34
- const {
35
- failed,
36
- artifacts,
37
- logPromise
38
- } = await t.receiveTestResourceConfig(testresource);
39
-
40
- webSocket.send(
41
- JSON.stringify({
42
- type: "testeranto:adios",
43
- data: {
44
- failed,
45
- testResourceConfiguration:
46
- t.test.testResourceConfiguration,
47
- results: t.toObj(),
48
- },
12
+ defaultTestResourceRequirement
13
+ } from "./lib/index.js";
14
+
15
+ const remote = require('@electron/remote')
16
+
17
+ class WebTesteranto<
18
+ TestShape extends IBaseTest,
19
+ > extends Testeranto<
20
+ TestShape
21
+ > {
22
+ constructor(
23
+ input: TestShape["iinput"],
24
+ testSpecification: ITestSpecification<TestShape>,
25
+ testImplementation: ITestImplementation<TestShape, object>,
26
+ testResourceRequirement: ITTestResourceRequest,
27
+ testInterface: Partial<ITestInterface<TestShape>>,
28
+ ) {
29
+ super(
30
+ input,
31
+ testSpecification,
32
+ testImplementation,
33
+ testResourceRequirement,
34
+ (window as any).NodeWriter,
35
+ testInterface,
36
+ // BrowserWindow
37
+ );
38
+
39
+ if (process.argv[2]) {
40
+ const testResourceArg = decodeURIComponent(
41
+ new URLSearchParams(location.search).get('requesting') || ''
42
+ );
43
+
44
+ try {
45
+ const partialTestResource = JSON.parse(
46
+ testResourceArg
47
+ ) as ITTestResourceConfiguration;
48
+
49
+ this.receiveTestResourceConfig(this.testJobs[0], partialTestResource);
50
+
51
+ } catch (e) {
52
+ console.error(e);
53
+ // process.exit(-1);
54
+ }
55
+ } else {
56
+ // no-op
57
+ }
58
+
59
+ const requesting = new URLSearchParams(location.search).get('requesting');
60
+ if (requesting) {
61
+ const testResourceArg = decodeURIComponent(requesting);
62
+
63
+ try {
64
+ const partialTestResource = JSON.parse(
65
+ testResourceArg
66
+ ) as ITTestResourceConfiguration;
67
+
68
+ console.log("initial test resource", partialTestResource);
69
+ this.receiveTestResourceConfig(this.testJobs[0], partialTestResource);
70
+
71
+ } catch (e) {
72
+ console.error(e);
73
+ // process.exit(-1);
74
+ }
75
+ }
76
+ // const t: ITestJob = this.testJobs[0];
77
+
78
+
79
+
80
+ }
81
+
82
+ async receiveTestResourceConfig(t: ITestJob, partialTestResource: ITTestResourceConfiguration) {
83
+ const {
84
+ failed,
85
+ artifacts,
86
+ logPromise
87
+ } = await t.receiveTestResourceConfig(
88
+ partialTestResource,
89
+ remote
90
+ );
91
+
92
+ Promise.all([...artifacts, logPromise]).then(async () => {
93
+ var window = remote.getCurrentWindow();
94
+ // window.close();
49
95
  })
50
- );
51
-
52
- Promise.all([...artifacts, logPromise]).then(async () => {
53
- // ipcRenderer.invoke('quit-app', failed);
54
- (window as any).exit(failed)
55
- })
56
- }
57
-
58
- export default async <
59
- TestShape extends ITTestShape,
60
- IInput,
61
- ISubject,
62
- IStore,
63
- ISelection,
64
- WhenShape,
65
- IThenShape,
66
- IState
67
- >(
68
- input: IInput,
69
- testSpecification: ITestSpecification<
70
- TestShape,
71
- ISubject,
72
- IStore,
73
- ISelection,
74
- IThenShape
75
- >,
76
- testImplementation,
77
- testInterface: {
78
- actionHandler?: (b: (...any) => any) => any;
79
- andWhen: (
80
- store: IStore,
81
- actioner,
82
- testResource: ITTestResourceConfiguration
83
- ) => Promise<ISelection>;
84
- butThen?: (
85
- store: IStore,
86
- callback,
87
- testResource: ITTestResourceConfiguration
88
- ) => Promise<ISelection>;
89
- assertioner?: (t: IThenShape) => any;
90
-
91
- afterAll?: (store: IStore, artificer: ITestArtificer) => any;
92
- afterEach?: (
93
- store: IStore,
94
- key: string,
95
- artificer: ITestArtificer
96
- ) => Promise<unknown>;
97
- beforeAll?: (input: IInput, artificer: ITestArtificer) => Promise<ISubject>;
98
- beforeEach?: (
99
- subject: ISubject,
100
- initialValues,
101
- testResource: ITTestResourceConfiguration,
102
- artificer: ITestArtificer
103
- ) => Promise<IStore>;
104
- },
105
- testResourceRequirement: ITTestResourceRequest = defaultTestResourceRequirement
106
- ) => {
107
-
108
- console.log("web NodeWriter", (window as any).NodeWriter);
109
-
110
- const mrt = new TesterantoLevelTwo(
96
+ }
97
+
98
+ };
99
+
100
+ export default async <ITestShape extends IBaseTest>(
101
+ input: ITestShape['iinput'],
102
+ testSpecification: ITestSpecification<ITestShape>,
103
+ testImplementation: ITestImplementation<ITestShape, object>,
104
+ testInterface: Partial<ITestInterface<ITestShape>>,
105
+ testResourceRequirement: ITTestResourceRequest = defaultTestResourceRequirement,
106
+ ): Promise<Testeranto<ITestShape>> => {
107
+ return new WebTesteranto<ITestShape>(
111
108
  input,
112
109
  testSpecification,
113
110
  testImplementation,
114
- testInterface,
115
111
  testResourceRequirement,
116
- testInterface.assertioner || (async (t) => t as any),
117
- testInterface.beforeEach ||
118
- async function (subject: any, initialValues: any, testResource: any) {
119
- return subject as any;
120
- },
121
- testInterface.afterEach || (async (s) => s),
122
- testInterface.afterAll || ((store: IStore) => undefined),
123
- testInterface.butThen || (async (a) => a as any),
124
- testInterface.andWhen,
125
- testInterface.actionHandler ||
126
- function (b: (...any: any[]) => any) {
127
- return b;
128
- },
129
- (window as any).NodeWriter
130
- );
131
-
132
- const tl2: TesterantoLevelTwo<any, any, any, any, any, any, any, any> = mrt;
133
- const t: ITestJob = tl2.testJobs[0];
134
- const testResourceArg = decodeURIComponent(
135
- new URLSearchParams(location.search).get('requesting') || ''
136
- );
137
-
138
- try {
139
- const partialTestResource = JSON.parse(
140
- testResourceArg
141
- ) as ITTestResourceConfiguration;
142
-
143
- console.log("initial test resource", partialTestResource);
144
-
145
- if (partialTestResource.scheduled) {
146
- console.log("test is scheduled");
147
-
148
- console.log("awaiting test resources via WS...");
149
- webSocket.addEventListener("open", (event) => {
150
- webSocket.addEventListener("message", (event) => {
151
- console.log("Message from server ", event.data);
152
- });
153
-
154
- const r = JSON.stringify({
155
- type: "testeranto:hola",
156
- data: {
157
- requirement: {
158
- ...testResourceRequirement,
159
- name: partialTestResource.name
160
- }
161
- },
162
- });
163
-
164
- webSocket.send(r);
165
-
166
- console.log("awaiting test resources via websocket...", r);
167
- webSocket.onmessage = (
168
- async (msg: MessageEvent<any>) => {
169
- console.log("message: ", msg);
170
-
171
- const resourcesFromWs = JSON.parse(msg.data);
172
- console.log("secondary test resource", resourcesFromWs);
173
-
174
- const secondTestResource = {
175
- fs: ".",
176
- ...JSON.parse(JSON.stringify(partialTestResource)),
177
- ...JSON.parse(JSON.stringify(resourcesFromWs)),
178
- } as ITTestResourceConfiguration;
179
-
180
- console.log("final test resource", secondTestResource);
181
- receiveTestResourceConfigScheduled(t, secondTestResource);
182
- }
183
- );
184
- });
185
- } else {
186
- receiveTestResourceConfigUnscheduled(t, partialTestResource);
187
- }
112
+ testInterface,
113
+ )
188
114
 
189
- // const partialTestResource = JSON.parse(
190
- // testResourceArg
191
- // ) as ITTestResourceConfiguration;
192
-
193
- // if (partialTestResource.fs && partialTestResource.ports) {
194
- // receiveTestResourceConfig(t, partialTestResource);
195
-
196
-
197
- // } else {
198
- // console.log("test configuration is incomplete", partialTestResource);
199
- // console.log(
200
- // "requesting test resources via ws",
201
- // testResourceRequirement
202
- // );
203
-
204
- // webSocket.addEventListener("open", (event) => {
205
- // webSocket.addEventListener("message", (event) => {
206
- // console.log("Message from server ", event.data);
207
- // });
208
-
209
- // const r = JSON.stringify({
210
- // type: "testeranto:hola",
211
- // data: {
212
- // testResourceRequirement,
213
- // },
214
- // });
215
-
216
- // webSocket.send(r);
217
-
218
- // console.log("awaiting test resources via websocket...", r);
219
- // webSocket.onmessage = (
220
- // async (msg: MessageEvent<any>) => {
221
- // console.log("message: ", msg);
222
-
223
- // const resourcesFromPm2 = msg.data.testResourceConfiguration;
224
- // const secondTestResource = {
225
- // fs: ".",
226
- // ...JSON.parse(JSON.stringify(partialTestResource)),
227
- // ...JSON.parse(JSON.stringify(resourcesFromPm2)),
228
- // } as ITTestResourceConfiguration;
229
-
230
- // console.log("secondTestResource", secondTestResource);
231
- // receiveTestResourceConfig(t, secondTestResource);
232
- // }
233
- // );
234
- // });
235
- // }
236
-
237
- } catch (e) {
238
- console.error(e);
239
- // process.exit(-1);
240
- }
241
115
  };
@@ -0,0 +1,12 @@
1
+ import { createRequire } from 'node:module';
2
+ import path from 'node:path';
3
+ import url from 'node:url';
4
+
5
+ // globalThis.require = createRequire(import.meta.url);
6
+ // globalThis.__filename = url.fileURLToPath(import.meta.url);
7
+ // globalThis.__dirname = path.dirname(__filename);
8
+
9
+ // const p = `${import.meta.url}/..`;
10
+ // globalThis.require = createRequire(`${import.meta.url}/..`);
11
+ // globalThis.__filename = url.fileURLToPath(`${import.meta.url}/..`);
12
+ // globalThis.__dirname = path.dirname(`${__filename}/..`);
package/src/electron.ts CHANGED
@@ -1,59 +1,250 @@
1
- import { app, BrowserWindow, ipcMain } from "electron";
1
+ import { app, BrowserWindow, utilityProcess } from "electron";
2
+ import pie from "puppeteer-in-electron";
3
+ import puppeteer from "puppeteer-core";
4
+ import { IBuiltConfig, IJsonConfig, IRunTime, ITestTypes } from "./Types";
5
+ import fs from "fs";
2
6
  import path from "path";
3
- import url from "url";
7
+ import { jsonc } from 'jsonc';
4
8
 
5
- let win: BrowserWindow;
9
+ const remoteMain = require("@electron/remote/main");
6
10
 
7
- function createWindow() {
8
- win = new BrowserWindow({
11
+ remoteMain.initialize();
9
12
 
10
- webPreferences: {
11
- devTools: true,
12
- nodeIntegration: true,
13
- nodeIntegrationInWorker: true,
14
- contextIsolation: false,
15
- preload: path.join(app.getAppPath(), 'preload.js'),
16
- sandbox: false
13
+ const main = async () => {
17
14
 
18
- },
19
- width: 800,
20
- height: 600,
21
- show: true,
22
- });
23
- const u = url.format({
24
- pathname: path.join(process.cwd(), process.argv[2]),
25
- protocol: "file:",
26
- slashes: true,
27
- query: {
28
- requesting: encodeURIComponent(process.argv[3]),
29
- }
15
+ const configs = jsonc.parse(
16
+ (await fs.readFileSync("./docs/testeranto.json")).toString()
17
+ ) as IBuiltConfig;
18
+
19
+ const loadReport = (configs: IBuiltConfig) => {
20
+ const win = new BrowserWindow(
21
+ {
22
+ show: true,
23
+ webPreferences: {
24
+ offscreen: false,
25
+ devTools: true,
26
+ }
27
+ }
28
+ );
29
+
30
+ win.loadFile(`/${configs.buildDir}/report.html`).then(async (x) => {
31
+ // pie.connect(app, puppeteer).then(async (browser) => {
32
+ // pie.getPage(browser, win).then(async (page) => {
33
+ // await page.screenshot({
34
+ // path: 'electron-puppeteer-screenshot1.jpg'
35
+ // });
36
+ // })
37
+ // })
38
+ })
39
+ }
40
+
41
+ const launchNode = (t: string, x: string) => {
42
+ const f = x.replace(".ts", ".mjs");
43
+
44
+ const a = JSON.stringify(
45
+ {
46
+ scheduled: true,
47
+ name: x,
48
+ ports: [],
49
+ fs:
50
+ path.resolve(
51
+ configs.buildDir,
52
+ "node",
53
+ t,
54
+ ),
55
+ }
56
+ )
57
+ console.log("launchNode", f, a);
58
+
59
+ const child = utilityProcess.fork(f, [a], {});
60
+ child.postMessage({ message: 'hello' })
61
+ child.on('message', (data) => {
62
+ console.log("from child", data);
63
+ launchWebSecondary(process.cwd() + data);
64
+ })
65
+ child.on('exit', (data) => {
66
+ console.log("node process ended with: ", data);
67
+ fileStream.close()
68
+ })
69
+ // child.stdout
70
+ // child..on("", (data) => {
71
+ // console.log("from child", data) // hello world!
72
+ // launchWebSecondary(process.cwd() + data);
73
+ // })
74
+ // Create a write stream for the file
75
+ const fileStream = fs.createWriteStream('errors.txt');
76
+
77
+ // Pipe the child process's stdout to the file
78
+ child.stdout?.pipe(fileStream);
79
+
80
+ // // Handle errors
81
+ // child.on('error', (err) => {
82
+ // console.error('Error spawning child process:', err);
83
+ // });
84
+
85
+ // fileStream.on('error', (err) => {
86
+ // console.error('Error writing to file:', err);
87
+ // });
88
+
89
+ // // Log a message when the child process exits
90
+ // child.on('close', (code) => {
91
+ // console.log(`Child process exited with code ${code}`);
92
+ // });
93
+ // console.log("child", child);
94
+ // child.stdout?.on("data", (x) => {
95
+ // console.log("x", x)
96
+ // })
97
+ }
98
+
99
+ const launchWebSecondary = (htmlFile: string) => {
100
+ console.log("launchWebSecondary", htmlFile)
101
+ const subWin = new BrowserWindow(
102
+ {
103
+ show: true,
104
+
105
+ webPreferences: {
106
+ nodeIntegration: true,
107
+ nodeIntegrationInWorker: true,
108
+ contextIsolation: false,
109
+ preload: path.join(app.getAppPath(), 'preload.js'),
110
+ offscreen: false,
111
+ devTools: false,
112
+ }
113
+ }
114
+
115
+ )
116
+ remoteMain.enable(subWin.webContents);
117
+ subWin.webContents.openDevTools()
118
+ subWin.loadFile(htmlFile);
119
+
120
+ }
121
+
122
+ const launchWeb = (t: string, changedFile: string) => {
123
+ console.log("launchWeb", changedFile)
124
+ const subWin = new BrowserWindow(
125
+ {
126
+ show: true,
127
+
128
+ webPreferences: {
129
+ nodeIntegration: true,
130
+ nodeIntegrationInWorker: true,
131
+ contextIsolation: false,
132
+ preload: path.join(app.getAppPath(), 'preload.js'),
133
+ offscreen: false,
134
+ devTools: true,
135
+ }
136
+ }
137
+
138
+ )
139
+ remoteMain.enable(subWin.webContents);
140
+ // subWin.webContents.openDevTools()
141
+
142
+ const htmlFile = changedFile.split(".").slice(0, -1).concat("html").join(".")
143
+
144
+ subWin.loadFile(htmlFile, {
145
+ query: {
146
+ requesting: encodeURIComponent(JSON.stringify({
147
+ name: changedFile,
148
+ ports: [].toString(),
149
+ fs:
150
+ path.resolve(
151
+ configs.buildDir,
152
+ "web",
153
+ t,
154
+ ),
155
+ }
156
+ ))
157
+ }
158
+ })
159
+
160
+ }
161
+
162
+ const watcher = (test: string, runtime: IRunTime) => {
163
+ return path.normalize(
164
+ `${configs.buildDir}/${runtime}/${test.split('.').slice(0, -1).concat('mjs').join('.')}`
165
+ );
166
+ };
167
+
168
+ const changer = (f: string) => {
169
+ return path.normalize(`${configs.buildDir}/${f}`);
170
+ };
171
+ const changer2 = (f: string, r: IRunTime) => {
172
+ return path.normalize(`${configs.buildDir}/${r}/${f}`);
173
+ };
174
+
175
+ pie.initialize(app, 2999).then(async () => {
176
+
177
+ app.on("ready", () => {
178
+ loadReport(configs);
179
+
180
+ console.log("running all the tests once initially");;
181
+ configs.modules.forEach((t) => {
182
+ if (t.runtime === "node") {
183
+ launchNode(t.test, changer2(t.test, "node"));
184
+ } else if (t.runtime === "web") {
185
+ launchWeb(t.test, changer2(t.test, "web"));
186
+ } else {
187
+ console.error("runtime makes no sense", t.runtime);
188
+ }
189
+ })
190
+
191
+
192
+ console.log("ready and watching for changes...", configs.buildDir);
193
+ fs.watch(configs.buildDir, {
194
+ recursive: true,
195
+ }, (eventType, changedFile) => {
196
+ console.log(eventType, changedFile);
197
+ if (changedFile) {
198
+ configs.modules.forEach((t) => {
199
+ if (watcher(t.test, t.runtime) === changer(changedFile)) {
200
+ if (t.runtime === "node") {
201
+ launchNode(t.test, changer(changedFile))
202
+ } else if (t.runtime === "web") {
203
+ launchWeb(t.test, changer(changedFile))
204
+ } else {
205
+ console.error("runtime makes no sense", t.runtime);
206
+ }
207
+ }
208
+ })
209
+ }
210
+
211
+ })
212
+ });
30
213
  });
31
- console.log("loading", u);
32
- win.loadURL(u);
33
- win.webContents.openDevTools()
34
- }
35
214
 
36
- app.on("ready", createWindow);
215
+ await pie.connect(app, puppeteer);
216
+
217
+ };
218
+
219
+ main();
220
+
221
+ // ipcMain.handle('web-log', (x, message: string) => {
222
+ // console.log("web-log)", message);
223
+ // });
37
224
 
38
- ipcMain.handle('web-log', (x, message: string) => {
39
- console.log("web-log)", message);
40
- });
225
+ // ipcMain.handle('web-error', (x, message: string) => {
226
+ // console.log("web-error)", message);
227
+ // });
41
228
 
42
- ipcMain.handle('web-error', (x, message: string) => {
43
- console.log("web-error)", message);
44
- });
229
+ // ipcMain.handle('web-warn', (x, message: string) => {
230
+ // console.log("web-warn)", message);
231
+ // });
45
232
 
46
- ipcMain.handle('web-warn', (x, message: string) => {
47
- console.log("web-warn)", message);
48
- });
233
+ // ipcMain.handle('web-info', (x, message: string) => {
234
+ // console.log("web-info)", message);
235
+ // });
49
236
 
50
- ipcMain.handle('web-info', (x, message: string) => {
51
- console.log("web-info)", message);
52
- });
237
+ // ipcMain.handle('quit-app', (x, failed: number) => {
238
+ // console.log("quit-app", failed);
239
+ // app.exit(failed);
240
+ // });
53
241
 
54
- ipcMain.handle('quit-app', (x, failed: number) => {
55
- console.log("quit-app", failed);
56
- // app.exit(failed);
57
- });
242
+ // process.stdin.on("data", (configTests) => {
243
+ // main(JSON.parse(configTests.toString()) as ITestTypes[]);
244
+ // });
58
245
 
59
- export { };
246
+ // const watchables = (tests: ITestTypes[]) => {
247
+ // return tests.map((t) => {
248
+ // return [t[1], `dist/${t[1]}/${t[0].replace(".mts", ".mjs")}`]
249
+ // })
250
+ // }
@@ -0,0 +1,18 @@
1
+ import { IBaseConfig } from "../Types";
2
+
3
+ import { BuildOptions } from "esbuild";
4
+
5
+ export default (config: IBaseConfig): BuildOptions => {
6
+ return {
7
+ bundle: true,
8
+ entryPoints: [config.features],
9
+ minify: config.minify === true,
10
+ outbase: config.outbase,
11
+ write: true,
12
+
13
+ outfile: `${config.outdir}/features.test.js`,
14
+ // external: ["graphology"],
15
+
16
+ format: "esm",
17
+ }
18
+ }
@@ -0,0 +1,22 @@
1
+ import { BuildOptions } from "esbuild";
2
+ import { config } from "process";
3
+ import { IBaseConfig } from "../Types";
4
+
5
+ export default (config: IBaseConfig): BuildOptions => {
6
+ return {
7
+ target: "esnext",
8
+ format: "esm",
9
+ splitting: true,
10
+ outExtension: { '.js': '.mjs' },
11
+ outbase: config.outbase,
12
+ jsx: 'transform',
13
+ bundle: true,
14
+ minify: config.minify === true,
15
+ write: true,
16
+ loader: {
17
+ '.js': 'jsx',
18
+ '.png': 'binary',
19
+ '.jpg': 'binary',
20
+ },
21
+ };
22
+ }