testeranto 0.140.2 → 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 (204) hide show
  1. package/.aider.chat.history.md +11006 -0
  2. package/.aider.input.history +441 -0
  3. package/.aider.tags.cache.v3/06/1a/1ec9fd1f595d4b36094caef45894.val +0 -0
  4. package/.aider.tags.cache.v3/0f/f6/f42b5108253d75de3cb6286df7f6.val +0 -0
  5. package/.aider.tags.cache.v3/{ad/3c/10f2ab1397f6d544e613d2a6acaf.val → 3d/81/8b6f0e9b98ec2952cdb8968ac386.val} +0 -0
  6. package/.aider.tags.cache.v3/cache.db +0 -0
  7. package/.aider.tags.cache.v3/{a7/97/6d37fce350ad2d588f36729db0cd.val → d6/7d/1820c2d4b9330eab7017da4515e7.val} +0 -0
  8. package/README.md +15 -16
  9. package/dist/tsconfig.tsbuildinfo +1 -1
  10. package/docs/aiderTest.sh +1 -0
  11. package/docs/index.md +45 -33
  12. package/docs/testing.ai.txt +98 -0
  13. package/docs/testing.prompt.txt +8 -0
  14. package/package.json +3 -3
  15. package/src/Node.ts +17 -13
  16. package/src/PM/PM_WithEslintAndTsc.ts +83 -67
  17. package/src/PM/main.ts +182 -92
  18. package/src/PM/node.ts +1 -15
  19. package/src/PM/nodeSidecar.ts +0 -1
  20. package/src/Pure.test.ts +299 -0
  21. package/src/Pure.ts +20 -2
  22. package/src/Types.ts +5 -5
  23. package/src/Web.ts +1 -1
  24. package/src/build.ts +0 -1
  25. package/src/esbuildConfigs/consoleDetectorPlugin.ts +28 -14
  26. package/src/esbuildConfigs/nativeImportDetectorPlugin.ts +26 -0
  27. package/src/esbuildConfigs/pure.ts +3 -1
  28. package/src/esbuildConfigs/rebuildPlugin.ts +1 -4
  29. package/src/lib/BaseSuite.test/node.test.ts +12 -0
  30. package/src/lib/BaseSuite.test/pure.test.ts +12 -0
  31. package/src/lib/{BaseSuite.test.ts → BaseSuite.test/test.ts} +36 -27
  32. package/src/lib/BaseSuite.test/web.test.ts +12 -0
  33. package/src/lib/BaseSuite.ts +17 -15
  34. package/src/lib/abstractBase.test/MockGiven.ts +31 -0
  35. package/src/lib/abstractBase.test/MockThen.ts +20 -0
  36. package/src/lib/abstractBase.test/MockWhen.ts +17 -0
  37. package/src/lib/abstractBase.test/implementation.ts +51 -0
  38. package/src/lib/abstractBase.test/index.ts +19 -0
  39. package/src/lib/abstractBase.test/interface.ts +12 -0
  40. package/src/lib/abstractBase.test/specification.ts +49 -0
  41. package/src/lib/abstractBase.test/types.ts +19 -0
  42. package/src/lib/abstractBase.ts +0 -2
  43. package/src/lib/baseBuilder.test/TestBaseBuilder.ts +83 -0
  44. package/src/lib/baseBuilder.test/baseBuilder.test.implementation.ts +134 -0
  45. package/src/lib/baseBuilder.test/baseBuilder.test.interface.ts +18 -0
  46. package/src/lib/baseBuilder.test/baseBuilder.test.node.ts +14 -0
  47. package/src/lib/baseBuilder.test/baseBuilder.test.pure.ts +14 -0
  48. package/src/lib/baseBuilder.test/baseBuilder.test.specification.ts +35 -0
  49. package/src/lib/baseBuilder.test/baseBuilder.test.types.ts +36 -0
  50. package/src/lib/baseBuilder.test/baseBuilder.test.web.ts +14 -0
  51. package/src/lib/basebuilder.ts +2 -1
  52. package/src/lib/classBuilder.test/TestClassBuilder.ts +88 -0
  53. package/src/lib/classBuilder.test/classBuilder.test.implementation.ts +204 -0
  54. package/src/lib/classBuilder.test/classBuilder.test.interface.ts +18 -0
  55. package/src/lib/classBuilder.test/classBuilder.test.specification.ts +113 -0
  56. package/src/lib/classBuilder.test/classBuilder.test.ts +14 -0
  57. package/src/lib/classBuilder.test/classBuilder.test.types.ts +84 -0
  58. package/src/lib/core.test/MockCore.ts +49 -0
  59. package/src/lib/core.test/core.test.implementation.ts +129 -0
  60. package/src/lib/core.test/core.test.interface.ts +18 -0
  61. package/src/lib/core.test/core.test.specification.ts +99 -0
  62. package/src/lib/core.test/core.test.ts +15 -0
  63. package/src/lib/core.test/core.test.types.ts +68 -0
  64. package/src/lib/core.ts +1 -11
  65. package/src/lib/pmProxy.test/implementation.ts +104 -0
  66. package/src/lib/pmProxy.test/index.ts +19 -0
  67. package/src/lib/pmProxy.test/interface.ts +46 -0
  68. package/src/lib/pmProxy.test/mockPM.ts +38 -0
  69. package/src/lib/pmProxy.test/mockPMBase.ts +136 -0
  70. package/src/lib/pmProxy.test/specification.ts +123 -0
  71. package/src/lib/pmProxy.test/types.ts +45 -0
  72. package/src/lib/pmProxy.ts +40 -193
  73. package/src/run.ts +7 -7
  74. package/testeranto/bundles/node/allTests/chunk-NQBTLMSG.mjs +254 -0
  75. package/testeranto/bundles/node/allTests/chunk-RF3LIUSG.mjs +765 -0
  76. package/testeranto/bundles/node/allTests/chunk-YZWFKYY3.mjs +171 -0
  77. package/testeranto/bundles/node/allTests/metafile.json +628 -3567
  78. package/testeranto/bundles/node/allTests/src/lib/BaseSuite.test/node.test.mjs +325 -0
  79. package/testeranto/bundles/node/allTests/src/lib/baseBuilder.test/baseBuilder.test.node.mjs +226 -0
  80. package/testeranto/bundles/node/allTests/src/lib/classBuilder.test/classBuilder.test.mjs +408 -0
  81. package/testeranto/bundles/node/allTests/src/lib/core.test/core.test.mjs +279 -0
  82. package/testeranto/bundles/node/allTests/src/lib/pmProxy.test/index.mjs +4587 -0
  83. package/testeranto/bundles/{node/allTests/chunk-4PJCC2XT.mjs → pure/allTests/chunk-W22WOQNK.mjs} +208 -326
  84. package/testeranto/bundles/pure/allTests/metafile.json +732 -3
  85. package/testeranto/bundles/pure/allTests/src/Pure.test.mjs +369 -0
  86. package/testeranto/bundles/{node/allTests/src/lib/BaseSuite.test.mjs → pure/allTests/src/lib/BaseSuite.test/pure.test.mjs} +26 -8
  87. package/testeranto/bundles/pure/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure.mjs +224 -0
  88. package/testeranto/bundles/web/allTests/chunk-FIZ3WLUB.mjs +943 -0
  89. package/testeranto/bundles/web/allTests/metafile.json +1133 -2
  90. package/testeranto/bundles/web/allTests/src/lib/BaseSuite.test/web.test.html +19 -0
  91. package/testeranto/bundles/web/allTests/src/lib/BaseSuite.test/web.test.mjs +322 -0
  92. package/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.html +19 -0
  93. package/testeranto/bundles/web/allTests/src/lib/baseBuilder.test/baseBuilder.test.web.mjs +10964 -0
  94. package/testeranto/index.html +1 -1
  95. package/testeranto/reports/allTests/config.json +50 -11
  96. package/testeranto/reports/allTests/index.html +1 -1
  97. package/testeranto/reports/allTests/src/Pure.test/pure/lint_errors.json +1539 -0
  98. package/testeranto/reports/allTests/src/Pure.test/pure/logs.txt +11 -0
  99. package/testeranto/reports/allTests/src/Pure.test/pure/message +1 -0
  100. package/testeranto/reports/allTests/src/Pure.test/pure/prompt.txt +8 -0
  101. package/testeranto/reports/allTests/src/{PM/__tests__/pureSidecar.testeranto/node → Pure.test/pure}/type_errors.txt +18 -14
  102. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/lint_errors.json +620 -0
  103. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/logs.txt +12 -0
  104. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/message +1 -0
  105. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/prompt.txt +8 -0
  106. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node.test/node/type_errors.txt +94 -0
  107. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/index.html +21 -0
  108. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/lint_errors.json +620 -0
  109. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/logs.txt +11 -0
  110. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/message +1 -0
  111. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/prompt.txt +8 -0
  112. package/testeranto/reports/allTests/src/lib/BaseSuite.test/pure.test/pure/type_errors.txt +104 -0
  113. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/dev.html +21 -0
  114. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/index.html +21 -0
  115. package/testeranto/reports/allTests/src/lib/BaseSuite.test/{node → web.test/web}/lint_errors.json +69 -57
  116. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/logs.txt +10 -0
  117. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/message +1 -0
  118. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/prompt.txt +8 -0
  119. package/testeranto/reports/allTests/src/lib/BaseSuite.test/web.test/web/type_errors.txt +95 -0
  120. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/dev.html +21 -0
  121. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/index.html +21 -0
  122. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/lint_errors.json +966 -0
  123. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/message +1 -0
  124. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/prompt.txt +11 -0
  125. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.node/node/type_errors.txt +57 -0
  126. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/bdd_errors.txt +1 -0
  127. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/dev.html +21 -0
  128. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/index.html +21 -0
  129. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/lint_errors.json +966 -0
  130. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/log.txt +0 -0
  131. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/message +1 -0
  132. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/prompt.txt +11 -0
  133. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/tests.json +57 -0
  134. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.pure/pure/type_errors.txt +57 -0
  135. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/bdd_errors.txt +1 -0
  136. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/dev.html +21 -0
  137. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/index.html +21 -0
  138. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/lint_errors.json +966 -0
  139. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/log.txt +0 -0
  140. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/logs.txt +0 -0
  141. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/message +1 -0
  142. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/prompt.txt +11 -0
  143. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/tests.json +57 -0
  144. package/testeranto/reports/allTests/src/lib/baseBuilder.test/baseBuilder.test.web/web/type_errors.txt +48 -0
  145. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/dev.html +21 -0
  146. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/index.html +21 -0
  147. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/lint_errors.json +791 -0
  148. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/logs.txt +12 -0
  149. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/message +1 -0
  150. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/prompt.txt +11 -0
  151. package/testeranto/reports/allTests/src/lib/classBuilder.test/classBuilder.test/node/type_errors.txt +55 -0
  152. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/dev.html +21 -0
  153. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/index.html +21 -0
  154. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/lint_errors.json +416 -0
  155. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/logs.txt +17 -0
  156. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/message +1 -0
  157. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/prompt.txt +11 -0
  158. package/testeranto/reports/allTests/src/lib/core.test/core.test/node/type_errors.txt +65 -0
  159. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/dev.html +21 -0
  160. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/index.html +21 -0
  161. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/lint_errors.json +1724 -0
  162. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/log.txt +0 -0
  163. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/logs.txt +30 -0
  164. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/message +1 -0
  165. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/prompt.txt +11 -0
  166. package/testeranto/reports/allTests/src/lib/pmProxy.test/index/node/type_errors.txt +64 -0
  167. package/testeranto/reports/allTests/summary.json +59 -24
  168. package/testeranto.config.ts +37 -12
  169. package/tsc.log +273 -27
  170. package/testeranto/bundles/node/allTests/chunk-PG6KUKNP.mjs +0 -44
  171. package/testeranto/bundles/node/allTests/src/PM/__tests__/nodeSidecar.testeranto.mjs +0 -187
  172. package/testeranto/bundles/node/allTests/src/PM/__tests__/pureSidecar.testeranto.mjs +0 -156
  173. package/testeranto/bundles/node/allTests/src/PM/__tests__/webSidecar.testeranto.mjs +0 -156
  174. package/testeranto/bundles/node/allTests/src/mothership/test.mjs +0 -24411
  175. package/testeranto/reports/allTests/src/PM/__tests__/nodeSidecar.testeranto/node/index.html +0 -21
  176. package/testeranto/reports/allTests/src/PM/__tests__/nodeSidecar.testeranto/node/lint_errors.json +0 -80
  177. package/testeranto/reports/allTests/src/PM/__tests__/nodeSidecar.testeranto/node/message +0 -1
  178. package/testeranto/reports/allTests/src/PM/__tests__/nodeSidecar.testeranto/node/prompt.txt +0 -8
  179. package/testeranto/reports/allTests/src/PM/__tests__/nodeSidecar.testeranto/node/type_errors.txt +0 -28
  180. package/testeranto/reports/allTests/src/PM/__tests__/pureSidecar.testeranto/node/index.html +0 -21
  181. package/testeranto/reports/allTests/src/PM/__tests__/pureSidecar.testeranto/node/lint_errors.json +0 -80
  182. package/testeranto/reports/allTests/src/PM/__tests__/pureSidecar.testeranto/node/message +0 -1
  183. package/testeranto/reports/allTests/src/PM/__tests__/pureSidecar.testeranto/node/prompt.txt +0 -8
  184. package/testeranto/reports/allTests/src/PM/__tests__/webSidecar.testeranto/node/index.html +0 -21
  185. package/testeranto/reports/allTests/src/PM/__tests__/webSidecar.testeranto/node/lint_errors.json +0 -80
  186. package/testeranto/reports/allTests/src/PM/__tests__/webSidecar.testeranto/node/message +0 -1
  187. package/testeranto/reports/allTests/src/PM/__tests__/webSidecar.testeranto/node/prompt.txt +0 -8
  188. package/testeranto/reports/allTests/src/PM/__tests__/webSidecar.testeranto/node/type_errors.txt +0 -32
  189. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node/console_log.txt +0 -35
  190. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node/index.html +0 -21
  191. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node/message +0 -1
  192. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node/prompt.txt +0 -7
  193. package/testeranto/reports/allTests/src/lib/BaseSuite.test/node/type_errors.txt +0 -68
  194. package/testeranto/reports/allTests/src/mothership/test/node/index.html +0 -21
  195. package/testeranto/reports/allTests/src/mothership/test/node/lint_errors.json +0 -1
  196. package/testeranto/reports/allTests/src/mothership/test/node/message +0 -1
  197. package/testeranto/reports/allTests/src/mothership/test/node/prompt.txt +0 -8
  198. package/testeranto/reports/allTests/src/mothership/test/node/type_errors.txt +0 -24
  199. /package/testeranto/reports/allTests/src/{PM/__tests__/nodeSidecar.testeranto/node → Pure.test/pure}/dev.html +0 -0
  200. /package/testeranto/reports/allTests/src/{PM/__tests__/pureSidecar.testeranto/node/dev.html → Pure.test/pure/index.html} +0 -0
  201. /package/testeranto/reports/allTests/src/{PM/__tests__/webSidecar.testeranto → lib/BaseSuite.test/node.test}/node/dev.html +0 -0
  202. /package/testeranto/reports/allTests/src/lib/BaseSuite.test/{node/dev.html → node.test/node/index.html} +0 -0
  203. /package/testeranto/reports/allTests/src/{mothership/test/node → lib/BaseSuite.test/pure.test/pure}/dev.html +0 -0
  204. /package/testeranto/reports/allTests/src/lib/{BaseSuite.test/node/log.txt → baseBuilder.test/baseBuilder.test.node/node/logs.txt} +0 -0
@@ -0,0 +1,88 @@
1
+ import { BaseBuilder } from "../basebuilder";
2
+ import {
3
+ Ibdd_in_any,
4
+ Ibdd_out_any,
5
+ ITestImplementation,
6
+ ITestSpecification,
7
+ } from "../../CoreTypes";
8
+ import {
9
+ ISuiteKlasser,
10
+ IGivenKlasser,
11
+ IWhenKlasser,
12
+ IThenKlasser,
13
+ ICheckKlasser,
14
+ } from "../types";
15
+ import { ITTestResourceRequest } from "..";
16
+
17
+ /**
18
+ * Concrete implementation of BaseBuilder for testing ClassBuilder
19
+ */
20
+ export class TestClassBuilder<
21
+ I extends Ibdd_in_any,
22
+ O extends Ibdd_out_any,
23
+ M = unknown
24
+ > extends BaseBuilder<
25
+ I,
26
+ O,
27
+ Record<string, unknown>,
28
+ Record<string, unknown>,
29
+ Record<string, unknown>,
30
+ Record<string, unknown>,
31
+ Record<string, unknown>
32
+ > {
33
+ public summary: Record<string, any> = {};
34
+
35
+ constructor(
36
+ testImplementation: ITestImplementation<I, O, M> & {
37
+ suites: Record<string, any>;
38
+ givens: Record<string, any>;
39
+ whens: Record<string, any>;
40
+ thens: Record<string, any>;
41
+ checks: Record<string, any>;
42
+ },
43
+ testSpecification: ITestSpecification<I, O>,
44
+ input: I["iinput"],
45
+ suiteKlasser: ISuiteKlasser<I, O>,
46
+ givenKlasser: IGivenKlasser<I>,
47
+ whenKlasser: IWhenKlasser<I>,
48
+ thenKlasser: IThenKlasser<I>,
49
+ checkKlasser: ICheckKlasser<I>,
50
+ testResourceRequirement: ITTestResourceRequest
51
+ ) {
52
+ super(
53
+ input,
54
+ {}, // suitesOverrides
55
+ {}, // givenOverides
56
+ {}, // whenOverides
57
+ {}, // thenOverides
58
+ {}, // checkOverides
59
+ testResourceRequirement,
60
+ testSpecification
61
+ );
62
+
63
+ this.summary = {};
64
+ }
65
+
66
+ /**
67
+ * Simplified test run for verification
68
+ */
69
+ public testRun(puppetMaster: any): Promise<any> {
70
+ this.summary = {
71
+ [puppetMaster.testResourceConfiguration.name]: {
72
+ typeErrors: 0,
73
+ staticErrors: 0,
74
+ runTimeError: "",
75
+ prompt: "",
76
+ failingFeatures: {},
77
+ },
78
+ };
79
+
80
+ return Promise.resolve({
81
+ failed: false,
82
+ fails: 0,
83
+ artifacts: [],
84
+ logPromise: Promise.resolve(),
85
+ features: [],
86
+ });
87
+ }
88
+ }
@@ -0,0 +1,204 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ import { PassThrough } from "stream";
3
+
4
+ import { ITestImplementation, ITestSpecification } from "../../CoreTypes";
5
+ import { TestClassBuilder } from "./TestClassBuilder";
6
+ import { I, O, M } from "./classBuilder.test.types";
7
+
8
+ import { ITTestResourceRequest } from "..";
9
+ import { specification } from "./classBuilder.test.specification";
10
+
11
+ export const implementation: ITestImplementation<I, O, M> = {
12
+ suites: {
13
+ Default: "ClassBuilder test suite",
14
+ },
15
+
16
+ givens: {
17
+ Default: () => {
18
+ return new TestClassBuilder(
19
+ implementation, // Use the current implementation
20
+ specification, // Use the current specification
21
+ {}, // Default input
22
+ class {}, // suiteKlasser
23
+ class {}, // givenKlasser
24
+ class {}, // whenKlasser
25
+ class {}, // thenKlasser
26
+ class {}, // checkKlasser
27
+ { ports: [] } // Default resource requirements
28
+ );
29
+ },
30
+ WithCustomInput: (input: any) => {
31
+ return new TestClassBuilder(
32
+ implementation,
33
+ specification,
34
+ input,
35
+ class {},
36
+ class {},
37
+ class {},
38
+ class {},
39
+ class {},
40
+ { ports: [] }
41
+ );
42
+ },
43
+ WithResourceRequirements: (requirements: ITTestResourceRequest) => {
44
+ return new TestClassBuilder(
45
+ implementation,
46
+ specification,
47
+ {},
48
+ class {},
49
+ class {},
50
+ class {},
51
+ class {},
52
+ class {},
53
+ requirements
54
+ );
55
+ },
56
+ WithCustomImplementation: (impl: ITestImplementation<any, any>) => {
57
+ return new TestClassBuilder(
58
+ impl,
59
+ specification,
60
+ {},
61
+ class {},
62
+ class {},
63
+ class {},
64
+ class {},
65
+ class {},
66
+ { ports: [] }
67
+ );
68
+ },
69
+ WithCustomSpecification: (spec: ITestSpecification<any, any>) => {
70
+ return new TestClassBuilder(
71
+ implementation,
72
+ spec,
73
+ {},
74
+ class {},
75
+ class {},
76
+ class {},
77
+ class {},
78
+ class {},
79
+ { ports: [] }
80
+ );
81
+ },
82
+ },
83
+
84
+ whens: {
85
+ addArtifact: (artifact: Promise<any>) => (builder) => {
86
+ builder.artifacts.push(artifact);
87
+ return builder;
88
+ },
89
+ setTestJobs: (jobs: any[]) => (builder) => {
90
+ builder.testJobs = jobs;
91
+ return builder;
92
+ },
93
+ modifySpecs: (modifier: (specs: any[]) => any[]) => (builder) => {
94
+ builder.specs = modifier(builder.specs || []);
95
+ return builder;
96
+ },
97
+ modifyJobs: (modifier: (jobs: any[]) => any[]) => (builder) => {
98
+ builder.testJobs = modifier(builder.testJobs || []);
99
+ return builder;
100
+ },
101
+ triggerError: (message: string) => (builder) => {
102
+ throw new Error(message);
103
+ },
104
+ },
105
+
106
+ thens: {
107
+ initializedProperly: () => (builder) => {
108
+ if (!(builder instanceof TestClassBuilder)) {
109
+ throw new Error("Builder was not properly initialized");
110
+ }
111
+ return builder;
112
+ },
113
+ specsGenerated: () => (builder) => {
114
+ if (!Array.isArray(builder.specs)) {
115
+ throw new Error("Specs were not generated");
116
+ }
117
+ return builder;
118
+ },
119
+ jobsCreated: () => (builder) => {
120
+ if (!Array.isArray(builder.testJobs)) {
121
+ throw new Error("Test jobs were not created");
122
+ }
123
+ return builder;
124
+ },
125
+ artifactsTracked: () => (builder) => {
126
+ if (!Array.isArray(builder.artifacts)) {
127
+ throw new Error("Artifacts array not initialized");
128
+ }
129
+ return builder;
130
+ },
131
+ resourceRequirementsSet: () => (builder) => {
132
+ if (!builder.testResourceRequirement) {
133
+ throw new Error("Resource requirements not set");
134
+ }
135
+ return builder;
136
+ },
137
+ suitesOverridesConfigured: () => (builder) => {
138
+ if (!builder.suitesOverrides) {
139
+ throw new Error("Suites overrides not configured");
140
+ }
141
+ return builder;
142
+ },
143
+ givensOverridesConfigured: () => (builder) => {
144
+ if (!builder.givenOverides) {
145
+ throw new Error("Givens overrides not configured");
146
+ }
147
+ return builder;
148
+ },
149
+ whensOverridesConfigured: () => (builder) => {
150
+ if (!builder.whenOverides) {
151
+ throw new Error("Whens overrides not configured");
152
+ }
153
+ return builder;
154
+ },
155
+ thensOverridesConfigured: () => (builder) => {
156
+ if (!builder.thenOverides) {
157
+ throw new Error("Thens overrides not configured");
158
+ }
159
+ return builder;
160
+ },
161
+ checksOverridesConfigured: () => (builder) => {
162
+ if (!builder.checkOverides) {
163
+ throw new Error("Checks overrides not configured");
164
+ }
165
+ return builder;
166
+ },
167
+ specsModified: (expectedCount: number) => (builder) => {
168
+ if (builder.specs.length <= expectedCount) {
169
+ throw new Error(`Expected at least ${expectedCount} modified specs`);
170
+ }
171
+ return builder;
172
+ },
173
+ jobsModified: (expectedCount: number) => (builder) => {
174
+ if (builder.testJobs.length <= expectedCount) {
175
+ throw new Error(`Expected at least ${expectedCount} modified jobs`);
176
+ }
177
+ return builder;
178
+ },
179
+ errorThrown: (expectedMessage: string) => (builder) => {
180
+ // This is handled by the test runner
181
+ return builder;
182
+ },
183
+ testRunSuccessful: () => async (builder) => {
184
+ try {
185
+ await builder.testRun({
186
+ testResourceConfiguration: {
187
+ name: "test",
188
+ fs: "/tmp",
189
+ ports: [],
190
+ },
191
+ });
192
+ return builder;
193
+ } catch (e) {
194
+ throw new Error(`Test run failed: ${e.message}`);
195
+ }
196
+ },
197
+ },
198
+
199
+ checks: {
200
+ Default: () => new PassThrough(),
201
+ ImplementationCheck: (validator) => validator(implementation),
202
+ SpecificationCheck: (validator) => validator(specification),
203
+ },
204
+ };
@@ -0,0 +1,18 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { ITestInterface } from "../../CoreTypes";
3
+ import { I } from "../baseBuilder.test/baseBuilder.test.types";
4
+
5
+ export const testInterface: ITestInterface<I> = {
6
+ beforeEach: async (subject, initializer) => {
7
+ return initializer();
8
+ },
9
+ andWhen: async (store, whenCB, testResource, utils) => {
10
+ return whenCB(store, utils);
11
+ },
12
+ butThen: async (store, thenCB, testResource, pm) => {
13
+ return thenCB(store, pm);
14
+ },
15
+ afterEach: (store) => store,
16
+ afterAll: () => {},
17
+ assertThis: (x: any) => {},
18
+ };
@@ -0,0 +1,113 @@
1
+ import { ITestJob } from "..";
2
+ import { ITestSpecification } from "../../CoreTypes";
3
+ import { I, O } from "./classBuilder.test.types";
4
+
5
+ export const specification: ITestSpecification<I, O> = (
6
+ Suite,
7
+ Given,
8
+ When,
9
+ Then,
10
+ Check
11
+ ) => {
12
+ return [
13
+ Suite.Default(
14
+ "Basic ClassBuilder Functionality",
15
+ {
16
+ // Basic initialization tests
17
+ initialization: Given.Default(
18
+ ["ClassBuilder should initialize with default values"],
19
+ [],
20
+ [Then.initializedProperly()]
21
+ ),
22
+ customInput: Given.WithCustomInput(
23
+ { custom: "input" },
24
+ [],
25
+ [Then.initializedProperly()]
26
+ ),
27
+ resourceRequirements: Given.WithResourceRequirements(
28
+ { ports: [3000, 3001] },
29
+ [],
30
+ [Then.resourceRequirementsSet()]
31
+ ),
32
+
33
+ // Core functionality tests
34
+ specGeneration: Given.Default(
35
+ ["Should generate specs from test specification"],
36
+ [],
37
+ [Then.specsGenerated()]
38
+ ),
39
+ jobCreation: Given.Default(
40
+ ["Should create test jobs from specs"],
41
+ [],
42
+ [Then.jobsCreated()]
43
+ ),
44
+ artifactTracking: Given.Default(
45
+ ["Should track artifacts"],
46
+ [When.addArtifact(Promise.resolve("test"))],
47
+ [Then.artifactsTracked()]
48
+ ),
49
+
50
+ // Configuration tests
51
+ overridesConfiguration: Given.Default(
52
+ ["Should properly configure all overrides"],
53
+ [],
54
+ [
55
+ Then.suitesOverridesConfigured(),
56
+ Then.givensOverridesConfigured(),
57
+ Then.whensOverridesConfigured(),
58
+ Then.thensOverridesConfigured(),
59
+ Then.checksOverridesConfigured(),
60
+ ]
61
+ ),
62
+ },
63
+ []
64
+ ),
65
+
66
+ Suite.ExtendedSuite(
67
+ "Advanced ClassBuilder Functionality",
68
+ {
69
+ // Custom implementations
70
+ customImplementation: Given.WithCustomImplementation(
71
+ implementation,
72
+ [],
73
+ [Then.specsGenerated(), Then.jobsCreated()]
74
+ ),
75
+ customSpecification: Given.WithCustomSpecification(
76
+ specification,
77
+ [],
78
+ [Then.specsGenerated(), Then.jobsCreated()]
79
+ ),
80
+
81
+ // Dynamic modification tests
82
+ modifySpecs: Given.Default(
83
+ ["Should allow modifying specs"],
84
+ [When.modifySpecs((specs) => [...specs, "extra"])],
85
+ [Then.specsModified(1)]
86
+ ),
87
+ modifyJobs: Given.Default(
88
+ ["Should allow modifying jobs"],
89
+ [When.modifyJobs((jobs) => [...jobs, {} as ITestJob])],
90
+ [Then.jobsModified(1)]
91
+ ),
92
+
93
+ // Error handling
94
+ errorHandling: Given.Default(
95
+ ["Should properly handle errors"],
96
+ [When.triggerError("test error")],
97
+ [Then.errorThrown("test error")]
98
+ ),
99
+
100
+ // Full test run
101
+ testRun: Given.Default(
102
+ ["Should complete a full test run successfully"],
103
+ [],
104
+ [Then.testRunSuccessful()]
105
+ ),
106
+ },
107
+ [
108
+ Check.ImplementationCheck((impl) => impl !== null),
109
+ Check.SpecificationCheck((spec) => spec !== null),
110
+ ]
111
+ ),
112
+ ];
113
+ };
@@ -0,0 +1,14 @@
1
+ import Testeranto from "../../Node";
2
+
3
+ import { ClassBuilder } from "../classBuilder";
4
+ import { specification } from "./classBuilder.test.specification";
5
+ import { implementation } from "./classBuilder.test.implementation";
6
+ import { testInterface } from "./classBuilder.test.interface";
7
+ import { I, O, M } from "./classBuilder.test.types";
8
+
9
+ export default Testeranto<I, O, M>(
10
+ ClassBuilder.prototype,
11
+ specification,
12
+ implementation,
13
+ testInterface
14
+ );
@@ -0,0 +1,84 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import {
3
+ Ibdd_in,
4
+ Ibdd_out,
5
+ ITestImplementation,
6
+ ITestSpecification,
7
+ } from "../../CoreTypes";
8
+ import { ClassBuilder } from "../classBuilder";
9
+ import { ITestJob, ITTestResourceRequest } from "..";
10
+
11
+ export type I = Ibdd_in<
12
+ {}, // iinput
13
+ ClassBuilder<any, any, any>, // isubject
14
+ ClassBuilder<any, any, any>, // istore
15
+ ClassBuilder<any, any, any>, // iselection
16
+ () => ClassBuilder<any, any, any>, // given
17
+ (store: any) => any, // when
18
+ (store: any) => any // then
19
+ >;
20
+
21
+ export type O = Ibdd_out<
22
+ // Suites
23
+ {
24
+ Default: [string];
25
+ ExtendedSuite: [description: string];
26
+ },
27
+ // Givens
28
+ {
29
+ Default: [];
30
+ WithCustomInput: [input: any];
31
+ WithResourceRequirements: [requirements: ITTestResourceRequest];
32
+ WithCustomImplementation: [impl: ITestImplementation<any, any>];
33
+ WithCustomSpecification: [spec: ITestSpecification<any, any>];
34
+ },
35
+ // Whens
36
+ {
37
+ addArtifact: [artifact: Promise<any>];
38
+ setTestJobs: [jobs: ITestJob[]];
39
+ modifySpecs: [modifier: (specs: any[]) => any[]];
40
+ modifyJobs: [modifier: (jobs: ITestJob[]) => ITestJob[]];
41
+ triggerError: [message: string];
42
+ },
43
+ // Thens
44
+ {
45
+ initializedProperly: [];
46
+ specsGenerated: [];
47
+ jobsCreated: [];
48
+ artifactsTracked: [];
49
+ resourceRequirementsSet: [];
50
+ suitesOverridesConfigured: [];
51
+ givensOverridesConfigured: [];
52
+ whensOverridesConfigured: [];
53
+ thensOverridesConfigured: [];
54
+ checksOverridesConfigured: [];
55
+ specsModified: [expectedCount: number];
56
+ jobsModified: [expectedCount: number];
57
+ errorThrown: [expectedMessage: string];
58
+ testRunSuccessful: [];
59
+ },
60
+ // Checks
61
+ {
62
+ Default: [];
63
+ ImplementationCheck: [validator: (impl: any) => boolean];
64
+ SpecificationCheck: [validator: (spec: any) => boolean];
65
+ }
66
+ >;
67
+
68
+ export type M = {
69
+ givens: {
70
+ [K in keyof O["givens"]]: (
71
+ ...args: O["givens"][K]
72
+ ) => ClassBuilder<any, any, any>;
73
+ };
74
+ whens: {
75
+ [K in keyof O["whens"]]: (
76
+ ...args: O["whens"][K]
77
+ ) => (builder: ClassBuilder<any, any, any>) => ClassBuilder<any, any, any>;
78
+ };
79
+ thens: {
80
+ [K in keyof O["thens"]]: (
81
+ ...args: O["thens"][K]
82
+ ) => (builder: ClassBuilder<any, any, any>) => ClassBuilder<any, any, any>;
83
+ };
84
+ };
@@ -0,0 +1,49 @@
1
+ import TesterantoCore from "../core";
2
+
3
+ import {
4
+ Ibdd_in_any,
5
+ Ibdd_out_any,
6
+ ITestImplementation,
7
+ ITestSpecification,
8
+ ITestInterface,
9
+ } from "../../CoreTypes";
10
+ import { ITTestResourceRequest, IFinalResults } from "..";
11
+
12
+ /**
13
+ * Concrete implementation of Testeranto for testing purposes
14
+ */
15
+ export class MockCore<
16
+ I extends Ibdd_in_any,
17
+ O extends Ibdd_out_any,
18
+ M = unknown
19
+ > extends TesterantoCore<I, O, M> {
20
+ constructor(
21
+ input: I["iinput"],
22
+ testSpecification: ITestSpecification<I, O>,
23
+ testImplementation: ITestImplementation<I, O, M>,
24
+ testResourceRequirement: ITTestResourceRequest = { ports: [] },
25
+ testInterface: Partial<ITestInterface<I>> = {},
26
+ uberCatcher: (cb: () => void) => void = (cb) => cb()
27
+ ) {
28
+ super(
29
+ input,
30
+ testSpecification,
31
+ testImplementation,
32
+ testResourceRequirement,
33
+ testInterface,
34
+ uberCatcher
35
+ );
36
+ }
37
+
38
+ async receiveTestResourceConfig(
39
+ partialTestResource: string
40
+ ): Promise<IFinalResults> {
41
+ return {
42
+ failed: false,
43
+ fails: 0,
44
+ artifacts: [],
45
+ logPromise: Promise.resolve(),
46
+ features: [],
47
+ };
48
+ }
49
+ }
@@ -0,0 +1,129 @@
1
+ import { ITestImplementation } from "../../CoreTypes";
2
+ import { MockCore } from "./MockCore";
3
+ import { I, O, M } from "./core.test.types";
4
+ import { PassThrough } from "stream";
5
+ import { ITTestResourceRequest } from "..";
6
+ import { ITestInterface } from "../../CoreTypes";
7
+
8
+ export const implementation: ITestImplementation<I, O, M> = {
9
+ suites: {
10
+ Default: "Testeranto test suite",
11
+ ExtendedSuite: "Extended Testeranto test suite",
12
+ },
13
+
14
+ givens: {
15
+ Default: () => {
16
+ return new MockCore(
17
+ {}, // input
18
+ specification, // testSpecification
19
+ implementation, // testImplementation
20
+ { ports: [] }, // testResourceRequirement
21
+ testInterface, // testInterface
22
+ (cb) => cb() // uberCatcher
23
+ );
24
+ },
25
+ WithCustomInput: (input: any) => {
26
+ return new MockCore(
27
+ input,
28
+ specification,
29
+ implementation,
30
+ { ports: [] },
31
+ testInterface,
32
+ (cb) => cb()
33
+ );
34
+ },
35
+ WithResourceRequirements: (requirements: ITTestResourceRequest) => {
36
+ return new MockCore(
37
+ {},
38
+ specification,
39
+ implementation,
40
+ requirements,
41
+ testInterface,
42
+ (cb) => cb()
43
+ );
44
+ },
45
+ WithCustomInterface: (customInterface: Partial<ITestInterface<any>>) => {
46
+ return new MockCore(
47
+ {},
48
+ specification,
49
+ implementation,
50
+ { ports: [] },
51
+ {...testInterface, ...customInterface},
52
+ (cb) => cb()
53
+ );
54
+ }
55
+ },
56
+
57
+ whens: {
58
+ addArtifact: (artifact: Promise<any>) => (builder) => {
59
+ builder.artifacts.push(artifact);
60
+ return builder;
61
+ },
62
+ setTestJobs: (jobs: any[]) => (builder) => {
63
+ builder.testJobs = jobs;
64
+ return builder;
65
+ },
66
+ modifySpecs: (modifier: (specs: any[]) => any[]) => (builder) => {
67
+ builder.specs = modifier(builder.specs || []);
68
+ return builder;
69
+ },
70
+ triggerError: (message: string) => (builder) => {
71
+ throw new Error(message);
72
+ },
73
+ },
74
+
75
+ thens: {
76
+ initializedProperly: () => (builder) => {
77
+ if (!(builder instanceof MockCore)) {
78
+ throw new Error("Builder was not properly initialized");
79
+ }
80
+ return builder;
81
+ },
82
+ specsGenerated: () => (builder) => {
83
+ if (!Array.isArray(builder.specs)) {
84
+ throw new Error("Specs were not generated");
85
+ }
86
+ return builder;
87
+ },
88
+ jobsCreated: () => (builder) => {
89
+ if (!Array.isArray(builder.testJobs)) {
90
+ throw new Error("Test jobs were not created");
91
+ }
92
+ return builder;
93
+ },
94
+ artifactsTracked: () => (builder) => {
95
+ if (!Array.isArray(builder.artifacts)) {
96
+ throw new Error("Artifacts array not initialized");
97
+ }
98
+ return builder;
99
+ },
100
+ resourceRequirementsSet: () => (builder) => {
101
+ if (!builder.testResourceRequirement) {
102
+ throw new Error("Resource requirements not set");
103
+ }
104
+ return builder;
105
+ },
106
+ interfaceConfigured: () => (builder) => {
107
+ if (!builder.testInterface) {
108
+ throw new Error("Test interface not configured");
109
+ }
110
+ return builder;
111
+ },
112
+ errorThrown: (expectedMessage: string) => (builder) => {
113
+ // Handled by test runner
114
+ return builder;
115
+ },
116
+ testRunSuccessful: () => async (builder) => {
117
+ try {
118
+ await builder.receiveTestResourceConfig("");
119
+ return builder;
120
+ } catch (e) {
121
+ throw new Error(`Test run failed: ${e.message}`);
122
+ }
123
+ },
124
+ },
125
+
126
+ checks: {
127
+ Default: () => new PassThrough(),
128
+ },
129
+ };