testeranto 0.166.0 → 0.171.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 (187) hide show
  1. package/dist/common/src/NavBar.js +45 -0
  2. package/dist/common/src/PM/main.js +81 -59
  3. package/dist/common/src/Pure.js +17 -15
  4. package/dist/common/src/ReportServer.js +48 -5
  5. package/dist/common/src/Web.js +35 -20
  6. package/dist/common/src/components/SunriseAnimation.test/implementation.js +1 -0
  7. package/dist/common/src/components/SunriseAnimation.test/index.js +1 -0
  8. package/dist/common/src/components/SunriseAnimation.test/interface.js +1 -0
  9. package/dist/common/src/components/SunriseAnimation.test/specification.js +1 -0
  10. package/dist/common/src/components/TestStatusBadge.js +55 -0
  11. package/dist/common/src/components/pure/ProjectPageView.js +204 -0
  12. package/dist/common/src/components/pure/ProjectPageView.test/adapter.js +20 -0
  13. package/dist/common/src/components/pure/ProjectPageView.test/implementation.js +71 -0
  14. package/dist/common/src/components/pure/ProjectPageView.test/index.js +10 -0
  15. package/dist/common/src/components/pure/ProjectPageView.test/specification.js +19 -0
  16. package/dist/common/src/components/pure/ProjectPageView.test/types.js +2 -0
  17. package/dist/common/src/lib/BaseSuite.js +3 -3
  18. package/dist/common/src/lib/BaseSuite.test/test.js +1 -1
  19. package/dist/common/src/lib/abstractBase.js +41 -14
  20. package/dist/common/src/lib/baseBuilder.test/baseBuilder.test.adapter.js +1 -1
  21. package/dist/common/src/lib/baseBuilder.test/baseBuilder.test.mock.js +1 -1
  22. package/dist/common/src/lib/basebuilder.js +9 -7
  23. package/dist/common/src/lib/core.test/MockCore.js +17 -15
  24. package/dist/common/src/lib/pmProxy.js +185 -64
  25. package/dist/common/testeranto.config.js +6 -0
  26. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  27. package/dist/module/src/App.js +3 -3
  28. package/dist/module/src/PM/main.js +81 -59
  29. package/dist/module/src/ProjectsPage.js +1 -110
  30. package/dist/module/src/Pure.js +17 -15
  31. package/dist/module/src/ReportServer.js +48 -5
  32. package/dist/module/src/TestPage.js +45 -16
  33. package/dist/module/src/Web.js +35 -20
  34. package/dist/module/src/components/SunriseAnimation.test/implementation.js +1 -0
  35. package/dist/module/src/components/SunriseAnimation.test/index.js +1 -0
  36. package/dist/module/src/components/SunriseAnimation.test/interface.js +1 -0
  37. package/dist/module/src/components/SunriseAnimation.test/specification.js +1 -0
  38. package/dist/module/src/components/pure/ProjectPageView.js +197 -0
  39. package/dist/module/src/components/pure/ProjectPageView.test/adapter.js +17 -0
  40. package/dist/module/src/components/pure/ProjectPageView.test/implementation.js +68 -0
  41. package/dist/module/src/components/pure/ProjectPageView.test/index.js +5 -0
  42. package/dist/module/src/components/pure/ProjectPageView.test/specification.js +15 -0
  43. package/dist/module/src/components/pure/ProjectPageView.test/types.js +1 -0
  44. package/dist/module/src/components/pure/ProjectsPageView.js +58 -0
  45. package/dist/module/src/components/pure/TestPageView.js +136 -0
  46. package/dist/module/src/components/stateful/ProjectPage.js +63 -0
  47. package/dist/module/src/components/stateful/ProjectsPage.js +55 -0
  48. package/dist/module/src/components/stateful/TestPage.js +82 -0
  49. package/dist/module/src/lib/BaseSuite.js +3 -3
  50. package/dist/module/src/lib/BaseSuite.test/test.js +1 -1
  51. package/dist/module/src/lib/abstractBase.js +41 -14
  52. package/dist/module/src/lib/baseBuilder.test/baseBuilder.test.adapter.js +1 -1
  53. package/dist/module/src/lib/baseBuilder.test/baseBuilder.test.mock.js +1 -1
  54. package/dist/module/src/lib/basebuilder.js +9 -7
  55. package/dist/module/src/lib/core.test/MockCore.js +17 -15
  56. package/dist/module/src/lib/pmProxy.js +185 -64
  57. package/dist/module/testeranto.config.js +6 -0
  58. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  59. package/dist/prebuild/App.js +541 -495
  60. package/dist/prebuild/ReportServer.mjs +44 -4
  61. package/dist/prebuild/run.mjs +67 -39
  62. package/dist/types/src/NavBar.d.ts +19 -0
  63. package/dist/types/src/PM/index.d.ts +3 -1
  64. package/dist/types/src/PM/main.d.ts +0 -4
  65. package/dist/types/src/PM/node.d.ts +2 -2
  66. package/dist/types/src/components/SunriseAnimation.test/interface.d.ts +0 -0
  67. package/dist/types/src/components/SunriseAnimation.test/specification.d.ts +0 -0
  68. package/dist/types/src/components/TestStatusBadge.d.ts +15 -0
  69. package/dist/types/src/components/pure/ProjectPageView.d.ts +14 -0
  70. package/dist/types/src/components/pure/ProjectPageView.test/adapter.d.ts +3 -0
  71. package/dist/types/src/components/pure/ProjectPageView.test/implementation.d.ts +3 -0
  72. package/dist/types/src/components/pure/ProjectPageView.test/index.d.ts +3 -0
  73. package/dist/types/src/components/pure/ProjectPageView.test/specification.d.ts +3 -0
  74. package/dist/types/src/components/pure/ProjectPageView.test/types.d.ts +39 -0
  75. package/dist/types/src/lib/BaseSuite.d.ts +2 -0
  76. package/dist/types/src/lib/abstractBase.d.ts +12 -0
  77. package/dist/types/src/lib/index.d.ts +0 -1
  78. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  79. package/package.json +3 -2
  80. package/src/App.tsx +5 -9
  81. package/src/PM/index.ts +1 -1
  82. package/src/PM/main.ts +87 -82
  83. package/src/PM/node.ts +2 -2
  84. package/src/ProjectsPage.tsx +1 -164
  85. package/src/Pure.ts +17 -17
  86. package/src/ReportServer.ts +49 -6
  87. package/src/TestPage.tsx +78 -5
  88. package/src/Web.ts +35 -35
  89. package/src/components/SunriseAnimation.test/implementation.ts +0 -0
  90. package/src/components/SunriseAnimation.test/index.ts +0 -0
  91. package/src/components/SunriseAnimation.test/interface.ts +0 -0
  92. package/src/components/SunriseAnimation.test/specification.ts +0 -0
  93. package/src/components/pure/ProjectPageView.test/adapter.ts +21 -0
  94. package/src/components/pure/ProjectPageView.test/implementation.tsx +84 -0
  95. package/src/components/pure/ProjectPageView.test/index.ts +8 -0
  96. package/src/components/pure/ProjectPageView.test/specification.ts +31 -0
  97. package/src/components/pure/ProjectPageView.test/types.ts +55 -0
  98. package/src/components/pure/ProjectPageView.tsx +332 -0
  99. package/src/components/pure/ProjectsPageView.tsx +99 -0
  100. package/src/components/pure/TestPageView.tsx +278 -0
  101. package/src/components/stateful/ProjectPage.tsx +83 -0
  102. package/src/components/stateful/ProjectsPage.tsx +73 -0
  103. package/src/components/stateful/TestPage.tsx +107 -0
  104. package/src/lib/BaseSuite.test/test.ts +1 -1
  105. package/src/lib/BaseSuite.ts +9 -4
  106. package/src/lib/abstractBase.ts +45 -14
  107. package/src/lib/baseBuilder.test/baseBuilder.test.adapter.ts +1 -1
  108. package/src/lib/baseBuilder.test/baseBuilder.test.mock.ts +1 -1
  109. package/src/lib/basebuilder.ts +9 -9
  110. package/src/lib/core.test/MockCore.ts +26 -19
  111. package/src/lib/index.ts +1 -1
  112. package/src/lib/pmProxy.ts +184 -87
  113. package/testeranto/App.js +541 -495
  114. package/testeranto/bundles/node/allTests/{chunk-4ONUZRZ4.mjs → chunk-3EUGBAOM.mjs} +1 -1
  115. package/testeranto/bundles/node/allTests/{chunk-FFBRDUBH.mjs → chunk-E75CSRER.mjs} +247 -124
  116. package/testeranto/bundles/node/allTests/{chunk-NQEP7SN4.mjs → chunk-M6DO7VMB.mjs} +1 -1
  117. package/testeranto/bundles/node/allTests/metafile.json +41 -41
  118. package/testeranto/bundles/node/allTests/src/lib/BaseSuite.test/node.test.mjs +4 -4
  119. package/testeranto/bundles/node/allTests/src/lib/baseBuilder.test/baseBuilder.test.node.mjs +4 -4
  120. package/testeranto/bundles/node/allTests/src/lib/classBuilder.test/classBuilder.test.mjs +3 -3
  121. package/testeranto/bundles/node/allTests/src/lib/core.test/core.test.mjs +11 -23
  122. package/testeranto/bundles/node/allTests/src/lib/pmProxy.test/index.mjs +2 -2
  123. package/testeranto/bundles/pure/allTests/{chunk-CSMXYJ65.mjs → chunk-KHDVEHF7.mjs} +3 -18
  124. package/testeranto/bundles/pure/allTests/{chunk-QK4IXLF6.mjs → chunk-VMUSFSZM.mjs} +247 -124
  125. package/testeranto/bundles/pure/allTests/metafile.json +77 -47
  126. package/testeranto/bundles/pure/allTests/src/Pure.test.mjs +2 -2
  127. package/testeranto/bundles/pure/allTests/src/lib/BaseSuite.test/pure.test.mjs +3 -3
  128. package/testeranto/bundles/pure/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure.mjs +3 -30
  129. package/testeranto/bundles/web/allTests/chunk-HPYA4YZC.mjs +2283 -0
  130. package/testeranto/bundles/web/allTests/{chunk-TU3MJSSI.mjs → chunk-RLDR6LJN.mjs} +302 -127
  131. package/testeranto/bundles/web/allTests/chunk-U7AW26HL.mjs +997 -0
  132. package/testeranto/bundles/web/allTests/metafile.json +15065 -46
  133. package/testeranto/bundles/web/allTests/src/components/pure/ProjectPageView.test/index.html +19 -0
  134. package/testeranto/bundles/web/allTests/src/components/pure/ProjectPageView.test/index.mjs +37524 -0
  135. package/testeranto/bundles/web/allTests/src/lib/BaseSuite.test/web.test.mjs +20 -2
  136. package/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.mjs +27 -3
  137. package/testeranto/reports/allTests/config.json +8 -0
  138. package/testeranto/reports/allTests/src/Pure.test/pure/type_errors.txt +9 -3
  139. package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/bdd_errors.txt +1 -0
  140. package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/lint_errors.txt +13 -0
  141. package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/logs.txt +50 -0
  142. package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/message.txt +2 -0
  143. package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/prompt.txt +17 -0
  144. package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/tests.json +32 -0
  145. package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/type_errors.txt +68 -0
  146. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/logs.txt +0 -0
  147. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/tests.json +6 -3
  148. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/type_errors.txt +8 -1
  149. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/tests.json +6 -3
  150. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/type_errors.txt +9 -3
  151. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/logs.txt +0 -0
  152. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/prompt.txt +2 -2
  153. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/tests.json +6 -3
  154. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/type_errors.txt +10 -5
  155. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/logs.txt +0 -0
  156. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/tests.json +18 -9
  157. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/type_errors.txt +8 -1
  158. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/type_errors.txt +10 -5
  159. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/logs.txt +0 -0
  160. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/prompt.txt +2 -2
  161. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/tests.json +18 -9
  162. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/type_errors.txt +10 -5
  163. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/logs.txt +0 -0
  164. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/tests.json +36 -18
  165. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/type_errors.txt +8 -1
  166. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/lint_errors.txt +0 -12
  167. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/logs.txt +2 -2
  168. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/type_errors.txt +11 -8
  169. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/logs.txt +0 -0
  170. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/tests.json +28 -14
  171. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/type_errors.txt +8 -1
  172. package/testeranto/reports/allTests/summary.json +16 -9
  173. package/testeranto/reportsweb_build_errors +25 -0
  174. package/testeranto.config.ts +7 -0
  175. package/tsc.log +313 -237
  176. package/testeranto/bundles/web/allTests/src/lib/BaseSuite.test/web.test/manifest.json +0 -1
  177. package/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/manifest.json +0 -1
  178. package/testeranto/reports/allTests/src/Pure.test/pure/manifest.json +0 -1
  179. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/manifest.json +0 -1
  180. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/manifest.json +0 -1
  181. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/manifest.json +0 -1
  182. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/manifest.json +0 -1
  183. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/manifest.json +0 -1
  184. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/manifest.json +0 -1
  185. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/manifest.json +0 -1
  186. /package/{testeranto/reports/allTests/src/Pure.test/pure/logs.txt → dist/types/src/components/SunriseAnimation.test/implementation.d.ts} +0 -0
  187. /package/{testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/logs.txt → dist/types/src/components/SunriseAnimation.test/index.d.ts} +0 -0
@@ -2,11 +2,11 @@
2
2
  import React from 'react';
3
3
  import ReactDom from "react-dom/client";
4
4
  import { HashRouter as Router, Routes, Route } from 'react-router-dom';
5
- import { ProjectsPage } from './ProjectsPage';
6
- import { ProjectPage } from './ProjectPage';
7
- import { TestPage } from './TestPage';
5
+ import { TestPage } from './components/stateful/TestPage';
8
6
  import { Container } from 'react-bootstrap';
9
7
  import { SettingsButton } from './SettingsButton';
8
+ import { ProjectPage } from './components/stateful/ProjectPage';
9
+ import { ProjectsPage } from './components/stateful/ProjectsPage';
10
10
  export const App = () => {
11
11
  return (React.createElement(Router, null,
12
12
  React.createElement("div", { className: "d-flex flex-column min-vh-100", key: window.location.pathname },
@@ -145,7 +145,7 @@ export class PM_Main extends PM_WithEslintAndTsc {
145
145
  process.exit(-1);
146
146
  }
147
147
  const builtfile = dest;
148
- const webSideCares = [];
148
+ // const webSideCares: Page[] = [];
149
149
  // fs.writeFileSync(
150
150
  // `${reportDest}/stdlog.txt`,
151
151
  // "THIS FILE IS AUTO GENERATED. IT IS PURPOSEFULLY LEFT BLANK."
@@ -182,32 +182,37 @@ export class PM_Main extends PM_WithEslintAndTsc {
182
182
  statusMessagePretty(results.fails, src, "pure");
183
183
  this.bddTestIsNowDone(src, results.fails);
184
184
  })
185
- .catch((e) => {
186
- console.log(ansiC.red(`launchPure - ${src} errored with: ${e}`));
185
+ .catch((e1) => {
186
+ console.log(ansiC.red(`launchPure - ${src} errored with: ${e1}`));
187
187
  this.bddTestIsNowDone(src, -1);
188
+ statusMessagePretty(-1, src, "pure");
188
189
  });
189
190
  // .finally(() => {
190
191
  // // webSideCares.forEach((webSideCar) => webSideCar.close());
191
192
  // });
192
193
  })
193
- .catch((e) => {
194
+ .catch((e2) => {
194
195
  console.log(ansiColors.red(`pure ! ${src} failed to execute. No "tests.json" file was generated. Check ${reportDest}/logs.txt for more info`));
195
- this.writeFileSync(`${reportDest}/logs.txt`, e.stack, src);
196
+ this.writeFileSync(`${reportDest}/logs.txt`, e2.stack, src);
196
197
  this.bddTestIsNowDone(src, -1);
197
198
  statusMessagePretty(-1, src, "pure");
198
199
  // console.error(e);
199
200
  })
200
201
  .finally((x) => {
201
- const fileSet = files[src] || new Set();
202
- fs.writeFileSync(reportDest + "/manifest.json", JSON.stringify(Array.from(fileSet)));
202
+ // const fileSet = files[src] || new Set();
203
+ // fs.writeFileSync(
204
+ // reportDest + "/manifest.json",
205
+ // JSON.stringify(Array.from(fileSet))
206
+ // );
203
207
  });
204
208
  });
205
209
  }
206
- catch (e) {
207
- console.log(ansiC.red(ansiC.inverse(`${src} 1 errored with: ${e}. Check ${reportDest}/logs.txt for more info`)));
208
- this.writeFileSync(`${reportDest}/logs.txt`, e.stack, src);
210
+ catch (e3) {
211
+ console.log(ansiC.red(ansiC.inverse(`${src} 1 errored with: ${e3}. Check ${reportDest}/logs.txt for more info`)));
212
+ this.writeFileSync(`${reportDest}/logs.txt`, e3.stack, src);
209
213
  this.bddTestIsNowDone(src, -1);
210
214
  statusMessagePretty(-1, src, "pure");
215
+ console.log("III) PURE IS EXITING BADLY WITH error", e3);
211
216
  }
212
217
  for (let i = 0; i <= portsToUse.length; i++) {
213
218
  if (portsToUse[i]) {
@@ -332,17 +337,22 @@ export class PM_Main extends PM_WithEslintAndTsc {
332
337
  });
333
338
  child.on("error", (err) => { });
334
339
  child.on("close", (code) => {
335
- oStream.close();
340
+ // oStream.close();
336
341
  server.close();
337
342
  if (!files[src]) {
338
343
  files[src] = new Set();
339
344
  }
340
345
  // files[src].add(filepath);
341
- fs.writeFileSync(reportDest + "/manifest.json", JSON.stringify(Array.from(files[src])));
346
+ // fs.writeFileSync(
347
+ // reportDest + "/manifest.json",
348
+ // JSON.stringify(Array.from(files[src]))
349
+ // );
342
350
  if (code === 255) {
343
351
  console.log(ansiColors.red(`node ! ${src} failed to execute. No "tests.json" file was generated. Check ${reportDest}/logs.txt for more info`));
344
352
  this.bddTestIsNowDone(src, -1);
345
353
  statusMessagePretty(-1, src, "node");
354
+ oStream.close();
355
+ return;
346
356
  }
347
357
  else if (code === 0) {
348
358
  this.bddTestIsNowDone(src, 0);
@@ -393,7 +403,10 @@ export class PM_Main extends PM_WithEslintAndTsc {
393
403
  files[src] = new Set();
394
404
  }
395
405
  // files[src].add(filepath);
396
- fs.writeFileSync(destFolder + "/manifest.json", JSON.stringify(Array.from(files[src])));
406
+ // fs.writeFileSync(
407
+ // destFolder + "/manifest.json",
408
+ // JSON.stringify(Array.from(files[src]))
409
+ // );
397
410
  delete files[src];
398
411
  Promise.all(screenshots[src] || []).then(() => {
399
412
  delete screenshots[src];
@@ -681,7 +694,7 @@ export class PM_Main extends PM_WithEslintAndTsc {
681
694
  try {
682
695
  return await (await x.default).receiveTestResourceConfig(${webArgz})
683
696
  } catch (e) {
684
- console.log("fail", e)
697
+ console.log("web run failure", e.toString())
685
698
  }
686
699
  })`;
687
700
  const ofile = `${reportDest}/logs.txt`;
@@ -712,16 +725,21 @@ export class PM_Main extends PM_WithEslintAndTsc {
712
725
  files[src] = new Set();
713
726
  }
714
727
  // files[t].add(filepath);
715
- fs.writeFileSync(destFolder + "/manifest.json", JSON.stringify(Array.from(files[src])));
728
+ // fs.writeFileSync(
729
+ // destFolder + "/manifest.json",
730
+ // JSON.stringify(Array.from(files[src]))
731
+ // );
716
732
  delete files[src];
717
733
  Promise.all(screenshots[src] || []).then(() => {
718
734
  delete screenshots[src];
719
735
  page.close();
720
736
  oStream.close();
721
737
  });
738
+ console.log("ostream is closed");
739
+ return;
722
740
  };
723
741
  page.on("pageerror", (err) => {
724
- console.log(ansiColors.red(`web ! ${src} failed to execute. No "tests.json" file was generated. Check ${reportDest}/logs.txt for more info`));
742
+ console.log(ansiColors.red(`web ! ${src} failed to execute No "tests.json" file was generated. Check ${reportDest}/logs.txt for more info`));
725
743
  oStream.write(err.name);
726
744
  oStream.write("\n");
727
745
  if (err.cause) {
@@ -740,33 +758,31 @@ export class PM_Main extends PM_WithEslintAndTsc {
740
758
  close();
741
759
  });
742
760
  page.on("console", (log) => {
743
- oStream.write(log.text());
744
- oStream.write("\n");
745
- oStream.write(JSON.stringify(log.location()));
746
- oStream.write("\n");
747
- oStream.write(JSON.stringify(log.stackTrace()));
748
- oStream.write("\n");
761
+ console.log("console message: ", log.text());
762
+ if (oStream.closed) {
763
+ console.log("missed console message: ", log.text());
764
+ return;
765
+ }
766
+ else {
767
+ oStream.write(log.text());
768
+ oStream.write("\n");
769
+ oStream.write(JSON.stringify(log.location()));
770
+ oStream.write("\n");
771
+ oStream.write(JSON.stringify(log.stackTrace()));
772
+ oStream.write("\n");
773
+ }
749
774
  });
750
775
  await page.goto(`file://${`${destFolder}.html`}`, {});
751
- this.webSidecars[Math.random()] = page.mainFrame()._id;
752
776
  await page
753
777
  .evaluate(evaluation)
754
778
  .then(async ({ fails, failed, features }) => {
755
- // this.receiveFeatures(features, destFolder, src, "web");
756
- // this.receiveFeaturesV2(reportDest, src, "web");
757
779
  statusMessagePretty(fails, src, "web");
758
780
  this.bddTestIsNowDone(src, fails);
759
781
  close();
760
782
  })
761
783
  .catch((e) => {
762
- // console.log(ansiC.red(ansiC.inverse(e)));
763
- // console.log(
764
- // ansiC.red(
765
- // ansiC.inverse(
766
- // `web ! ${src} failed to execute. No "tests.json" file was generated. Check ${reportDest}/logs.txt for more info`
767
- // )
768
- // )
769
- // );
784
+ console.log(ansiC.red(ansiC.inverse(e)));
785
+ console.log(ansiC.red(ansiC.inverse(`web ! ${src} failed to execute. No "tests.json" file was generated. Check ${reportDest}/logs.txt for more info`)));
770
786
  this.bddTestIsNowDone(src, -1);
771
787
  })
772
788
  .finally(() => {
@@ -979,9 +995,9 @@ export class PM_Main extends PM_WithEslintAndTsc {
979
995
  slowMo: 1,
980
996
  waitForInitialPage: false,
981
997
  executablePath,
982
- headless: true,
998
+ headless: false,
983
999
  dumpio: false,
984
- devtools: false,
1000
+ devtools: true,
985
1001
  args: [
986
1002
  "--disable-features=site-per-process",
987
1003
  "--allow-file-access-from-files",
@@ -1076,30 +1092,36 @@ export class PM_Main extends PM_WithEslintAndTsc {
1076
1092
  // this.launchExternalTest(et, this.configs.externalTests[et]);
1077
1093
  // });
1078
1094
  }
1079
- async launchExternalTest(externalTestName, externalTest) {
1080
- // fs.mkdirSync(`testeranto/externalTests/${externalTestName}`);
1081
- // exec(externalTest.exec, (error, stdout, stderr) => {
1082
- // if (error) {
1083
- // fs.writeFileSync(
1084
- // `testeranto/externalTests/${externalTestName}/exitcode.txt`,
1085
- // `${error.name}\n${error.message}\n${error.code}\n`
1086
- // );
1087
- // } else {
1088
- // fs.writeFileSync(
1089
- // `testeranto/externalTests/${externalTestName}/exitcode.txt`,
1090
- // `0`
1091
- // );
1092
- // }
1093
- // fs.writeFileSync(
1094
- // `testeranto/externalTests/${externalTestName}/stdout.txt`,
1095
- // stdout
1096
- // );
1097
- // fs.writeFileSync(
1098
- // `testeranto/externalTests/${externalTestName}/stderr.txt`,
1099
- // stderr
1100
- // );
1101
- // });
1102
- }
1095
+ // async launchExternalTest(
1096
+ // externalTestName: string,
1097
+ // externalTest: {
1098
+ // watch: string[];
1099
+ // exec: string;
1100
+ // }
1101
+ // ) {
1102
+ // // fs.mkdirSync(`testeranto/externalTests/${externalTestName}`);
1103
+ // // exec(externalTest.exec, (error, stdout, stderr) => {
1104
+ // // if (error) {
1105
+ // // fs.writeFileSync(
1106
+ // // `testeranto/externalTests/${externalTestName}/exitcode.txt`,
1107
+ // // `${error.name}\n${error.message}\n${error.code}\n`
1108
+ // // );
1109
+ // // } else {
1110
+ // // fs.writeFileSync(
1111
+ // // `testeranto/externalTests/${externalTestName}/exitcode.txt`,
1112
+ // // `0`
1113
+ // // );
1114
+ // // }
1115
+ // // fs.writeFileSync(
1116
+ // // `testeranto/externalTests/${externalTestName}/stdout.txt`,
1117
+ // // stdout
1118
+ // // );
1119
+ // // fs.writeFileSync(
1120
+ // // `testeranto/externalTests/${externalTestName}/stderr.txt`,
1121
+ // // stderr
1122
+ // // );
1123
+ // // });
1124
+ // }
1103
1125
  async stop() {
1104
1126
  console.log(ansiC.inverse("Testeranto-Run is shutting down gracefully..."));
1105
1127
  this.mode = "once";
@@ -1,110 +1 @@
1
- import React, { useEffect, useState } from 'react';
2
- import { Table, Alert } from 'react-bootstrap';
3
- import { useNavigate } from 'react-router-dom';
4
- import { NavBar } from "./NavBar";
5
- export const ProjectsPage = () => {
6
- const [projects, setProjects] = useState([]);
7
- const [summaries, setSummaries] = useState({});
8
- const [loading, setLoading] = useState(true);
9
- const [error, setError] = useState(null);
10
- const navigate = useNavigate();
11
- const [configs, setConfigs] = useState({});
12
- useEffect(() => {
13
- const fetchProjects = async () => {
14
- try {
15
- const projectsRes = await fetch(`projects.json`);
16
- const projectNames = await projectsRes.json();
17
- // const projectNames = Object.keys(config.projects);
18
- const projectsData = await Promise.all(projectNames.map(async (name) => {
19
- var _a, _b, _c, _d, _e, _f;
20
- const [summaryRes, nodeRes, webRes, pureRes, configRes] = await Promise.all([
21
- fetch(`reports/${name}/summary.json`),
22
- fetch(`bundles/node/${name}/metafile.json`),
23
- fetch(`bundles/web/${name}/metafile.json`),
24
- fetch(`bundles/pure/${name}/metafile.json`),
25
- fetch(`reports/${name}/config.json`),
26
- ]);
27
- const [summary, nodeData, webData, pureData, configData] = await Promise.all([
28
- summaryRes.json(),
29
- nodeRes.ok ? nodeRes.json() : { errors: ["Failed to load node build logs"] },
30
- webRes.ok ? webRes.json() : { errors: ["Failed to load web build logs"] },
31
- pureRes.ok ? pureRes.json() : { errors: ["Failed to load pure build logs"] },
32
- configRes.json(),
33
- ]);
34
- setSummaries(prev => (Object.assign(Object.assign({}, prev), { [name]: summary })));
35
- setConfigs(prev => (Object.assign(Object.assign({}, prev), { [name]: configData })));
36
- return {
37
- name,
38
- testCount: Object.keys(summary).length,
39
- nodeStatus: ((_a = nodeData.errors) === null || _a === void 0 ? void 0 : _a.length) ? 'failed' : ((_b = nodeData.warnings) === null || _b === void 0 ? void 0 : _b.length) ? 'warning' : 'success',
40
- webStatus: ((_c = webData.errors) === null || _c === void 0 ? void 0 : _c.length) ? 'failed' : ((_d = webData.warnings) === null || _d === void 0 ? void 0 : _d.length) ? 'warning' : 'success',
41
- pureStatus: ((_e = pureData.errors) === null || _e === void 0 ? void 0 : _e.length) ? 'failed' : ((_f = pureData.warnings) === null || _f === void 0 ? void 0 : _f.length) ? 'warning' : 'success',
42
- config: Object.keys(configData).length,
43
- };
44
- }));
45
- setProjects(projectsData);
46
- }
47
- catch (err) {
48
- setError(err instanceof Error ? err.message : 'Unknown error');
49
- }
50
- finally {
51
- setLoading(false);
52
- }
53
- };
54
- fetchProjects();
55
- }, []);
56
- const getStatusIcon = (status) => {
57
- switch (status) {
58
- case 'success': return '✅';
59
- case 'failed': return '❌';
60
- case 'warning': return '⚠️';
61
- default: return '❓';
62
- }
63
- };
64
- if (loading)
65
- return React.createElement("div", null, "Loading projects...");
66
- if (error)
67
- return React.createElement(Alert, { variant: "danger" },
68
- "Error: ",
69
- error);
70
- console.log(configs);
71
- return (React.createElement("div", { className: "p-3" },
72
- React.createElement(NavBar, { title: "Testeranto", backLink: null }),
73
- React.createElement(Table, { striped: true, bordered: true, hover: true, responsive: true },
74
- React.createElement("thead", null,
75
- React.createElement("tr", null,
76
- React.createElement("th", null, "Project"),
77
- React.createElement("th", null, "Tests"),
78
- React.createElement("th", null, "Node"),
79
- React.createElement("th", null, "Web"),
80
- React.createElement("th", null, "Pure"))),
81
- React.createElement("tbody", null, projects.map((project) => (React.createElement("tr", { key: project.name },
82
- React.createElement("td", null,
83
- React.createElement("a", { href: "#", onClick: (e) => {
84
- e.preventDefault();
85
- navigate(`/projects/${project.name}`);
86
- } }, project.name)),
87
- React.createElement("td", null,
88
- React.createElement("div", { style: { maxHeight: '200px', overflowY: 'auto' } }, summaries[project.name] ? (Object.keys(summaries[project.name]).map(testName => {
89
- const testData = summaries[project.name][testName];
90
- const runTime = configs[project.name].tests.find((t) => t[0] === testName)[1];
91
- const hasRuntimeErrors = testData.runTimeErrors > 0;
92
- const hasStaticErrors = testData.typeErrors > 0 || testData.staticErrors > 0;
93
- return (React.createElement("div", { key: testName },
94
- React.createElement("a", { href: `#/projects/${project.name}/tests/${encodeURIComponent(testName)}/${runTime}` },
95
- hasRuntimeErrors ? '❌ ' : hasStaticErrors ? '⚠️ ' : '',
96
- testName.split('/').pop())));
97
- })) : (React.createElement("div", null, "Loading tests...")))),
98
- React.createElement("td", null,
99
- React.createElement("a", { href: `#/projects/${project.name}#node` },
100
- getStatusIcon(project.nodeStatus),
101
- " Node build logs")),
102
- React.createElement("td", null,
103
- React.createElement("a", { href: `#/projects/${project.name}#web` },
104
- getStatusIcon(project.webStatus),
105
- " Web build logs")),
106
- React.createElement("td", null,
107
- React.createElement("a", { href: `#/projects/${project.name}#pure` },
108
- getStatusIcon(project.pureStatus),
109
- " Pure build logs")))))))));
110
- };
1
+ export { ProjectsPage } from './components/stateful/ProjectsPage';
@@ -8,22 +8,24 @@ export class PureTesteranto extends Testeranto {
8
8
  });
9
9
  }
10
10
  async receiveTestResourceConfig(partialTestResource) {
11
- var _a, _b;
12
11
  console.log("[DEBUG] receiveTestResourceConfig called with:", partialTestResource);
13
12
  const t = JSON.parse(partialTestResource);
14
13
  const pm = new PM_Pure(t);
15
- console.log("[DEBUG] Current test jobs:", (_a = this.testJobs) === null || _a === void 0 ? void 0 : _a.length);
16
- if (!this.testJobs || this.testJobs.length === 0) {
17
- console.error("[ERROR] No test jobs available - checking specs:", (_b = this.specs) === null || _b === void 0 ? void 0 : _b.length);
18
- console.error("[ERROR] Test implementation:", this.testImplementation);
19
- return {
20
- failed: true,
21
- fails: 1,
22
- artifacts: [],
23
- logPromise: Promise.resolve(),
24
- features: [],
25
- };
26
- }
14
+ // console.log("[DEBUG] Current test jobs:", this.testJobs?.length);
15
+ // if (!this.testJobs || this.testJobs.length === 0) {
16
+ // console.error(
17
+ // "[ERROR] No test jobs available - checking specs:",
18
+ // this.specs?.length
19
+ // );
20
+ // console.error("[ERROR] Test implementation:", this.testImplementation);
21
+ // return {
22
+ // failed: true,
23
+ // fails: 1,
24
+ // artifacts: [],
25
+ // // logPromise: Promise.resolve(),
26
+ // features: [],
27
+ // };
28
+ // }
27
29
  try {
28
30
  console.log("[DEBUG] Executing test job with PM:", pm);
29
31
  const result = await this.testJobs[0].receiveTestResourceConfig(pm);
@@ -34,9 +36,9 @@ export class PureTesteranto extends Testeranto {
34
36
  console.error("[ERROR] Test job failed:", e);
35
37
  return {
36
38
  failed: true,
37
- fails: 1,
39
+ fails: -1,
38
40
  artifacts: [],
39
- logPromise: Promise.resolve(),
41
+ // logPromise: Promise.resolve(),
40
42
  features: [],
41
43
  };
42
44
  }
@@ -44,11 +44,54 @@ const server = http.createServer((req, res) => {
44
44
  // First check if file exists
45
45
  fs.stat(filePath, (err, stats) => {
46
46
  if (err || !stats.isFile()) {
47
- // File doesn't exist - send 404 once
48
- if (!res.headersSent) {
49
- res.writeHead(404, { 'Content-Type': 'text/plain' });
50
- res.end('File not found');
51
- }
47
+ // Check if directory exists
48
+ fs.stat(filePath, (dirErr, dirStats) => {
49
+ if (!dirErr && dirStats.isDirectory()) {
50
+ // Serve directory listing
51
+ fs.readdir(filePath, (readErr, files) => {
52
+ if (readErr) {
53
+ res.writeHead(500);
54
+ return res.end('Error reading directory');
55
+ }
56
+ res.writeHead(200, { 'Content-Type': 'text/html' });
57
+ res.write(`
58
+ <html>
59
+ <head>
60
+ <title>Directory Listing: ${req.url}</title>
61
+ <style>
62
+ body { font-family: sans-serif; margin: 2rem; }
63
+ h1 { color: #333; }
64
+ ul { list-style: none; padding: 0; }
65
+ li { padding: 0.5rem; }
66
+ li a { color: #0366d6; text-decoration: none; }
67
+ li a:hover { text-decoration: underline; }
68
+ </style>
69
+ </head>
70
+ <body>
71
+ <h1>Directory: ${req.url}</h1>
72
+ <ul>
73
+ ${files.map(file => `
74
+ <li>
75
+ <a href="${path.join(req.url || '', file)}">
76
+ ${file}${file.endsWith('/') ? '/' : ''}
77
+ </a>
78
+ </li>
79
+ `).join('')}
80
+ </ul>
81
+ </body>
82
+ </html>
83
+ `);
84
+ res.end();
85
+ });
86
+ }
87
+ else {
88
+ // Neither file nor directory exists - send 404
89
+ if (!res.headersSent) {
90
+ res.writeHead(404, { 'Content-Type': 'text/plain' });
91
+ res.end('File not found');
92
+ }
93
+ }
94
+ });
52
95
  return;
53
96
  }
54
97
  // File exists - serve it through node-static
@@ -184,22 +184,51 @@ export const TestPage = () => {
184
184
  React.createElement(Button, { variant: "outline-light", onClick: () => setRoute('logs'), className: "me-2" }, "View Runtime Logs"),
185
185
  React.createElement(Button, { variant: "outline-light", onClick: () => navigate(`/projects/${projectName}#${runtime}`) }, "View Build Logs")))) : testData ? (React.createElement("div", { className: "test-results" },
186
186
  React.createElement("div", { className: "mb-3" }),
187
- testData.givens.map((given, i) => (React.createElement("div", { key: i, className: "mb-4 card" },
188
- React.createElement("div", { className: "card-header bg-primary text-white" },
189
- React.createElement("h4", null,
190
- "Given: ",
191
- given.name)),
192
- React.createElement("div", { className: "card-body" },
193
- given.whens.map((when, j) => (React.createElement("div", { key: `w-${j}`, className: `p-3 mb-2 ${when.error ? 'bg-danger text-white' : 'bg-success text-white'}` },
194
- React.createElement("strong", null, "When:"),
195
- " ",
196
- when.name,
197
- when.error && React.createElement("pre", { className: "mt-2" }, when.error)))),
198
- given.thens.map((then, k) => (React.createElement("div", { key: `t-${k}`, className: `p-3 mb-2 ${then.error ? 'bg-danger text-white' : 'bg-success text-white'}` },
199
- React.createElement("strong", null, "Then:"),
200
- " ",
201
- then.name,
202
- then.error && React.createElement("pre", { className: "mt-2" }, then.error)))))))))) : (React.createElement(Alert, { variant: "warning" }, "No test results found"))),
187
+ testData.givens.map((given, i) => {
188
+ var _a;
189
+ return (React.createElement("div", { key: i, className: "mb-4 card" },
190
+ React.createElement("div", { className: "card-header bg-primary text-white" },
191
+ React.createElement("div", { className: "d-flex justify-content-between align-items-center" },
192
+ React.createElement("h4", null,
193
+ "Given: ",
194
+ given.name),
195
+ ((_a = given.artifacts) === null || _a === void 0 ? void 0 : _a.length) > 0 && (React.createElement("div", { className: "dropdown" },
196
+ React.createElement("button", { className: "btn btn-sm btn-light dropdown-toggle", type: "button", "data-bs-toggle": "dropdown" },
197
+ "Artifacts (",
198
+ given.artifacts.length,
199
+ ")"),
200
+ React.createElement("ul", { className: "dropdown-menu dropdown-menu-end" }, given.artifacts.map((artifact, ai) => (React.createElement("li", { key: ai },
201
+ React.createElement("a", { className: "dropdown-item", href: `/testeranto/reports/${projectName}/${testName.split('.').slice(0, -1).join('.')}/${runtime}/${artifact}`, target: "_blank", rel: "noopener noreferrer" }, artifact.split('/').pop()))))))))),
202
+ React.createElement("div", { className: "card-body" },
203
+ given.whens.map((when, j) => {
204
+ var _a;
205
+ return (React.createElement("div", { key: `w-${j}`, className: `p-3 mb-2 ${when.error ? 'bg-danger text-white' : 'bg-success text-white'}` },
206
+ React.createElement("div", { className: "d-flex justify-content-between align-items-start" },
207
+ React.createElement("div", null,
208
+ React.createElement("strong", null, "When:"),
209
+ " ",
210
+ when.name,
211
+ when.error && React.createElement("pre", { className: "mt-2" }, when.error)),
212
+ ((_a = when.artifacts) === null || _a === void 0 ? void 0 : _a.length) > 0 && (React.createElement("div", { className: "ms-3" },
213
+ React.createElement("strong", null, "Artifacts:"),
214
+ React.createElement("ul", { className: "list-unstyled" }, when.artifacts.map((artifact, ai) => (React.createElement("li", { key: ai },
215
+ React.createElement("a", { href: `/testeranto/reports/${projectName}/${testName.split('.').slice(0, -1).join('.')}/${runtime}/${artifact}`, target: "_blank", className: "text-white", rel: "noopener noreferrer" }, artifact.split('/').pop()))))))))));
216
+ }),
217
+ given.thens.map((then, k) => {
218
+ var _a;
219
+ return (React.createElement("div", { key: `t-${k}`, className: `p-3 mb-2 ${then.error ? 'bg-danger text-white' : 'bg-success text-white'}` },
220
+ React.createElement("div", { className: "d-flex justify-content-between align-items-start" },
221
+ React.createElement("div", null,
222
+ React.createElement("strong", null, "Then:"),
223
+ " ",
224
+ then.name,
225
+ then.error && React.createElement("pre", { className: "mt-2" }, then.error)),
226
+ ((_a = then.artifacts) === null || _a === void 0 ? void 0 : _a.length) > 0 && (React.createElement("div", { className: "ms-3" },
227
+ React.createElement("strong", null, "Artifacts:"),
228
+ React.createElement("ul", { className: "list-unstyled" }, then.artifacts.map((artifact, ai) => (React.createElement("li", { key: ai },
229
+ React.createElement("a", { href: `/testeranto/reports/${projectName}/${testName.split('.').slice(0, -1).join('.')}/${runtime}/${artifact}`, target: "_blank", className: "text-white", rel: "noopener noreferrer" }, artifact.split('/').pop()))))))))));
230
+ }))));
231
+ }))) : (React.createElement(Alert, { variant: "warning" }, "No test results found"))),
203
232
  React.createElement(Tab.Pane, { eventKey: "logs" }, logs === undefined ? (React.createElement(Alert, { variant: "danger" },
204
233
  React.createElement("h4", null, "Logs file missing"),
205
234
  React.createElement("p", null, "The runtime logs file (logs.txt) was not found."),
@@ -3,29 +3,44 @@
3
3
  import { PM_Web } from "./PM/web";
4
4
  import Testeranto from "./lib/core.js";
5
5
  import { defaultTestResourceRequirement, } from "./lib/index.js";
6
- let errorCallback = (e) => { };
7
- let unhandledrejectionCallback = (event) => {
8
- console.log("window.addEventListener unhandledrejection", event);
9
- };
6
+ // let errorCallback = (e: any) => {};
7
+ // let unhandledrejectionCallback = (event: PromiseRejectionEvent) => {
8
+ // console.log(
9
+ // "window.addEventListener unhandledrejection 1",
10
+ // JSON.stringify(event)
11
+ // );
12
+ // };
10
13
  export class WebTesteranto extends Testeranto {
11
14
  constructor(input, testSpecification, testImplementation, testResourceRequirement, testAdapter) {
12
15
  super(input, testSpecification, testImplementation, testResourceRequirement, testAdapter, (cb) => {
13
- window.removeEventListener("error", errorCallback);
14
- errorCallback = (e) => {
15
- console.log("window.addEventListener error", e);
16
- cb(e);
17
- // throw e;
18
- };
19
- window.addEventListener("error", errorCallback);
20
- window.removeEventListener("unhandledrejection", unhandledrejectionCallback);
21
- /////////////////////
22
- window.removeEventListener("unhandledrejection", unhandledrejectionCallback);
23
- unhandledrejectionCallback = (event) => {
24
- console.log("window.addEventListener unhandledrejection", event);
25
- cb({ error: event.reason.message });
26
- // throw event;
27
- };
28
- window.addEventListener("unhandledrejection", unhandledrejectionCallback);
16
+ // window.removeEventListener("error", errorCallback);
17
+ // errorCallback = (e) => {
18
+ // console.log("window.addEventListener error 2", JSON.stringify(e));
19
+ // cb(e);
20
+ // // throw e;
21
+ // };
22
+ // window.addEventListener("error", errorCallback);
23
+ // window.removeEventListener(
24
+ // "unhandledrejection",
25
+ // unhandledrejectionCallback
26
+ // );
27
+ // /////////////////////
28
+ // window.removeEventListener(
29
+ // "unhandledrejection",
30
+ // unhandledrejectionCallback
31
+ // );
32
+ // unhandledrejectionCallback = (event: PromiseRejectionEvent) => {
33
+ // console.log(
34
+ // "window.addEventListener unhandledrejection 3",
35
+ // JSON.stringify(event)
36
+ // );
37
+ // cb({ error: event.reason.message });
38
+ // // throw event;
39
+ // };
40
+ // window.addEventListener(
41
+ // "unhandledrejection",
42
+ // unhandledrejectionCallback
43
+ // );
29
44
  });
30
45
  }
31
46
  async receiveTestResourceConfig(partialTestResource) {