testeranto 0.143.0 → 0.146.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/.aider.chat.history.md +1833 -0
  2. package/.aider.input.history +105 -0
  3. package/.aider.tags.cache.v3/{be/72/19ee8e656d160afe9b31523245fe.val → 06/1a/1ec9fd1f595d4b36094caef45894.val} +0 -0
  4. package/.aider.tags.cache.v3/{63/f1/138061b0aadb868173d197c2a0e0.val → 0f/f6/f42b5108253d75de3cb6286df7f6.val} +0 -0
  5. package/.aider.tags.cache.v3/cache.db +0 -0
  6. package/README.md +15 -16
  7. package/dist/tsconfig.tsbuildinfo +1 -1
  8. package/docs/index.md +45 -33
  9. package/package.json +1 -1
  10. package/src/Node.ts +17 -13
  11. package/src/PM/PM_WithEslintAndTsc.ts +71 -69
  12. package/src/PM/main.ts +182 -92
  13. package/src/PM/node.ts +1 -15
  14. package/src/PM/nodeSidecar.ts +0 -1
  15. package/src/Pure.ts +20 -2
  16. package/src/Types.ts +5 -5
  17. package/src/Web.ts +1 -1
  18. package/src/build.ts +0 -1
  19. package/src/esbuildConfigs/consoleDetectorPlugin.ts +28 -14
  20. package/src/esbuildConfigs/nativeImportDetectorPlugin.ts +26 -0
  21. package/src/esbuildConfigs/pure.ts +3 -1
  22. package/src/esbuildConfigs/rebuildPlugin.ts +1 -4
  23. package/src/lib/BaseSuite.test/node.test.ts +12 -0
  24. package/src/lib/BaseSuite.test/pure.test.ts +12 -0
  25. package/src/lib/{BaseSuite.test.ts → BaseSuite.test/test.ts} +20 -30
  26. package/src/lib/BaseSuite.test/web.test.ts +12 -0
  27. package/src/lib/BaseSuite.ts +17 -15
  28. package/src/lib/abstractBase.ts +0 -2
  29. package/src/lib/baseBuilder.test/baseBuilder.test.implementation.ts +2 -1
  30. package/src/lib/baseBuilder.test/baseBuilder.test.node.ts +14 -0
  31. package/src/lib/baseBuilder.test/baseBuilder.test.pure.ts +14 -0
  32. package/src/lib/baseBuilder.test/{baseBuilder.test.ts → baseBuilder.test.web.ts} +2 -1
  33. package/src/lib/basebuilder.ts +2 -1
  34. package/src/lib/classBuilder.test/classBuilder.test.implementation.ts +6 -2
  35. package/src/lib/classBuilder.test/classBuilder.test.interface.ts +1 -0
  36. package/src/lib/classBuilder.test/classBuilder.test.specification.ts +5 -4
  37. package/src/lib/classBuilder.test/classBuilder.test.types.ts +17 -5
  38. package/src/lib/core.ts +0 -10
  39. package/src/lib/pmProxy.test/interface.ts +0 -1
  40. package/src/run.ts +7 -7
  41. package/testeranto/bundles/node/allTests/{chunk-RX4SUFXQ.mjs → chunk-NQBTLMSG.mjs} +15 -12
  42. package/testeranto/bundles/node/allTests/{chunk-UED26IMH.mjs → chunk-RF3LIUSG.mjs} +196 -233
  43. package/testeranto/bundles/node/allTests/{chunk-KYSOR62N.mjs → chunk-YZWFKYY3.mjs} +6 -2
  44. package/testeranto/bundles/node/allTests/metafile.json +294 -4083
  45. package/testeranto/bundles/node/allTests/src/lib/{BaseSuite.test.mjs → BaseSuite.test/node.test.mjs} +9 -7
  46. package/testeranto/bundles/node/allTests/src/lib/baseBuilder.test/{baseBuilder.test.mjs → baseBuilder.test.node.mjs} +8 -8
  47. package/testeranto/bundles/node/allTests/src/lib/classBuilder.test/classBuilder.test.mjs +8 -6
  48. package/testeranto/bundles/node/allTests/src/lib/core.test/core.test.mjs +2 -2
  49. package/testeranto/bundles/node/allTests/src/lib/pmProxy.test/index.mjs +114 -6
  50. package/testeranto/bundles/{node/allTests/chunk-2FXOXAKZ.mjs → pure/allTests/chunk-W22WOQNK.mjs} +377 -256
  51. package/testeranto/bundles/pure/allTests/metafile.json +732 -3
  52. package/testeranto/bundles/{node → pure}/allTests/src/Pure.test.mjs +113 -5
  53. package/testeranto/bundles/pure/allTests/src/lib/BaseSuite.test/pure.test.mjs +323 -0
  54. package/testeranto/bundles/pure/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure.mjs +224 -0
  55. package/testeranto/bundles/{node/allTests/chunk-DWKHII32.mjs → web/allTests/chunk-FIZ3WLUB.mjs} +439 -296
  56. package/testeranto/bundles/web/allTests/metafile.json +1133 -2
  57. package/testeranto/bundles/web/allTests/src/lib/BaseSuite.test/web.test.html +19 -0
  58. package/testeranto/bundles/web/allTests/src/lib/BaseSuite.test/web.test.mjs +322 -0
  59. package/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.html +19 -0
  60. package/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.mjs +10964 -0
  61. package/testeranto/index.html +1 -1
  62. package/testeranto/reports/allTests/config.json +25 -25
  63. package/testeranto/reports/allTests/index.html +1 -1
  64. package/testeranto/reports/allTests/src/Pure.test/pure/lint_errors.json +1539 -0
  65. package/testeranto/reports/allTests/src/Pure.test/pure/logs.txt +11 -0
  66. package/testeranto/reports/allTests/src/Pure.test/pure/message +1 -0
  67. package/testeranto/reports/allTests/src/Pure.test/pure/prompt.txt +8 -0
  68. package/testeranto/reports/allTests/src/Pure.test/{node → pure}/type_errors.txt +15 -5
  69. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/lint_errors.json +620 -0
  70. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/logs.txt +12 -0
  71. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/message +1 -0
  72. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/prompt.txt +8 -0
  73. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/type_errors.txt +94 -0
  74. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/lint_errors.json +620 -0
  75. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/logs.txt +11 -0
  76. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/message +1 -0
  77. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/prompt.txt +8 -0
  78. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/type_errors.txt +104 -0
  79. package/testeranto/reports/allTests/src/lib/BaseSuite.test/{node → web.test/web}/lint_errors.json +119 -107
  80. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/logs.txt +10 -0
  81. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/message +1 -0
  82. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/prompt.txt +8 -0
  83. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/type_errors.txt +95 -0
  84. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/lint_errors.json +966 -0
  85. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/message +1 -0
  86. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/prompt.txt +11 -0
  87. package/testeranto/reports/allTests/src/lib/baseBuilder.test/{baseBuilder.test → baseBuilder.test.node}/node/type_errors.txt +22 -17
  88. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/bdd_errors.txt +1 -0
  89. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/lint_errors.json +966 -0
  90. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/message +1 -0
  91. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/prompt.txt +11 -0
  92. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/tests.json +57 -0
  93. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/type_errors.txt +57 -0
  94. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/bdd_errors.txt +1 -0
  95. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/dev.html +21 -0
  96. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/index.html +21 -0
  97. package/testeranto/reports/allTests/src/lib/baseBuilder.test/{baseBuilder.test/node → baseBuilder.test.web/web}/lint_errors.json +61 -61
  98. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/message +1 -0
  99. package/testeranto/reports/allTests/src/lib/baseBuilder.test/{baseBuilder.test/node → baseBuilder.test.web/web}/prompt.txt +6 -6
  100. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/tests.json +57 -0
  101. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/type_errors.txt +48 -0
  102. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/index.html +1 -1
  103. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/lint_errors.json +106 -86
  104. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/logs.txt +12 -0
  105. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/message +1 -1
  106. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/prompt.txt +2 -2
  107. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/type_errors.txt +26 -38
  108. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/index.html +1 -1
  109. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/{console_log.txt → logs.txt} +8 -8
  110. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/message +1 -1
  111. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/prompt.txt +1 -1
  112. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/type_errors.txt +12 -1
  113. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/index.html +1 -1
  114. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/lint_errors.json +1413 -8
  115. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/logs.txt +30 -0
  116. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/message +1 -1
  117. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/prompt.txt +2 -1
  118. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/type_errors.txt +5 -5
  119. package/testeranto/reports/allTests/summary.json +48 -83
  120. package/testeranto.config.ts +32 -24
  121. package/tsc.log +273 -27
  122. package/.aider.tags.cache.v3/cache.db-shm +0 -0
  123. package/.aider.tags.cache.v3/cache.db-wal +0 -0
  124. package/testeranto/bundles/node/allTests/chunk-4PJCC2XT.mjs +0 -1039
  125. package/testeranto/bundles/node/allTests/chunk-5MQGD4WC.mjs +0 -251
  126. package/testeranto/bundles/node/allTests/chunk-6CGAD2FD.mjs +0 -800
  127. package/testeranto/bundles/node/allTests/chunk-PG6KUKNP.mjs +0 -44
  128. package/testeranto/bundles/node/allTests/chunk-PRPFVO6G.mjs +0 -251
  129. package/testeranto/bundles/node/allTests/chunk-VAAIAWXC.mjs +0 -117
  130. package/testeranto/bundles/node/allTests/chunk-W44DUDBK.mjs +0 -251
  131. package/testeranto/bundles/node/allTests/chunk-YI3EGRMQ.mjs +0 -167
  132. package/testeranto/bundles/node/allTests/src/PM/__tests__/nodeSidecar.testeranto.mjs +0 -188
  133. package/testeranto/bundles/node/allTests/src/PM/__tests__/pureSidecar.testeranto.mjs +0 -157
  134. package/testeranto/bundles/node/allTests/src/PM/__tests__/webSidecar.testeranto.mjs +0 -157
  135. package/testeranto/bundles/node/allTests/src/mothership/test.mjs +0 -24413
  136. package/testeranto/reports/allTests/src/PM/__tests__/nodeSidecar.testeranto/node/index.html +0 -21
  137. package/testeranto/reports/allTests/src/PM/__tests__/nodeSidecar.testeranto/node/lint_errors.json +0 -80
  138. package/testeranto/reports/allTests/src/PM/__tests__/nodeSidecar.testeranto/node/message +0 -1
  139. package/testeranto/reports/allTests/src/PM/__tests__/nodeSidecar.testeranto/node/prompt.txt +0 -8
  140. package/testeranto/reports/allTests/src/PM/__tests__/nodeSidecar.testeranto/node/type_errors.txt +0 -28
  141. package/testeranto/reports/allTests/src/PM/__tests__/pureSidecar.testeranto/node/index.html +0 -21
  142. package/testeranto/reports/allTests/src/PM/__tests__/pureSidecar.testeranto/node/lint_errors.json +0 -80
  143. package/testeranto/reports/allTests/src/PM/__tests__/pureSidecar.testeranto/node/message +0 -1
  144. package/testeranto/reports/allTests/src/PM/__tests__/pureSidecar.testeranto/node/prompt.txt +0 -8
  145. package/testeranto/reports/allTests/src/PM/__tests__/pureSidecar.testeranto/node/type_errors.txt +0 -32
  146. package/testeranto/reports/allTests/src/PM/__tests__/webSidecar.testeranto/node/index.html +0 -21
  147. package/testeranto/reports/allTests/src/PM/__tests__/webSidecar.testeranto/node/lint_errors.json +0 -80
  148. package/testeranto/reports/allTests/src/PM/__tests__/webSidecar.testeranto/node/message +0 -1
  149. package/testeranto/reports/allTests/src/PM/__tests__/webSidecar.testeranto/node/prompt.txt +0 -8
  150. package/testeranto/reports/allTests/src/PM/__tests__/webSidecar.testeranto/node/type_errors.txt +0 -32
  151. package/testeranto/reports/allTests/src/Pure.test/node/console_log.txt +0 -17
  152. package/testeranto/reports/allTests/src/Pure.test/node/index.html +0 -21
  153. package/testeranto/reports/allTests/src/Pure.test/node/lint_errors.json +0 -134
  154. package/testeranto/reports/allTests/src/Pure.test/node/message +0 -1
  155. package/testeranto/reports/allTests/src/Pure.test/node/prompt.txt +0 -7
  156. package/testeranto/reports/allTests/src/lib/BaseGiven.test/node/index.html +0 -21
  157. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node/console_log.txt +0 -35
  158. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node/index.html +0 -21
  159. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node/message +0 -1
  160. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node/prompt.txt +0 -7
  161. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node/type_errors.txt +0 -93
  162. package/testeranto/reports/allTests/src/lib/BaseThen.test/node/index.html +0 -21
  163. package/testeranto/reports/allTests/src/lib/BaseWhen.test/node/index.html +0 -21
  164. package/testeranto/reports/allTests/src/lib/abstractBase/index/node/index.html +0 -21
  165. package/testeranto/reports/allTests/src/lib/baseBuilder/baseBuilder.test/node/index.html +0 -21
  166. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test/node/console_log.txt +0 -12
  167. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test/node/index.html +0 -21
  168. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test/node/message +0 -1
  169. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/console_log.txt +0 -17
  170. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/console_log.txt +0 -43
  171. package/testeranto/reports/allTests/src/mothership/test/node/console_log.txt +0 -44
  172. package/testeranto/reports/allTests/src/mothership/test/node/index.html +0 -21
  173. package/testeranto/reports/allTests/src/mothership/test/node/lint_errors.json +0 -1
  174. package/testeranto/reports/allTests/src/mothership/test/node/message +0 -1
  175. package/testeranto/reports/allTests/src/mothership/test/node/prompt.txt +0 -8
  176. package/testeranto/reports/allTests/src/mothership/test/node/type_errors.txt +0 -24
  177. package/testeranto/reportsnode_build_errors +0 -12
  178. /package/testeranto/reports/allTests/src/{PM/__tests__/nodeSidecar.testeranto/node → Pure.test/pure}/dev.html +0 -0
  179. /package/testeranto/reports/allTests/src/{PM/__tests__/pureSidecar.testeranto/node/dev.html → Pure.test/pure/index.html} +0 -0
  180. /package/testeranto/reports/allTests/src/{PM/__tests__/webSidecar.testeranto → lib/BaseSuite.test/node.test}/node/dev.html +0 -0
  181. /package/testeranto/reports/allTests/src/{Pure.test/node/dev.html → lib/BaseSuite.test/node.test/node/index.html} +0 -0
  182. /package/testeranto/reports/allTests/src/lib/{BaseGiven.test/node → BaseSuite.test/pure.test/pure}/dev.html +0 -0
  183. /package/testeranto/reports/allTests/src/lib/BaseSuite.test/{node/dev.html → pure.test/pure/index.html} +0 -0
  184. /package/testeranto/reports/allTests/src/lib/{BaseThen.test/node → BaseSuite.test/web.test/web}/dev.html +0 -0
  185. /package/testeranto/reports/allTests/src/lib/{BaseWhen.test/node/dev.html → BaseSuite.test/web.test/web/index.html} +0 -0
  186. /package/testeranto/reports/allTests/src/lib/{abstractBase/index → baseBuilder.test/baseBuilder.test.node}/node/dev.html +0 -0
  187. /package/testeranto/reports/allTests/src/lib/baseBuilder.test/{baseBuilder.test/node/dev.html → baseBuilder.test.node/node/index.html} +0 -0
  188. /package/testeranto/reports/allTests/src/{PM/__tests__/nodeSidecar.testeranto/node/console_log.txt → lib/baseBuilder.test/baseBuilder.test.node/node/logs.txt} +0 -0
  189. /package/testeranto/reports/allTests/src/lib/{baseBuilder/baseBuilder.test/node → baseBuilder.test/baseBuilder.test.pure/pure}/dev.html +0 -0
  190. /package/testeranto/reports/allTests/src/{mothership/test/node/dev.html → lib/baseBuilder.test/baseBuilder.test.pure/pure/index.html} +0 -0
  191. /package/testeranto/reports/allTests/src/{PM/__tests__/nodeSidecar.testeranto/node → lib/baseBuilder.test/baseBuilder.test.pure/pure}/log.txt +0 -0
  192. /package/testeranto/reports/allTests/src/lib/{BaseSuite.test/node → baseBuilder.test/baseBuilder.test.web/web}/log.txt +0 -0
  193. /package/testeranto/reports/allTests/src/{mothership/test/node/log.txt → lib/baseBuilder.test/baseBuilder.test.web/web/logs.txt} +0 -0
package/docs/index.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Testeranto docs and core concepts
2
2
 
3
- Testeranto's type system provides a rigorous framework for Behavior-Driven Development (BDD) testing. While powerful, the API can initially seem complex but everything you need to know can be summed up in **3 core functions and 5 essential types**. Follow these patterns, and TypeScript's type checker will guide you through the rest.
3
+ Testeranto's type system provides a rigorous framework for Behavior-Driven Development (BDD) testing. The API may seem complex but everything you need to know can be summed up in **1 function, 3 runtimes and 5 essential types, and 1 optional type**. Follow these patterns, and TypeScript's type checker will guide you through the rest.
4
4
 
5
5
  ### ⚠️ this doc is a work in progress. It is 99% accurate but needs some attention to be complete. ⚠️
6
6
 
@@ -26,7 +26,21 @@ class Rectangle {
26
26
  }
27
27
  ```
28
28
 
29
- ### Testeranto's 3 functions
29
+ ### Testeranto's 1 function
30
+
31
+ Testeranto has 1 function. This function launches and runs the tests. It is here that all 5 types converge and if you can type this function call correctly, the TS type system should guide you through the rest.
32
+
33
+ ```ts
34
+ async <I extends Ibdd_in_any, O extends Ibdd_out, M>(
35
+ input: I["iinput"],
36
+ testSpecification: ITestSpecification<I, O>,
37
+ testImplementation: ITestImplementation<I, O, M>,
38
+ testInterface: Partial<ITestInterface<I>>,
39
+ testResourceRequirement: ITTestResourceRequest = defaultTestResourceRequirement
40
+ ): Promise<Testeranto<I, O, M>>
41
+ ```
42
+
43
+ ### Testeranto's 3 runtimes
30
44
 
31
45
  For each of testeranto's runtime, there is a specific Testeranto main function. Each is it's own import but all 3 are called in the same way.
32
46
 
@@ -36,6 +50,10 @@ For each of testeranto's runtime, there is a specific Testeranto main function.
36
50
  import Testeranto from "testeranto/src/Node"; // <- import the Node main function
37
51
  // below this point, all runtimes are identical!
38
52
 
53
+ import { implementation } from "./Rectangle.test.implementation";
54
+ import { specification } from "./Rectangle.test.specification";
55
+ import { interface } from "./Rectangle.test.interface";
56
+
39
57
  // Note the type parameters I, O, and M: these will be important later
40
58
  export default Testeranto<
41
59
  I extends Ibdd_in,
@@ -95,32 +113,9 @@ export default Testeranto<
95
113
  );
96
114
  ```
97
115
 
98
- ### Testeranto's 5 Essential Types
99
-
100
- Every testeranto test is built around these 5 types that form a complete testing pipeline:
101
-
102
- 1. **ITestSpecification** - The "what" of your tests (business requirements)
103
- 2. **ITestImplementation** - The "how" of your tests (concrete operations)
104
- 3. **ITestInterface** - The "glue" between specs and implementation
105
- 4. **Ibdd_in** - Defines the internal test flow shape
106
- 5. **Ibdd_out** - Defines the external test interface
107
-
108
- ```mermaid
109
- flowchart LR
110
- S[ITestSpecification] -->|defines| O[Ibdd_out]
111
- I[ITestImplementation] -->|uses| O
112
- I -->|uses| M[Modifier]
113
- T[ITestInterface] -->|connects| N[Ibdd_in]
114
- S -->|flows through| N
115
- I -->|flows through| N
116
-
117
- style S fill:#2aa198,stroke:#073642
118
- style I fill:#859900,stroke:#073642
119
- style T fill:#b58900,stroke:#073642
120
- style O fill:#d33682,stroke:#073642
121
- style N fill:#cb4b16,stroke:#073642
122
- style M fill:#6c71c4,stroke:#073642
123
- ```
116
+ ### Testeranto's 5 essential types
117
+
118
+ Every testeranto test is built around these 5 types that form a complete testing pipeline.
124
119
 
125
120
  #### The Specification (ITestSpecification)
126
121
 
@@ -130,7 +125,6 @@ The Specification defines the business requirements in plain language, completel
130
125
  - Human-readable test descriptions
131
126
  - Defines test suites, scenarios (Given/When/Then)
132
127
  - Maps directly to BDD concepts
133
- - Uses Ibdd_out for type safety
134
128
 
135
129
  ```typescript
136
130
  import {
@@ -243,10 +237,9 @@ export const implementation: ITestImplementation<
243
237
 
244
238
  #### The Interface aka ITestInterface
245
239
 
246
- The test interface is code which is NOT BDD . The interface adapts your test subject so that the BDD hooks can be applied. The interface implements the traditional BDD steps "before all", "after all", "before each", "after each", etc
240
+ The test interface is code which is NOT business logic. The interface adapts your test subject so that the BDD hooks can be applied. The interface implements the traditional BDD steps "before all", "after all", "before each", "after each", etc
247
241
 
248
242
  ```ts
249
-
250
243
  import {
251
244
  Ibdd_in,
252
245
  ITestInterface,
@@ -275,7 +268,7 @@ export const testInterface: ITestInterface<
275
268
 
276
269
  #### type I aka Ibdd_in
277
270
 
278
- this type describes the "inner" shape of your BDD tests.
271
+ This type describes the "inner" shape of your BDD tests. Over the course of the execution of the test, the subject will change shapes- this test describe those changes.
279
272
 
280
273
  ```ts
281
274
  import { Ibdd_in } from "testeranto/src/CoreTypes";
@@ -294,7 +287,7 @@ export type I = Ibdd_in<
294
287
 
295
288
  #### type O aka Ibdd_out
296
289
 
297
- this type describes the "outer" shape of your BDD tests.
290
+ This type describes the "outer" shape of your BDD tests. This type describes the set of legal BDD clauses.
298
291
 
299
292
  ```ts
300
293
  import { Ibdd_out } from "testeranto/src/CoreTypes";
@@ -335,6 +328,8 @@ export type O = Ibdd_out<
335
328
  >;
336
329
  ```
337
330
 
331
+ ### Testeranto's 1 optional type
332
+
338
333
  #### type M (optional)
339
334
 
340
335
  this type describes the modifications to the shape of the "specification". It can be used to make your BDD tests DRYer but is not necessary
@@ -565,3 +560,20 @@ export default Testeranto<
565
560
 
566
561
 
567
562
  ```
563
+
564
+ ## Trouble shooting
565
+
566
+ ### Double check your runtimes.
567
+
568
+ Every test has a runtime, which must defined in 2 places. Both must match.
569
+
570
+ 1. The import of the runtime
571
+ 2. The runtime defined alongside the test in testeranto.config.ts
572
+
573
+ By convention, test filenames reveal their runtime. Ex: `__tests__/yourClass.node.test`. This is ONLY a convention. It has no real bearing on the runtime.
574
+
575
+ ## Dos and Don'ts
576
+
577
+ ### Do pass your test subject to the main testeranto function.
578
+
579
+ ### Don't import your test subject elsewhere in your tests.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "testeranto",
3
3
  "description": "the AI powered BDD test framework for typescript projects",
4
- "version": "0.143.0",
4
+ "version": "0.146.0",
5
5
  "engines": {
6
6
  "node": "18.18.0"
7
7
  },
package/src/Node.ts CHANGED
@@ -16,6 +16,8 @@ import {
16
16
 
17
17
  let ipcfile;
18
18
 
19
+ console.log("mark4");
20
+
19
21
  export class NodeTesteranto<
20
22
  I extends Ibdd_in_any,
21
23
  O extends Ibdd_out_any,
@@ -41,6 +43,7 @@ export class NodeTesteranto<
41
43
  }
42
44
 
43
45
  async receiveTestResourceConfig(partialTestResource: string) {
46
+ console.log("receiveTestResourceConfig", partialTestResource);
44
47
  const t: ITTestResourceConfiguration = JSON.parse(partialTestResource);
45
48
  const pm = new PM_Node(t, ipcfile);
46
49
  return await this.testJobs[0].receiveTestResourceConfig(pm);
@@ -58,21 +61,22 @@ const testeranto = async <I extends Ibdd_in_any, O extends Ibdd_out, M>(
58
61
  testInterface: Partial<INodeTestInterface<I>>,
59
62
  testResourceRequirement: ITTestResourceRequest = defaultTestResourceRequirement
60
63
  ): Promise<Testeranto<I, O, M>> => {
61
- const t = new NodeTesteranto<I, O, M>(
62
- input,
63
- testSpecification,
64
- testImplementation,
65
- testResourceRequirement,
66
- testInterface
67
- );
64
+ try {
65
+ const t = new NodeTesteranto<I, O, M>(
66
+ input,
67
+ testSpecification,
68
+ testImplementation,
69
+ testResourceRequirement,
70
+ testInterface
71
+ );
72
+ console.log("args", process.argv);
68
73
 
69
- process.on("unhandledRejection", (reason, promise) => {
70
- console.error("Unhandled Rejection at:", promise, "reason:", reason);
71
- // Optionally, terminate the process or perform cleanup
72
- // t.registerUncaughtPromise(reason, promise);
73
- });
74
+ process.on("unhandledRejection", (reason, promise) => {
75
+ console.error("Unhandled Rejection at:", promise, "reason:", reason);
76
+ // Optionally, terminate the process or perform cleanup
77
+ // t.registerUncaughtPromise(reason, promise);
78
+ });
74
79
 
75
- try {
76
80
  ipcfile = process.argv[3];
77
81
  const f = await t.receiveTestResourceConfig(process.argv[2]);
78
82
 
@@ -51,7 +51,15 @@ export abstract class PM_WithEslintAndTsc extends PM_Base {
51
51
  addableFiles: string[];
52
52
  }) => {
53
53
  console.log(ansiC.green(ansiC.inverse(`tsc < ${entrypoint}`)));
54
- this.typeCheckIsRunning(entrypoint);
54
+ try {
55
+ this.typeCheckIsRunning(entrypoint);
56
+ } catch (e) {
57
+ console.error("error in tscCheck");
58
+ console.error(e);
59
+ console.error(entrypoint);
60
+ console.error(JSON.stringify(this.summary, null, 2));
61
+ process.exit(-1);
62
+ }
55
63
 
56
64
  const program = tsc.createProgramFromConfig({
57
65
  basePath: process.cwd(), // always required, used for relative paths
@@ -94,7 +102,6 @@ export abstract class PM_WithEslintAndTsc extends PM_Base {
94
102
  });
95
103
 
96
104
  fs.writeFileSync(tscPath, results.join("\n"));
97
-
98
105
  this.typeCheckIsNowDone(entrypoint, results.length);
99
106
  };
100
107
 
@@ -104,7 +111,16 @@ export abstract class PM_WithEslintAndTsc extends PM_Base {
104
111
  addableFiles: string[]
105
112
  ) => {
106
113
  console.log(ansiC.green(ansiC.inverse(`eslint < ${entrypoint}`)));
107
- this.lintIsRunning(entrypoint);
114
+
115
+ try {
116
+ this.lintIsRunning(entrypoint);
117
+ } catch (e) {
118
+ console.error("error in eslintCheck");
119
+ console.error(e);
120
+ console.error(entrypoint);
121
+ console.error(JSON.stringify(this.summary, null, 2));
122
+ process.exit(-1);
123
+ }
108
124
 
109
125
  const results = (await eslint.lintFiles(addableFiles))
110
126
  .filter((r) => r.messages.length)
@@ -155,7 +171,7 @@ export abstract class PM_WithEslintAndTsc extends PM_Base {
155
171
  this.name,
156
172
  entryPoint.split(".").slice(0, -1).join("."),
157
173
  platform,
158
- `console_log.txt`
174
+ `logs.txt`
159
175
  );
160
176
 
161
177
  const lintPath = path.join(
@@ -220,55 +236,86 @@ ${addableFiles
220
236
  private ensureSummaryEntry(src: string, isSidecar = false) {
221
237
  if (!this.summary[src]) {
222
238
  this.summary[src] = {
223
- typeErrors: "?",
224
- staticErrors: "?",
225
- runTimeError: "?",
226
- prompt: "?",
227
- failingFeatures: {}
239
+ typeErrors: undefined,
240
+ staticErrors: undefined,
241
+ runTimeErrors: undefined,
242
+ prompt: undefined,
243
+ failingFeatures: {},
228
244
  };
229
245
  if (isSidecar) {
230
246
  // Sidecars don't need all fields
231
- delete this.summary[src].runTimeError;
232
- delete this.summary[src].prompt;
247
+ // delete this.summary[src].runTimeError;
248
+ // delete this.summary[src].prompt;
233
249
  }
234
250
  }
235
251
  return this.summary[src];
236
252
  }
237
253
 
238
254
  typeCheckIsRunning = (src: string) => {
239
- const entry = this.ensureSummaryEntry(src);
240
- entry.typeErrors = "?";
255
+ if (!this.summary[src]) {
256
+ throw `this.summary[${src}] is undefined`;
257
+ }
258
+
259
+ this.summary[src].typeErrors = "?";
241
260
  };
242
261
 
243
262
  typeCheckIsNowDone = (src: string, failures: number) => {
244
- const entry = this.ensureSummaryEntry(src);
245
- entry.typeErrors = failures;
263
+ if (!this.summary[src]) {
264
+ throw `this.summary[${src}] is undefined`;
265
+ }
266
+
267
+ if (failures === 0) {
268
+ console.log(ansiC.green(ansiC.inverse(`tsc > ${src}`)));
269
+ } else {
270
+ console.log(
271
+ ansiC.red(ansiC.inverse(`tsc > ${src} failed ${failures} times`))
272
+ );
273
+ }
274
+
275
+ this.summary[src].typeErrors = failures;
246
276
  this.writeBigBoard();
247
277
  this.checkForShutdown();
248
278
  };
249
279
 
250
280
  lintIsRunning = (src: string) => {
251
- const entry = this.ensureSummaryEntry(src);
252
- entry.staticErrors = "?";
281
+ if (!this.summary[src]) {
282
+ throw `this.summary[${src}] is undefined`;
283
+ }
284
+ this.summary[src].staticErrors = "?";
253
285
  this.writeBigBoard();
254
286
  };
255
287
 
256
288
  lintIsNowDone = (src: string, failures: number) => {
257
- const entry = this.ensureSummaryEntry(src);
258
- entry.staticErrors = failures;
289
+ if (!this.summary[src]) {
290
+ throw `this.summary[${src}] is undefined`;
291
+ }
292
+
293
+ if (failures === 0) {
294
+ console.log(ansiC.green(ansiC.inverse(`eslint > ${src}`)));
295
+ } else {
296
+ console.log(
297
+ ansiC.red(ansiC.inverse(`eslint > ${src} failed ${failures} times`))
298
+ );
299
+ }
300
+
301
+ this.summary[src].staticErrors = failures;
259
302
  this.writeBigBoard();
260
303
  this.checkForShutdown();
261
304
  };
262
305
 
263
306
  bddTestIsRunning = (src: string) => {
264
- const entry = this.ensureSummaryEntry(src);
265
- entry.runTimeError = "?";
307
+ if (!this.summary[src]) {
308
+ throw `this.summary[${src}] is undefined`;
309
+ }
310
+ this.summary[src].runTimeErrors = "?";
266
311
  this.writeBigBoard();
267
312
  };
268
313
 
269
314
  bddTestIsNowDone = (src: string, failures: number) => {
270
- const entry = this.ensureSummaryEntry(src);
271
- entry.runTimeError = failures;
315
+ if (!this.summary[src]) {
316
+ throw `this.summary[${src}] is undefined`;
317
+ }
318
+ this.summary[src].runTimeErrors = failures;
272
319
  this.writeBigBoard();
273
320
  this.checkForShutdown();
274
321
  };
@@ -280,50 +327,5 @@ ${addableFiles
280
327
  );
281
328
  };
282
329
 
283
- checkForShutdown = () => {
284
- console.log(ansiC.inverse(`checkForShutdown`));
285
-
286
- this.writeBigBoard();
287
-
288
- if (this.mode === "dev") return;
289
-
290
- let inflight = false;
291
-
292
- Object.keys(this.summary).forEach((k) => {
293
- if (this.summary[k].prompt === "?") {
294
- console.log(ansiC.blue(ansiC.inverse(`🕕 prompt ${k}`)));
295
- inflight = true;
296
- }
297
- });
298
-
299
- Object.keys(this.summary).forEach((k) => {
300
- if (this.summary[k].runTimeError === "?") {
301
- console.log(ansiC.blue(ansiC.inverse(`🕕 runTimeError ${k}`)));
302
- inflight = true;
303
- }
304
- });
305
-
306
- Object.keys(this.summary).forEach((k) => {
307
- if (this.summary[k].staticErrors === "?") {
308
- console.log(ansiC.blue(ansiC.inverse(`🕕 staticErrors ${k}`)));
309
- inflight = true;
310
- }
311
- });
312
-
313
- Object.keys(this.summary).forEach((k) => {
314
- if (this.summary[k].typeErrors === "?") {
315
- console.log(ansiC.blue(ansiC.inverse(`🕕 typeErrors ${k}`)));
316
- inflight = true;
317
- }
318
- });
319
-
320
- this.writeBigBoard();
321
-
322
- if (!inflight) {
323
- this.browser.disconnect().then(() => {
324
- console.log(ansiC.inverse(`${this.name} has been tested. Goodbye.`));
325
- process.exit();
326
- });
327
- }
328
- };
330
+ abstract checkForShutdown();
329
331
  }