testeranto 0.172.0 → 0.173.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 (193) hide show
  1. package/README.md +2 -4
  2. package/dist/common/src/PM/base.js +4 -0
  3. package/dist/common/src/PM/main.js +11 -4
  4. package/dist/common/src/PM/node.js +1 -1
  5. package/dist/common/src/PM/web.js +3 -3
  6. package/dist/common/src/ReportServer.js +2 -126
  7. package/dist/common/src/ReportServer.test.ts/index.js +78 -0
  8. package/dist/common/src/ReportServerLib.js +135 -0
  9. package/dist/common/src/components/pure/ProjectPageView.test/implementation.js +1 -1
  10. package/dist/common/src/lib/abstractBase.js +2 -0
  11. package/dist/common/src/lib/baseBuilder.test/baseBuilder.test.implementation.js +10 -9
  12. package/dist/common/src/lib/baseBuilder.test/baseBuilder.test.specification.js +7 -7
  13. package/dist/common/src/lib/basebuilder.js +8 -2
  14. package/dist/common/src/lib/pmProxy.js +54 -150
  15. package/dist/common/testeranto.config.js +35 -20
  16. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  17. package/dist/module/src/PM/base.js +4 -0
  18. package/dist/module/src/PM/main.js +11 -4
  19. package/dist/module/src/PM/node.js +1 -1
  20. package/dist/module/src/PM/web.js +3 -3
  21. package/dist/module/src/ReportServer.js +2 -123
  22. package/dist/module/src/ReportServer.test.ts/index.js +73 -0
  23. package/dist/module/src/ReportServerLib.js +128 -0
  24. package/dist/module/src/TestPage.js +29 -17
  25. package/dist/module/src/components/pure/ProjectPageView.test/implementation.js +1 -1
  26. package/dist/module/src/components/pure/TestPageView.js +29 -17
  27. package/dist/module/src/lib/abstractBase.js +2 -0
  28. package/dist/module/src/lib/baseBuilder.test/baseBuilder.test.implementation.js +10 -9
  29. package/dist/module/src/lib/baseBuilder.test/baseBuilder.test.specification.js +7 -7
  30. package/dist/module/src/lib/basebuilder.js +8 -2
  31. package/dist/module/src/lib/pmProxy.js +54 -150
  32. package/dist/module/testeranto.config.js +35 -20
  33. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  34. package/dist/prebuild/App.js +3 -3
  35. package/dist/prebuild/ReportServer.mjs +15 -9
  36. package/dist/prebuild/run.mjs +14 -4
  37. package/dist/types/src/PM/node.d.ts +1 -1
  38. package/dist/types/src/PM/web.d.ts +1 -1
  39. package/dist/types/src/ReportServer.test.ts/index.d.ts +29 -0
  40. package/dist/types/src/ReportServerLib.d.ts +2 -0
  41. package/dist/types/src/Types.d.ts +0 -1
  42. package/dist/types/src/components/pure/ProjectPageView.test/index.d.ts +2 -1
  43. package/dist/types/src/lib/abstractBase.d.ts +1 -1
  44. package/dist/types/src/lib/baseBuilder.test/baseBuilder.test.types.d.ts +7 -4
  45. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  46. package/package.json +2 -2
  47. package/src/PM/base.ts +5 -0
  48. package/src/PM/main.ts +12 -4
  49. package/src/PM/node.ts +1 -1
  50. package/src/PM/web.ts +3 -3
  51. package/src/ReportServer.test.ts/index.ts +194 -0
  52. package/src/ReportServer.ts +2 -132
  53. package/src/ReportServerLib.ts +144 -0
  54. package/src/TestPage.tsx +65 -5
  55. package/src/Types.ts +0 -1
  56. package/src/components/pure/ProjectPageView.test/implementation.tsx +1 -1
  57. package/src/components/pure/TestPageView.tsx +65 -5
  58. package/src/lib/abstractBase.ts +4 -1
  59. package/src/lib/baseBuilder.test/baseBuilder.test.implementation.ts +22 -10
  60. package/src/lib/baseBuilder.test/baseBuilder.test.specification.ts +9 -9
  61. package/src/lib/baseBuilder.test/baseBuilder.test.types.ts +7 -4
  62. package/src/lib/basebuilder.ts +7 -4
  63. package/src/lib/pmProxy.ts +78 -155
  64. package/testeranto/App.js +3 -3
  65. package/testeranto/bundles/node/allTests/metafile.json +38 -781
  66. package/testeranto/bundles/node/allTests/src/lib/baseBuilder.test/baseBuilder.test.node.mjs +983 -24
  67. package/testeranto/bundles/node/core/metafile.json +486 -0
  68. package/testeranto/bundles/{pure/allTests/chunk-VMUSFSZM.mjs → node/core/src/lib/baseBuilder.test/baseBuilder.test.node.mjs} +797 -412
  69. package/testeranto/bundles/node/staticSite/metafile.json +593 -0
  70. package/testeranto/bundles/node/staticSite/src/ReportServer.test.ts/index.mjs +1594 -0
  71. package/testeranto/bundles/pure/allTests/metafile.json +122 -550
  72. package/testeranto/bundles/pure/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure.mjs +740 -27
  73. package/testeranto/bundles/pure/core/metafile.json +626 -0
  74. package/testeranto/bundles/{node/allTests/chunk-E75CSRER.mjs → pure/core/src/lib/baseBuilder.test/baseBuilder.test.pure.mjs} +777 -483
  75. package/testeranto/bundles/pure/staticSite/metafile.json +8 -0
  76. package/testeranto/bundles/web/allTests/metafile.json +777 -22
  77. package/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.mjs +893 -45
  78. package/testeranto/bundles/web/core/metafile.json +780 -0
  79. package/testeranto/bundles/web/core/src/lib/baseBuilder.test/baseBuilder.test.web.html +19 -0
  80. package/testeranto/bundles/web/{allTests/chunk-U7AW26HL.mjs → core/src/lib/baseBuilder.test/baseBuilder.test.web.mjs} +506 -411
  81. package/testeranto/bundles/web/staticSite/metafile.json +8 -0
  82. package/testeranto/projects.json +2 -1
  83. package/testeranto/reports/allTests/config.json +0 -64
  84. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/lint_errors.txt +2 -0
  85. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/logs.txt +11 -13
  86. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/prompt.txt +10 -0
  87. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/suite-0/given-testInitialization/then-0/butThen/hello.txt +1 -0
  88. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/tests.json +10 -18
  89. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/type_errors.txt +25 -13
  90. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/lint_errors.txt +2 -0
  91. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/prompt.txt +8 -0
  92. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/type_errors.txt +24 -12
  93. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/lint_errors.txt +2 -0
  94. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/logs.txt +49 -55
  95. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/prompt.txt +12 -2
  96. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/suite-0/given-testInitialization/then-0/butThen/hello.txt +1 -0
  97. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/tests.json +10 -18
  98. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/type_errors.txt +24 -12
  99. package/testeranto/reports/allTests/summary.json +6 -62
  100. package/testeranto/reports/core/config.json +24 -0
  101. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/lint_errors.txt +2 -0
  102. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/logs.txt +32 -0
  103. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/message.txt +2 -0
  104. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/prompt.txt +26 -0
  105. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/suite-0/given-testInitialization/then-0/butThen/hello.txt +1 -0
  106. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/tests.json +69 -0
  107. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.node/node/type_errors.txt +74 -0
  108. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/lint_errors.txt +2 -0
  109. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/message.txt +2 -0
  110. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/prompt.txt +26 -0
  111. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/type_errors.txt +74 -0
  112. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/lint_errors.txt +2 -0
  113. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/logs.txt +61 -0
  114. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/message.txt +2 -0
  115. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/prompt.txt +26 -0
  116. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/suite-0/given-testInitialization/then-0/butThen/hello.txt +1 -0
  117. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/tests.json +69 -0
  118. package/testeranto/reports/core/src/lib/baseBuilder.test/baseBuilder.test.web/web/type_errors.txt +74 -0
  119. package/testeranto/reports/core/summary.json +23 -0
  120. package/testeranto/reports/staticSite/config.json +24 -0
  121. package/testeranto/reports/staticSite/src/ReportServer.test.ts/index/node/lint_errors.txt +5 -0
  122. package/testeranto/reports/staticSite/src/ReportServer.test.ts/index/node/logs.txt +44 -0
  123. package/testeranto/reports/staticSite/src/ReportServer.test.ts/index/node/message.txt +2 -0
  124. package/testeranto/reports/staticSite/src/ReportServer.test.ts/index/node/prompt.txt +23 -0
  125. package/testeranto/reports/{allTests/src/lib/core.test/core.test → staticSite/src/ReportServer.test.ts/index}/node/type_errors.txt +21 -32
  126. package/testeranto/reports/staticSite/summary.json +9 -0
  127. package/testeranto/reportsnode_build_errors +8 -11
  128. package/testeranto.config.ts +37 -20
  129. package/testeranto/bundles/node/allTests/chunk-3EUGBAOM.mjs +0 -113
  130. package/testeranto/bundles/node/allTests/chunk-M6DO7VMB.mjs +0 -252
  131. package/testeranto/bundles/node/allTests/src/lib/BaseSuite.test/node.test.mjs +0 -323
  132. package/testeranto/bundles/node/allTests/src/lib/classBuilder.test/classBuilder.test.mjs +0 -411
  133. package/testeranto/bundles/node/allTests/src/lib/core.test/core.test.mjs +0 -528
  134. package/testeranto/bundles/node/allTests/src/lib/pmProxy.test/index.mjs +0 -4752
  135. package/testeranto/bundles/pure/allTests/chunk-KHDVEHF7.mjs +0 -185
  136. package/testeranto/bundles/pure/allTests/src/Pure.test.mjs +0 -429
  137. package/testeranto/bundles/pure/allTests/src/lib/BaseSuite.test/pure.test.mjs +0 -425
  138. package/testeranto/bundles/web/allTests/chunk-HPYA4YZC.mjs +0 -2283
  139. package/testeranto/bundles/web/allTests/src/components/pure/ProjectPageView.test/index.html +0 -19
  140. package/testeranto/bundles/web/allTests/src/components/pure/ProjectPageView.test/index.mjs +0 -37524
  141. package/testeranto/bundles/web/allTests/src/lib/BaseSuite.test/web.test.html +0 -19
  142. package/testeranto/bundles/web/allTests/src/lib/BaseSuite.test/web.test.mjs +0 -440
  143. package/testeranto/reports/allTests/src/Pure.test/pure/lint_errors.txt +0 -0
  144. package/testeranto/reports/allTests/src/Pure.test/pure/message.txt +0 -2
  145. package/testeranto/reports/allTests/src/Pure.test/pure/prompt.txt +0 -13
  146. package/testeranto/reports/allTests/src/Pure.test/pure/type_errors.txt +0 -101
  147. package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/lint_errors.txt +0 -13
  148. package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/logs.txt +0 -50
  149. package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/message.txt +0 -2
  150. package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/prompt.txt +0 -17
  151. package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/tests.json +0 -32
  152. package/testeranto/reports/allTests/src/components/pure/ProjectPageView.test/index/web/type_errors.txt +0 -68
  153. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/lint_errors.txt +0 -0
  154. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/logs.txt +0 -52
  155. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/message.txt +0 -2
  156. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/prompt.txt +0 -13
  157. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/tests.json +0 -31
  158. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/type_errors.txt +0 -111
  159. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/bdd_errors.txt +0 -1
  160. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/lint_errors.txt +0 -0
  161. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/message.txt +0 -2
  162. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/prompt.txt +0 -14
  163. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/tests.json +0 -31
  164. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/type_errors.txt +0 -111
  165. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/bdd_errors.txt +0 -1
  166. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/lint_errors.txt +0 -0
  167. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/logs.txt +0 -108
  168. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/message.txt +0 -2
  169. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/prompt.txt +0 -14
  170. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/tests.json +0 -31
  171. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/type_errors.txt +0 -111
  172. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/bdd_errors.txt +0 -1
  173. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/lint_errors.txt +0 -0
  174. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/logs.txt +0 -700
  175. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/message.txt +0 -2
  176. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/prompt.txt +0 -16
  177. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/tests.json +0 -164
  178. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/type_errors.txt +0 -138
  179. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/lint_errors.txt +0 -21
  180. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/logs.txt +0 -7
  181. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/message.txt +0 -2
  182. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/prompt.txt +0 -18
  183. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/bdd_errors.txt +0 -1
  184. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/lint_errors.txt +0 -20
  185. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/logs.txt +0 -31
  186. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/message.txt +0 -2
  187. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/prompt.txt +0 -16
  188. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/tests.json +0 -134
  189. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/type_errors.txt +0 -76
  190. package/testeranto/reportspure_build_errors +0 -343
  191. package/testeranto/reportsweb_build_errors +0 -25
  192. /package/testeranto/reports/{allTests/src/components/pure/ProjectPageView.test/index/web → core/src/lib/baseBuilder.test/baseBuilder.test.node/node}/bdd_errors.txt +0 -0
  193. /package/testeranto/reports/{allTests/src/lib/BaseSuite.test/node.test/node → core/src/lib/baseBuilder.test/baseBuilder.test.web/web}/bdd_errors.txt +0 -0
@@ -113,6 +113,10 @@ export class PM_Base {
113
113
  return false;
114
114
  }
115
115
  async writeFileSync(filepath, contents, testName) {
116
+ console.log("writeFileSync");
117
+ console.log("filepath", filepath);
118
+ console.log("contents", contents);
119
+ console.log("testName", testName);
116
120
  return new Promise(async (res) => {
117
121
  fs.mkdirSync(path.dirname(filepath), {
118
122
  recursive: true,
@@ -69,10 +69,12 @@ function isValidUrl(string) {
69
69
  }
70
70
  // Wait for file to exist, checks every 2 seconds by default
71
71
  async function pollForFile(path, timeout = 2000) {
72
+ console.log(`pollForFile: ${path}...`);
72
73
  const intervalObj = setInterval(function () {
73
74
  const file = path;
74
75
  const fileExists = fs.existsSync(file);
75
76
  if (fileExists) {
77
+ console.log(`metafile found: ${path}!`);
76
78
  clearInterval(intervalObj);
77
79
  }
78
80
  }, timeout);
@@ -281,7 +283,12 @@ export class PM_Main extends PM_WithEslintAndTsc {
281
283
  const ipcfile = "/tmp/tpipe_" + Math.random();
282
284
  const child = spawn("node",
283
285
  // "node",
284
- ["--inspect-brk", builtfile, testResources, ipcfile], {
286
+ [
287
+ // "--inspect-brk",
288
+ builtfile,
289
+ testResources,
290
+ ipcfile,
291
+ ], {
285
292
  stdio: ["pipe", "pipe", "pipe", "ipc"],
286
293
  });
287
294
  let buffer = new Buffer("");
@@ -758,7 +765,7 @@ export class PM_Main extends PM_WithEslintAndTsc {
758
765
  close();
759
766
  });
760
767
  page.on("console", (log) => {
761
- console.log("console message: ", log.text());
768
+ // console.log("console message: ", log.text());
762
769
  if (oStream.closed) {
763
770
  console.log("missed console message: ", log.text());
764
771
  return;
@@ -995,9 +1002,9 @@ export class PM_Main extends PM_WithEslintAndTsc {
995
1002
  slowMo: 1,
996
1003
  waitForInitialPage: false,
997
1004
  executablePath,
998
- headless: false,
1005
+ headless: true,
999
1006
  dumpio: false,
1000
- devtools: true,
1007
+ devtools: false,
1001
1008
  args: [
1002
1009
  "--disable-features=site-per-process",
1003
1010
  "--allow-file-access-from-files",
@@ -108,7 +108,7 @@ export class PM_Node extends PM {
108
108
  async write(uid, contents) {
109
109
  return await this.send("write", ...arguments);
110
110
  }
111
- async writeFileSync(filepath, contents) {
111
+ async writeFileSync([filepath, contents]) {
112
112
  return await this.send("writeFileSync", this.testResourceConfiguration.fs + "/" + filepath, contents, this.testResourceConfiguration.name);
113
113
  }
114
114
  async createWriteStream(filepath) {
@@ -67,8 +67,8 @@ export class PM_Web extends PM {
67
67
  customScreenShot(x, y) {
68
68
  const opts = x[0];
69
69
  const page = x[1];
70
- console.log("customScreenShot 2 opts", opts);
71
- console.log("customScreenShot 2 page", page);
70
+ // console.log("customScreenShot 2 opts", opts);
71
+ // console.log("customScreenShot 2 page", page);
72
72
  return window["customScreenShot"](Object.assign(Object.assign({}, opts), { path: this.testResourceConfiguration.fs + "/" + opts.path }), this.testResourceConfiguration.name, page);
73
73
  }
74
74
  existsSync(destFolder) {
@@ -80,7 +80,7 @@ export class PM_Web extends PM {
80
80
  write(uid, contents) {
81
81
  return window["write"](uid, contents);
82
82
  }
83
- writeFileSync(filepath, contents) {
83
+ writeFileSync([filepath, contents]) {
84
84
  return window["writeFileSync"](this.testResourceConfiguration.fs + "/" + filepath, contents, this.testResourceConfiguration.name);
85
85
  }
86
86
  createWriteStream(filepath) {
@@ -1,124 +1,3 @@
1
1
  // simple http server to preview reports
2
- import staticServer from "node-static";
3
- import http from "http";
4
- import path from "path";
5
- import fs from "fs";
6
- const fileServer = new staticServer.Server("./", {
7
- cache: false,
8
- headers: {
9
- "Cache-Control": "no-cache, no-store, must-revalidate",
10
- "Pragma": "no-cache",
11
- "Expires": "0"
12
- }
13
- });
14
- const server = http.createServer((req, res) => {
15
- // Handle potential double responses
16
- let responded = false;
17
- const safeResponse = (handler) => {
18
- if (responded)
19
- return;
20
- responded = true;
21
- try {
22
- handler();
23
- }
24
- catch (err) {
25
- console.error('Error handling request:', err);
26
- if (!res.headersSent) {
27
- res.writeHead(500);
28
- }
29
- res.end('Internal Server Error');
30
- }
31
- };
32
- req.on('error', (err) => {
33
- console.error('Request error:', err);
34
- safeResponse(() => {
35
- if (!res.headersSent) {
36
- res.writeHead(400);
37
- }
38
- res.end('Bad Request');
39
- });
40
- });
41
- req.on('end', () => {
42
- safeResponse(() => {
43
- const filePath = path.join(process.cwd(), req.url || '');
44
- // First check if file exists
45
- fs.stat(filePath, (err, stats) => {
46
- if (err || !stats.isFile()) {
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
- });
95
- return;
96
- }
97
- // File exists - serve it through node-static
98
- const serve = () => {
99
- fileServer.serve(req, res, (err) => {
100
- if (err && !res.headersSent) {
101
- res.writeHead(err.status || 500);
102
- res.end(err.message);
103
- }
104
- });
105
- };
106
- // Ensure we don't double-serve
107
- if (!res.headersSent) {
108
- serve();
109
- }
110
- });
111
- });
112
- });
113
- req.resume();
114
- });
115
- server.listen(8080, () => {
116
- console.log('Server running on http://localhost:8080');
117
- console.log('Serving files from:', process.cwd());
118
- });
119
- server.on('error', (err) => {
120
- console.error('Server error:', err);
121
- });
122
- process.on('uncaughtException', (err) => {
123
- console.error('Uncaught exception:', err);
124
- });
2
+ import { ReportServerOfPort } from "./ReportServerLib";
3
+ ReportServerOfPort(process.argv[2]);
@@ -0,0 +1,73 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* eslint-disable @typescript-eslint/no-unused-vars */
3
+ /* eslint-disable @typescript-eslint/no-empty-object-type */
4
+ import testeranto from "../Node";
5
+ import { ReportServerOfPort } from "../ReportServerLib";
6
+ const specification = (Suite, Given, When, Then) => [
7
+ Suite.Default("the http server which is used in development", {
8
+ initialization: Given["the http server which is used in development"](["It should serve the front page", "It should serve the ReportApp"], [], [
9
+ Then["the frontpage looks good"](),
10
+ // Then["the projects page looks good"](),
11
+ // Then["a project page looks good"](),
12
+ // Then["a test page looks good"](),
13
+ ]),
14
+ }),
15
+ ];
16
+ const implementation = {
17
+ suites: {
18
+ Default: "the http server which is used in development",
19
+ },
20
+ givens: {
21
+ "the http server which is used in development": function (subject) {
22
+ // throw new Error("Function not implemented.");
23
+ return subject;
24
+ },
25
+ },
26
+ // There are no "whens", it is a stateless server.
27
+ whens: {},
28
+ thens: {
29
+ "the frontpage looks good": async (port, utils) => {
30
+ // throw new Error("Function not implemented.");
31
+ // utils.newPage(`localhost:${port}`);
32
+ debugger;
33
+ const page = await utils.newPage();
34
+ utils.goto(page, `localhost:${port}`);
35
+ utils.customScreenShot({ path: `frontpage.png` }, page);
36
+ return;
37
+ },
38
+ "the projects page looks good": function () {
39
+ throw new Error("Function not implemented.");
40
+ },
41
+ "a project page looks good": function () {
42
+ throw new Error("Function not implemented.");
43
+ },
44
+ "a test page looks good": function () {
45
+ throw new Error("Function not implemented.");
46
+ },
47
+ },
48
+ };
49
+ const adapter = {
50
+ assertThis: function (x) {
51
+ throw new Error("Function not implemented.");
52
+ },
53
+ andWhen: function (store, whenCB, testResource, pm) {
54
+ throw new Error("Function not implemented.");
55
+ },
56
+ butThen: function (store, thenCB, testResource, pm) {
57
+ throw new Error("Function not implemented.");
58
+ },
59
+ afterAll: function (store, pm) {
60
+ throw new Error("Function not implemented.");
61
+ },
62
+ afterEach: function (store, key, pm) {
63
+ throw new Error("Function not implemented.");
64
+ },
65
+ beforeAll: async function (input, testResource, pm) {
66
+ await new Promise((res, rej) => input(testResource.ports[0]));
67
+ return testResource.ports[0];
68
+ },
69
+ beforeEach: function (subject, initializer, testResource, initialValues, pm) {
70
+ throw new Error("Function not implemented.");
71
+ },
72
+ };
73
+ export default testeranto(ReportServerOfPort, specification, implementation, adapter);
@@ -0,0 +1,128 @@
1
+ // simple http server to preview reports
2
+ import staticServer from "node-static";
3
+ import http from "http";
4
+ import path from "path";
5
+ import fs from "fs";
6
+ const fileServer = new staticServer.Server("./", {
7
+ cache: false,
8
+ headers: {
9
+ "Cache-Control": "no-cache, no-store, must-revalidate",
10
+ Pragma: "no-cache",
11
+ Expires: "0",
12
+ },
13
+ });
14
+ const server = http.createServer((req, res) => {
15
+ // Handle potential double responses
16
+ let responded = false;
17
+ const safeResponse = (handler) => {
18
+ if (responded)
19
+ return;
20
+ responded = true;
21
+ try {
22
+ handler();
23
+ }
24
+ catch (err) {
25
+ console.error("Error handling request:", err);
26
+ if (!res.headersSent) {
27
+ res.writeHead(500);
28
+ }
29
+ res.end("Internal Server Error");
30
+ }
31
+ };
32
+ req.on("error", (err) => {
33
+ console.error("Request error:", err);
34
+ safeResponse(() => {
35
+ if (!res.headersSent) {
36
+ res.writeHead(400);
37
+ }
38
+ res.end("Bad Request");
39
+ });
40
+ });
41
+ req.on("end", () => {
42
+ safeResponse(() => {
43
+ const filePath = path.join(process.cwd(), req.url || "");
44
+ // First check if file exists
45
+ fs.stat(filePath, (err, stats) => {
46
+ if (err || !stats.isFile()) {
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
74
+ .map((file) => `
75
+ <li>
76
+ <a href="${path.join(req.url || "", file)}">
77
+ ${file}${file.endsWith("/") ? "/" : ""}
78
+ </a>
79
+ </li>
80
+ `)
81
+ .join("")}
82
+ </ul>
83
+ </body>
84
+ </html>
85
+ `);
86
+ res.end();
87
+ });
88
+ }
89
+ else {
90
+ // Neither file nor directory exists - send 404
91
+ if (!res.headersSent) {
92
+ res.writeHead(404, { "Content-Type": "text/plain" });
93
+ res.end("File not found");
94
+ }
95
+ }
96
+ });
97
+ return;
98
+ }
99
+ // File exists - serve it through node-static
100
+ const serve = () => {
101
+ fileServer.serve(req, res, (err) => {
102
+ if (err && !res.headersSent) {
103
+ res.writeHead(err.status || 500);
104
+ res.end(err.message);
105
+ }
106
+ });
107
+ };
108
+ // Ensure we don't double-serve
109
+ if (!res.headersSent) {
110
+ serve();
111
+ }
112
+ });
113
+ });
114
+ });
115
+ req.resume();
116
+ });
117
+ server.on("error", (err) => {
118
+ console.error("Server error:", err);
119
+ });
120
+ process.on("uncaughtException", (err) => {
121
+ console.error("Uncaught exception:", err);
122
+ });
123
+ const start = (port) => server.listen(port, () => {
124
+ console.log(`Server running on http://localhost:${port}`);
125
+ console.log("Serving files from:", process.cwd());
126
+ });
127
+ export const ReportServerOfPort = (port) => start(port);
128
+ // export default () => start(process.argv[2]);
@@ -185,14 +185,18 @@ export const TestPage = () => {
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
187
  testData.givens.map((given, i) => {
188
- var _a;
188
+ var _a, _b;
189
189
  return (React.createElement("div", { key: i, className: "mb-4 card" },
190
190
  React.createElement("div", { className: "card-header bg-primary text-white" },
191
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" },
192
+ React.createElement("div", null,
193
+ React.createElement("h4", null,
194
+ "Given: ",
195
+ given.name),
196
+ ((_a = given.features) === null || _a === void 0 ? void 0 : _a.length) > 0 && (React.createElement("div", { className: "mt-1" },
197
+ React.createElement("small", null, "Features:"),
198
+ React.createElement("ul", { className: "list-unstyled" }, given.features.map((feature, fi) => (React.createElement("li", { key: fi }, feature.startsWith('http') ? (React.createElement("a", { href: feature, target: "_blank", rel: "noopener noreferrer", className: "text-white" }, new URL(feature).hostname)) : (React.createElement("span", { className: "text-white" }, feature))))))))),
199
+ ((_b = given.artifacts) === null || _b === void 0 ? void 0 : _b.length) > 0 && (React.createElement("div", { className: "dropdown" },
196
200
  React.createElement("button", { className: "btn btn-sm btn-light dropdown-toggle", type: "button", "data-bs-toggle": "dropdown" },
197
201
  "Artifacts (",
198
202
  given.artifacts.length,
@@ -201,29 +205,37 @@ export const TestPage = () => {
201
205
  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
206
  React.createElement("div", { className: "card-body" },
203
207
  given.whens.map((when, j) => {
204
- var _a;
208
+ var _a, _b;
205
209
  return (React.createElement("div", { key: `w-${j}`, className: `p-3 mb-2 ${when.error ? 'bg-danger text-white' : 'bg-success text-white'}` },
206
210
  React.createElement("div", { className: "d-flex justify-content-between align-items-start" },
207
211
  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" },
212
+ React.createElement("div", null,
213
+ React.createElement("strong", null, "When:"),
214
+ " ",
215
+ when.name,
216
+ ((_a = when.features) === null || _a === void 0 ? void 0 : _a.length) > 0 && (React.createElement("div", { className: "mt-2" },
217
+ React.createElement("small", null, "Features:"),
218
+ React.createElement("ul", { className: "list-unstyled" }, when.features.map((feature, fi) => (React.createElement("li", { key: fi }, feature.startsWith('http') ? (React.createElement("a", { href: feature, target: "_blank", rel: "noopener noreferrer" }, new URL(feature).hostname)) : (feature))))))),
219
+ when.error && React.createElement("pre", { className: "mt-2" }, when.error))),
220
+ ((_b = when.artifacts) === null || _b === void 0 ? void 0 : _b.length) > 0 && (React.createElement("div", { className: "ms-3" },
213
221
  React.createElement("strong", null, "Artifacts:"),
214
222
  React.createElement("ul", { className: "list-unstyled" }, when.artifacts.map((artifact, ai) => (React.createElement("li", { key: ai },
215
223
  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
224
  }),
217
225
  given.thens.map((then, k) => {
218
- var _a;
226
+ var _a, _b;
219
227
  return (React.createElement("div", { key: `t-${k}`, className: `p-3 mb-2 ${then.error ? 'bg-danger text-white' : 'bg-success text-white'}` },
220
228
  React.createElement("div", { className: "d-flex justify-content-between align-items-start" },
221
229
  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" },
230
+ React.createElement("div", null,
231
+ React.createElement("strong", null, "Then:"),
232
+ " ",
233
+ then.name,
234
+ ((_a = then.features) === null || _a === void 0 ? void 0 : _a.length) > 0 && (React.createElement("div", { className: "mt-2" },
235
+ React.createElement("small", null, "Features:"),
236
+ React.createElement("ul", { className: "list-unstyled" }, then.features.map((feature, fi) => (React.createElement("li", { key: fi }, feature.startsWith('http') ? (React.createElement("a", { href: feature, target: "_blank", rel: "noopener noreferrer" }, new URL(feature).hostname)) : (feature))))))),
237
+ then.error && React.createElement("pre", { className: "mt-2" }, then.error))),
238
+ ((_b = then.artifacts) === null || _b === void 0 ? void 0 : _b.length) > 0 && (React.createElement("div", { className: "ms-3" },
227
239
  React.createElement("strong", null, "Artifacts:"),
228
240
  React.createElement("ul", { className: "list-unstyled" }, then.artifacts.map((artifact, ai) => (React.createElement("li", { key: ai },
229
241
  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()))))))))));
@@ -35,7 +35,7 @@ export const implementation = {
35
35
  thens: {
36
36
  happyPath: () => async ({ container, html }, pm) => {
37
37
  console.group('[Test] Verifying render output');
38
- debugger;
38
+ // debugger
39
39
  const p = await pm.page();
40
40
  await pm.customScreenShot({ path: "happyPath.png" }, p);
41
41
  assert.equal(1, 1);
@@ -68,14 +68,18 @@ export const TestPageView = ({ route, setRoute, navigate, projectName, testName,
68
68
  React.createElement("div", { className: "mt-3" },
69
69
  React.createElement(Button, { variant: "outline-light", onClick: () => setRoute('logs'), className: "me-2" }, "View Runtime Logs"),
70
70
  React.createElement(Button, { variant: "outline-light", onClick: () => navigate(`/projects/${projectName}#${runtime}`) }, "View Build Logs")))) : testData ? (React.createElement("div", { className: "test-results" }, testData.givens.map((given, i) => {
71
- var _a;
71
+ var _a, _b;
72
72
  return (React.createElement("div", { key: i, className: "mb-4 card" },
73
73
  React.createElement("div", { className: "card-header bg-primary text-white" },
74
74
  React.createElement("div", { className: "d-flex justify-content-between align-items-center" },
75
- React.createElement("h4", null,
76
- "Given: ",
77
- given.name),
78
- ((_a = given.artifacts) === null || _a === void 0 ? void 0 : _a.length) > 0 && (React.createElement("div", { className: "dropdown" },
75
+ React.createElement("div", null,
76
+ React.createElement("h4", null,
77
+ "Given: ",
78
+ given.name),
79
+ ((_a = given.features) === null || _a === void 0 ? void 0 : _a.length) > 0 && (React.createElement("div", { className: "mt-1" },
80
+ React.createElement("small", null, "Features:"),
81
+ React.createElement("ul", { className: "list-unstyled" }, given.features.map((feature, fi) => (React.createElement("li", { key: fi }, feature.startsWith('http') ? (React.createElement("a", { href: feature, target: "_blank", rel: "noopener noreferrer", className: "text-white" }, new URL(feature).hostname)) : (React.createElement("span", { className: "text-white" }, feature))))))))),
82
+ ((_b = given.artifacts) === null || _b === void 0 ? void 0 : _b.length) > 0 && (React.createElement("div", { className: "dropdown" },
79
83
  React.createElement("button", { className: "btn btn-sm btn-light dropdown-toggle", type: "button", "data-bs-toggle": "dropdown" },
80
84
  "Artifacts (",
81
85
  given.artifacts.length,
@@ -84,29 +88,37 @@ export const TestPageView = ({ route, setRoute, navigate, projectName, testName,
84
88
  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()))))))))),
85
89
  React.createElement("div", { className: "card-body" },
86
90
  given.whens.map((when, j) => {
87
- var _a;
91
+ var _a, _b;
88
92
  return (React.createElement("div", { key: `w-${j}`, className: `p-3 mb-2 ${when.error ? 'bg-danger text-white' : 'bg-success text-white'}` },
89
93
  React.createElement("div", { className: "d-flex justify-content-between align-items-start" },
90
94
  React.createElement("div", null,
91
- React.createElement("strong", null, "When:"),
92
- " ",
93
- when.name,
94
- when.error && React.createElement("pre", { className: "mt-2" }, when.error)),
95
- ((_a = when.artifacts) === null || _a === void 0 ? void 0 : _a.length) > 0 && (React.createElement("div", { className: "ms-3" },
95
+ React.createElement("div", null,
96
+ React.createElement("strong", null, "When:"),
97
+ " ",
98
+ when.name,
99
+ ((_a = when.features) === null || _a === void 0 ? void 0 : _a.length) > 0 && (React.createElement("div", { className: "mt-2" },
100
+ React.createElement("small", null, "Features:"),
101
+ React.createElement("ul", { className: "list-unstyled" }, when.features.map((feature, fi) => (React.createElement("li", { key: fi }, feature.startsWith('http') ? (React.createElement("a", { href: feature, target: "_blank", rel: "noopener noreferrer" }, new URL(feature).hostname)) : (feature))))))),
102
+ when.error && React.createElement("pre", { className: "mt-2" }, when.error))),
103
+ ((_b = when.artifacts) === null || _b === void 0 ? void 0 : _b.length) > 0 && (React.createElement("div", { className: "ms-3" },
96
104
  React.createElement("strong", null, "Artifacts:"),
97
105
  React.createElement("ul", { className: "list-unstyled" }, when.artifacts.map((artifact, ai) => (React.createElement("li", { key: ai },
98
106
  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()))))))))));
99
107
  }),
100
108
  given.thens.map((then, k) => {
101
- var _a;
109
+ var _a, _b;
102
110
  return (React.createElement("div", { key: `t-${k}`, className: `p-3 mb-2 ${then.error ? 'bg-danger text-white' : 'bg-success text-white'}` },
103
111
  React.createElement("div", { className: "d-flex justify-content-between align-items-start" },
104
112
  React.createElement("div", null,
105
- React.createElement("strong", null, "Then:"),
106
- " ",
107
- then.name,
108
- then.error && React.createElement("pre", { className: "mt-2" }, then.error)),
109
- ((_a = then.artifacts) === null || _a === void 0 ? void 0 : _a.length) > 0 && (React.createElement("div", { className: "ms-3" },
113
+ React.createElement("div", null,
114
+ React.createElement("strong", null, "Then:"),
115
+ " ",
116
+ then.name,
117
+ ((_a = then.features) === null || _a === void 0 ? void 0 : _a.length) > 0 && (React.createElement("div", { className: "mt-2" },
118
+ React.createElement("small", null, "Features:"),
119
+ React.createElement("ul", { className: "list-unstyled" }, then.features.map((feature, fi) => (React.createElement("li", { key: fi }, feature.startsWith('http') ? (React.createElement("a", { href: feature, target: "_blank", rel: "noopener noreferrer" }, new URL(feature).hostname)) : (feature))))))),
120
+ then.error && React.createElement("pre", { className: "mt-2" }, then.error))),
121
+ ((_b = then.artifacts) === null || _b === void 0 ? void 0 : _b.length) > 0 && (React.createElement("div", { className: "ms-3" },
110
122
  React.createElement("strong", null, "Artifacts:"),
111
123
  React.createElement("ul", { className: "list-unstyled" }, then.artifacts.map((artifact, ai) => (React.createElement("li", { key: ai },
112
124
  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()))))))))));
@@ -4,6 +4,8 @@ import { afterEachProxy, andWhenProxy, beforeEachProxy, butThenProxy, } from "./
4
4
  export class BaseGiven {
5
5
  addArtifact(path) {
6
6
  console.log(`[Artifact] Adding to ${this.constructor.name}:`, path);
7
+ // console.log("mark111");
8
+ // process.exit();
7
9
  this.artifacts.push(path);
8
10
  }
9
11
  constructor(name, features, whens, thens, givenCB, initialValues) {