@neurodevs/node-tdd 0.2.5 → 1.0.1

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 (326) hide show
  1. package/.vscode/launch.json +52 -57
  2. package/.vscode/settings.json +61 -66
  3. package/.vscode/tasks.json +98 -129
  4. package/README.md +1 -0
  5. package/build/.spruce/settings.json +3 -10
  6. package/build/__tests__/MockFetch.d.ts +18 -0
  7. package/build/__tests__/MockFetch.js +55 -0
  8. package/build/__tests__/MockFetch.js.map +1 -0
  9. package/build/__tests__/{impl → behavioral}/AbstractModuleTest.test.d.ts +2 -3
  10. package/build/__tests__/{impl → behavioral}/AbstractModuleTest.test.js +3 -12
  11. package/build/__tests__/behavioral/AbstractModuleTest.test.js.map +1 -0
  12. package/build/__tests__/behavioral/utilities/AllHooksCalledEvenIfNotDefined.test.d.ts +5 -0
  13. package/build/__tests__/behavioral/utilities/AllHooksCalledEvenIfNotDefined.test.js +34 -0
  14. package/build/__tests__/behavioral/utilities/AllHooksCalledEvenIfNotDefined.test.js.map +1 -0
  15. package/build/__tests__/behavioral/utilities/Assert.test.d.ts +45 -0
  16. package/build/__tests__/behavioral/utilities/Assert.test.js +645 -0
  17. package/build/__tests__/behavioral/utilities/Assert.test.js.map +1 -0
  18. package/build/__tests__/behavioral/utilities/InstanceParentTestCanAccessParentMethods.test.d.ts +4 -0
  19. package/build/__tests__/behavioral/utilities/InstanceParentTestCanAccessParentMethods.test.js +23 -0
  20. package/build/__tests__/behavioral/utilities/InstanceParentTestCanAccessParentMethods.test.js.map +1 -0
  21. package/build/__tests__/behavioral/utilities/MockFetch.test.d.ts +28 -0
  22. package/build/__tests__/behavioral/utilities/MockFetch.test.js +211 -0
  23. package/build/__tests__/behavioral/utilities/MockFetch.test.js.map +1 -0
  24. package/build/__tests__/behavioral/utilities/StackCleaner.test.d.ts +4 -0
  25. package/build/__tests__/behavioral/utilities/StackCleaner.test.js +46 -0
  26. package/build/__tests__/behavioral/utilities/StackCleaner.test.js.map +1 -0
  27. package/build/__tests__/behavioral/utilities/StaticParentTestCanAccessParentMethods.test.d.ts +7 -0
  28. package/build/__tests__/behavioral/utilities/StaticParentTestCanAccessParentMethods.test.js +32 -0
  29. package/build/__tests__/behavioral/utilities/StaticParentTestCanAccessParentMethods.test.js.map +1 -0
  30. package/build/__tests__/behavioral/utilities/StaticTestInheritsAbstractSpruceTestProperly.test.d.ts +4 -0
  31. package/build/__tests__/behavioral/utilities/StaticTestInheritsAbstractSpruceTestProperly.test.js +19 -0
  32. package/build/__tests__/behavioral/utilities/StaticTestInheritsAbstractSpruceTestProperly.test.js.map +1 -0
  33. package/build/__tests__/behavioral/utilities/Stringify.test.d.ts +5 -0
  34. package/build/__tests__/behavioral/utilities/Stringify.test.js +127 -0
  35. package/build/__tests__/behavioral/utilities/Stringify.test.js.map +1 -0
  36. package/build/__tests__/behavioral/utilities/TestDecoratorResolver.test.d.ts +7 -0
  37. package/build/__tests__/behavioral/utilities/TestDecoratorResolver.test.js +38 -0
  38. package/build/__tests__/behavioral/utilities/TestDecoratorResolver.test.js.map +1 -0
  39. package/build/__tests__/behavioral/utilities/TestOnBasic.test.d.ts +12 -0
  40. package/build/__tests__/behavioral/utilities/TestOnBasic.test.js +68 -0
  41. package/build/__tests__/behavioral/utilities/TestOnBasic.test.js.map +1 -0
  42. package/build/__tests__/behavioral/utilities/TestOnInstance.test.d.ts +28 -0
  43. package/build/__tests__/behavioral/utilities/TestOnInstance.test.js +289 -0
  44. package/build/__tests__/behavioral/utilities/TestOnInstance.test.js.map +1 -0
  45. package/build/__tests__/behavioral/utilities/TestOnInstanceExtendsTest.test.d.ts +9 -0
  46. package/build/__tests__/behavioral/utilities/TestOnInstanceExtendsTest.test.js +118 -0
  47. package/build/__tests__/behavioral/utilities/TestOnInstanceExtendsTest.test.js.map +1 -0
  48. package/build/__tests__/behavioral/utilities/TestOnInstanceExtendsTestWithHooks.test.d.ts +5 -0
  49. package/build/__tests__/behavioral/utilities/TestOnInstanceExtendsTestWithHooks.test.js +78 -0
  50. package/build/__tests__/behavioral/utilities/TestOnInstanceExtendsTestWithHooks.test.js.map +1 -0
  51. package/build/__tests__/behavioral/utilities/TestOnInstanceWithParentBeforeAll.test.d.ts +4 -0
  52. package/build/__tests__/behavioral/utilities/TestOnInstanceWithParentBeforeAll.test.js +23 -0
  53. package/build/__tests__/behavioral/utilities/TestOnInstanceWithParentBeforeAll.test.js.map +1 -0
  54. package/build/__tests__/behavioral/utilities/TestOnInstanceWithTwoLevelsOfInheritence.test.d.ts +4 -0
  55. package/build/__tests__/behavioral/utilities/TestOnInstanceWithTwoLevelsOfInheritence.test.js +24 -0
  56. package/build/__tests__/behavioral/utilities/TestOnInstanceWithTwoLevelsOfInheritence.test.js.map +1 -0
  57. package/build/__tests__/behavioral/utilities/TestResolver.test.d.ts +7 -0
  58. package/build/__tests__/behavioral/utilities/TestResolver.test.js +38 -0
  59. package/build/__tests__/behavioral/utilities/TestResolver.test.js.map +1 -0
  60. package/build/__tests__/behavioral/utilities/TestResolverOnStatic.test.d.ts +4 -0
  61. package/build/__tests__/behavioral/utilities/TestResolverOnStatic.test.js +20 -0
  62. package/build/__tests__/behavioral/utilities/TestResolverOnStatic.test.js.map +1 -0
  63. package/build/__tests__/behavioral/workspace/JestJsonParser.test.d.ts +18 -0
  64. package/build/__tests__/behavioral/workspace/JestJsonParser.test.js +267 -0
  65. package/build/__tests__/behavioral/workspace/JestJsonParser.test.js.map +1 -0
  66. package/build/__tests__/behavioral/workspace/TestReporter.test.d.ts +16 -0
  67. package/build/__tests__/behavioral/workspace/TestReporter.test.js +227 -0
  68. package/build/__tests__/behavioral/workspace/TestReporter.test.js.map +1 -0
  69. package/build/__tests__/behavioral/workspace/TestRunner.test.d.ts +15 -0
  70. package/build/__tests__/behavioral/workspace/TestRunner.test.js +99 -0
  71. package/build/__tests__/behavioral/workspace/TestRunner.test.js.map +1 -0
  72. package/build/__tests__/behavioral/workspace/Widgets.test.d.ts +13 -0
  73. package/build/__tests__/behavioral/workspace/Widgets.test.js +99 -0
  74. package/build/__tests__/behavioral/workspace/Widgets.test.js.map +1 -0
  75. package/build/__tests__/mock-terminal-kit.d.ts +79 -0
  76. package/build/__tests__/mock-terminal-kit.js +103 -0
  77. package/build/__tests__/mock-terminal-kit.js.map +1 -0
  78. package/build/__tests__/support/AbstractForInstanceTest.d.ts +4 -0
  79. package/build/__tests__/support/AbstractForInstanceTest.js +9 -0
  80. package/build/__tests__/support/AbstractForInstanceTest.js.map +1 -0
  81. package/build/__tests__/support/AbstractLevelOneTest.d.ts +3 -0
  82. package/build/__tests__/support/AbstractLevelOneTest.js +4 -0
  83. package/build/__tests__/support/AbstractLevelOneTest.js.map +1 -0
  84. package/build/__tests__/support/AbstractLevelTwoTest.d.ts +7 -0
  85. package/build/__tests__/support/AbstractLevelTwoTest.js +14 -0
  86. package/build/__tests__/support/AbstractLevelTwoTest.js.map +1 -0
  87. package/build/__tests__/support/AbstractStaticTest.d.ts +7 -0
  88. package/build/__tests__/support/AbstractStaticTest.js +14 -0
  89. package/build/__tests__/support/AbstractStaticTest.js.map +1 -0
  90. package/build/__tests__/support/AbstractTestOnInstanceTest.d.ts +22 -0
  91. package/build/__tests__/support/AbstractTestOnInstanceTest.js +23 -0
  92. package/build/__tests__/support/AbstractTestOnInstanceTest.js.map +1 -0
  93. package/build/__tests__/support/AbstractTestOnInstanceWithHooks.d.ts +26 -0
  94. package/build/__tests__/support/AbstractTestOnInstanceWithHooks.js +59 -0
  95. package/build/__tests__/support/AbstractTestOnInstanceWithHooks.js.map +1 -0
  96. package/build/__tests__/support/jest.setup.d.ts +1 -0
  97. package/build/__tests__/support/jest.setup.js +4 -0
  98. package/build/__tests__/support/jest.setup.js.map +1 -0
  99. package/build/__tests__/support/onTestFileResult.d.ts +244 -0
  100. package/build/__tests__/support/onTestFileResult.js +980 -0
  101. package/build/__tests__/support/onTestFileResult.js.map +1 -0
  102. package/build/impl/AbstractModuleTest.d.ts +18 -4
  103. package/build/impl/AbstractModuleTest.js +47 -9
  104. package/build/impl/AbstractModuleTest.js.map +1 -1
  105. package/build/index.d.ts +4 -4
  106. package/build/index.js +4 -4
  107. package/build/index.js.map +1 -1
  108. package/build/utilities/AssertionError.d.ts +3 -0
  109. package/build/utilities/AssertionError.js +12 -0
  110. package/build/utilities/AssertionError.js.map +1 -0
  111. package/build/utilities/StackCleaner.d.ts +4 -0
  112. package/build/utilities/StackCleaner.js +10 -0
  113. package/build/utilities/StackCleaner.js.map +1 -0
  114. package/build/utilities/TestDecoratorResolver.d.ts +35 -0
  115. package/build/utilities/TestDecoratorResolver.js +93 -0
  116. package/build/utilities/TestDecoratorResolver.js.map +1 -0
  117. package/build/utilities/assert.d.ts +49 -0
  118. package/build/utilities/assert.js +255 -0
  119. package/build/utilities/assert.js.map +1 -0
  120. package/build/utilities/assert.utility.d.ts +28 -0
  121. package/build/utilities/assert.utility.js +185 -0
  122. package/build/utilities/assert.utility.js.map +1 -0
  123. package/build/utilities/decorators.d.ts +9 -0
  124. package/build/utilities/decorators.js +133 -0
  125. package/build/utilities/decorators.js.map +1 -0
  126. package/build/workspace/CommandService.d.ts +49 -0
  127. package/build/workspace/CommandService.js +179 -0
  128. package/build/workspace/CommandService.js.map +1 -0
  129. package/build/workspace/JestJsonParser.d.ts +15 -0
  130. package/build/workspace/JestJsonParser.js +149 -0
  131. package/build/workspace/JestJsonParser.js.map +1 -0
  132. package/build/workspace/TKButtonWidget.d.ts +13 -0
  133. package/build/workspace/TKButtonWidget.js +37 -0
  134. package/build/workspace/TKButtonWidget.js.map +1 -0
  135. package/build/workspace/TestLogItemGenerator.d.ts +15 -0
  136. package/build/workspace/TestLogItemGenerator.js +142 -0
  137. package/build/workspace/TestLogItemGenerator.js.map +1 -0
  138. package/build/workspace/TestReporter.d.ts +103 -0
  139. package/build/workspace/TestReporter.js +677 -0
  140. package/build/workspace/TestReporter.js.map +1 -0
  141. package/build/workspace/TestRunner.d.ts +24 -0
  142. package/build/workspace/TestRunner.js +95 -0
  143. package/build/workspace/TestRunner.js.map +1 -0
  144. package/build/workspace/TkBaseWidget.d.ts +37 -0
  145. package/build/workspace/TkBaseWidget.js +185 -0
  146. package/build/workspace/TkBaseWidget.js.map +1 -0
  147. package/build/workspace/TkInputWidget.d.ts +16 -0
  148. package/build/workspace/TkInputWidget.js +64 -0
  149. package/build/workspace/TkInputWidget.js.map +1 -0
  150. package/build/workspace/TkLayoutCellWidget.d.ts +18 -0
  151. package/build/workspace/TkLayoutCellWidget.js +32 -0
  152. package/build/workspace/TkLayoutCellWidget.js.map +1 -0
  153. package/build/workspace/TkLayoutWidget.d.ts +34 -0
  154. package/build/workspace/TkLayoutWidget.js +130 -0
  155. package/build/workspace/TkLayoutWidget.js.map +1 -0
  156. package/build/workspace/TkMenuBarWidget.d.ts +13 -0
  157. package/build/workspace/TkMenuBarWidget.js +71 -0
  158. package/build/workspace/TkMenuBarWidget.js.map +1 -0
  159. package/build/workspace/TkPopupWidget.d.ts +16 -0
  160. package/build/workspace/TkPopupWidget.js +36 -0
  161. package/build/workspace/TkPopupWidget.js.map +1 -0
  162. package/build/workspace/TkProgressBarWidget.d.ts +10 -0
  163. package/build/workspace/TkProgressBarWidget.js +39 -0
  164. package/build/workspace/TkProgressBarWidget.js.map +1 -0
  165. package/build/workspace/TkTextWidget.d.ts +20 -0
  166. package/build/workspace/TkTextWidget.js +115 -0
  167. package/build/workspace/TkTextWidget.js.map +1 -0
  168. package/build/workspace/TkWindowWidget.d.ts +22 -0
  169. package/build/workspace/TkWindowWidget.js +88 -0
  170. package/build/workspace/TkWindowWidget.js.map +1 -0
  171. package/build/workspace/WidgetFactory.d.ts +6 -0
  172. package/build/workspace/WidgetFactory.js +21 -0
  173. package/build/workspace/WidgetFactory.js.map +1 -0
  174. package/build/workspace/button.types.d.ts +15 -0
  175. package/build/workspace/button.types.js +6 -0
  176. package/build/workspace/button.types.js.map +1 -0
  177. package/build/workspace/duration.utility.d.ts +4 -0
  178. package/build/workspace/duration.utility.js +26 -0
  179. package/build/workspace/duration.utility.js.map +1 -0
  180. package/build/workspace/factory.types.d.ts +89 -0
  181. package/build/workspace/factory.types.js +37 -0
  182. package/build/workspace/factory.types.js.map +1 -0
  183. package/build/workspace/input.types.d.ts +18 -0
  184. package/build/workspace/input.types.js +7 -0
  185. package/build/workspace/input.types.js.map +1 -0
  186. package/build/workspace/keySelectChoices.d.ts +517 -0
  187. package/build/workspace/keySelectChoices.js +2 -0
  188. package/build/workspace/keySelectChoices.js.map +1 -0
  189. package/build/workspace/layout.types.d.ts +33 -0
  190. package/build/workspace/layout.types.js +2 -0
  191. package/build/workspace/layout.types.js.map +1 -0
  192. package/build/workspace/menuBar.types.d.ts +19 -0
  193. package/build/workspace/menuBar.types.js +6 -0
  194. package/build/workspace/menuBar.types.js.map +1 -0
  195. package/build/workspace/popup.types.d.ts +13 -0
  196. package/build/workspace/popup.types.js +6 -0
  197. package/build/workspace/popup.types.js.map +1 -0
  198. package/build/workspace/progressBar.types.d.ts +10 -0
  199. package/build/workspace/progressBar.types.js +2 -0
  200. package/build/workspace/progressBar.types.js.map +1 -0
  201. package/build/workspace/table.types.d.ts +6 -0
  202. package/build/workspace/table.types.js +2 -0
  203. package/build/workspace/table.types.js.map +1 -0
  204. package/build/workspace/termKit.utility.d.ts +12 -0
  205. package/build/workspace/termKit.utility.js +128 -0
  206. package/build/workspace/termKit.utility.js.map +1 -0
  207. package/build/workspace/test.types.d.ts +24 -0
  208. package/build/workspace/test.types.js +2 -0
  209. package/build/workspace/test.types.js.map +1 -0
  210. package/build/workspace/testRunner.cli.d.ts +1 -0
  211. package/build/workspace/testRunner.cli.js +149 -0
  212. package/build/workspace/testRunner.cli.js.map +1 -0
  213. package/build/workspace/text.types.d.ts +20 -0
  214. package/build/workspace/text.types.js +7 -0
  215. package/build/workspace/text.types.js.map +1 -0
  216. package/build/workspace/widget.utilities.d.ts +5 -0
  217. package/build/workspace/widget.utilities.js +20 -0
  218. package/build/workspace/widget.utilities.js.map +1 -0
  219. package/build/workspace/widgets.types.d.ts +66 -0
  220. package/build/workspace/widgets.types.js +2 -0
  221. package/build/workspace/widgets.types.js.map +1 -0
  222. package/build/workspace/window.types.d.ts +18 -0
  223. package/build/workspace/window.types.js +9 -0
  224. package/build/workspace/window.types.js.map +1 -0
  225. package/eslint.config.js +3 -0
  226. package/package.json +31 -37
  227. package/prettier.config.js +3 -0
  228. package/src/.spruce/settings.json +3 -10
  229. package/src/__tests__/MockFetch.ts +100 -0
  230. package/src/__tests__/behavioral/AbstractModuleTest.test.ts +15 -0
  231. package/src/__tests__/behavioral/utilities/AllHooksCalledEvenIfNotDefined.test.ts +31 -0
  232. package/src/__tests__/behavioral/utilities/Assert.test.ts +826 -0
  233. package/src/__tests__/behavioral/utilities/InstanceParentTestCanAccessParentMethods.test.ts +14 -0
  234. package/src/__tests__/behavioral/utilities/MockFetch.test.ts +240 -0
  235. package/src/__tests__/behavioral/utilities/StackCleaner.test.ts +46 -0
  236. package/src/__tests__/behavioral/utilities/StaticParentTestCanAccessParentMethods.test.ts +34 -0
  237. package/src/__tests__/behavioral/utilities/StaticTestInheritsAbstractSpruceTestProperly.test.ts +11 -0
  238. package/src/__tests__/behavioral/utilities/Stringify.test.ts +169 -0
  239. package/src/__tests__/behavioral/utilities/TestDecoratorResolver.test.ts +51 -0
  240. package/src/__tests__/behavioral/utilities/TestOnBasic.test.ts +62 -0
  241. package/src/__tests__/behavioral/utilities/TestOnInstance.test.ts +439 -0
  242. package/src/__tests__/behavioral/utilities/TestOnInstanceExtendsTest.test.ts +237 -0
  243. package/src/__tests__/behavioral/utilities/TestOnInstanceExtendsTestWithHooks.test.ts +85 -0
  244. package/src/__tests__/behavioral/utilities/TestOnInstanceWithParentBeforeAll.test.ts +14 -0
  245. package/src/__tests__/behavioral/utilities/TestOnInstanceWithTwoLevelsOfInheritence.test.ts +16 -0
  246. package/src/__tests__/behavioral/utilities/TestResolver.test.ts +48 -0
  247. package/src/__tests__/behavioral/utilities/TestResolverOnStatic.test.ts +12 -0
  248. package/src/__tests__/behavioral/workspace/JestJsonParser.test.ts +357 -0
  249. package/src/__tests__/behavioral/workspace/TestReporter.test.ts +257 -0
  250. package/src/__tests__/behavioral/workspace/TestRunner.test.ts +87 -0
  251. package/src/__tests__/behavioral/workspace/Widgets.test.ts +90 -0
  252. package/src/__tests__/mock-terminal-kit.ts +115 -0
  253. package/src/__tests__/support/AbstractForInstanceTest.ts +12 -0
  254. package/src/__tests__/support/AbstractLevelOneTest.ts +3 -0
  255. package/src/__tests__/support/AbstractLevelTwoTest.ts +16 -0
  256. package/src/__tests__/support/AbstractStaticTest.ts +16 -0
  257. package/src/__tests__/support/AbstractTestOnInstanceTest.ts +30 -0
  258. package/src/__tests__/support/AbstractTestOnInstanceWithHooks.ts +138 -0
  259. package/src/__tests__/support/jest.setup.ts +2 -0
  260. package/src/__tests__/support/onTestFileResult.ts +1008 -0
  261. package/src/impl/AbstractModuleTest.ts +59 -10
  262. package/src/index.ts +4 -4
  263. package/src/utilities/AssertionError.ts +14 -0
  264. package/src/utilities/StackCleaner.ts +14 -0
  265. package/src/utilities/TestDecoratorResolver.ts +118 -0
  266. package/src/utilities/assert.ts +583 -0
  267. package/src/utilities/assert.utility.ts +295 -0
  268. package/src/utilities/decorators.ts +167 -0
  269. package/src/workspace/CommandService.ts +256 -0
  270. package/src/workspace/JestJsonParser.ts +255 -0
  271. package/src/workspace/TKButtonWidget.ts +54 -0
  272. package/src/workspace/TestLogItemGenerator.ts +184 -0
  273. package/src/workspace/TestReporter.ts +865 -0
  274. package/src/workspace/TestRunner.ts +128 -0
  275. package/src/workspace/TkBaseWidget.ts +249 -0
  276. package/src/workspace/TkInputWidget.ts +83 -0
  277. package/src/workspace/TkLayoutCellWidget.ts +46 -0
  278. package/src/workspace/TkLayoutWidget.ts +181 -0
  279. package/src/workspace/TkMenuBarWidget.ts +95 -0
  280. package/src/workspace/TkPopupWidget.ts +47 -0
  281. package/src/workspace/TkProgressBarWidget.ts +54 -0
  282. package/src/workspace/TkTextWidget.ts +158 -0
  283. package/src/workspace/TkWindowWidget.ts +122 -0
  284. package/src/workspace/WidgetFactory.ts +33 -0
  285. package/src/workspace/button.types.ts +19 -0
  286. package/src/workspace/duration.utility.ts +34 -0
  287. package/src/workspace/factory.types.ts +101 -0
  288. package/src/workspace/input.types.ts +22 -0
  289. package/src/workspace/keySelectChoices.ts +134 -0
  290. package/src/workspace/layout.types.ts +40 -0
  291. package/src/workspace/menuBar.types.ts +24 -0
  292. package/src/workspace/popup.types.ts +17 -0
  293. package/src/workspace/progressBar.types.ts +13 -0
  294. package/src/workspace/table.types.ts +9 -0
  295. package/src/workspace/termKit.utility.ts +130 -0
  296. package/src/workspace/terminal-kit.d.ts +28 -0
  297. package/src/workspace/test.types.ts +34 -0
  298. package/src/workspace/testRunner.cli.ts +159 -0
  299. package/src/workspace/text.types.ts +26 -0
  300. package/src/workspace/widget.utilities.ts +35 -0
  301. package/src/workspace/widgets.types.ts +102 -0
  302. package/src/workspace/window.types.ts +22 -0
  303. package/tsconfig.json +23 -27
  304. package/build/__tests__/AbstractPackageTest.d.ts +0 -4
  305. package/build/__tests__/AbstractPackageTest.js +0 -7
  306. package/build/__tests__/AbstractPackageTest.js.map +0 -1
  307. package/build/__tests__/functions/assertFunction.test.d.ts +0 -5
  308. package/build/__tests__/functions/assertFunction.test.js +0 -23
  309. package/build/__tests__/functions/assertFunction.test.js.map +0 -1
  310. package/build/__tests__/functions/testFunction.test.d.ts +0 -5
  311. package/build/__tests__/functions/testFunction.test.js +0 -23
  312. package/build/__tests__/functions/testFunction.test.js.map +0 -1
  313. package/build/__tests__/impl/AbstractModuleTest.test.js.map +0 -1
  314. package/build/functions/assert.d.ts +0 -3
  315. package/build/functions/assert.js +0 -4
  316. package/build/functions/assert.js.map +0 -1
  317. package/build/functions/test.d.ts +0 -3
  318. package/build/functions/test.js +0 -4
  319. package/build/functions/test.js.map +0 -1
  320. package/eslint.config.mjs +0 -3
  321. package/src/__tests__/AbstractPackageTest.ts +0 -7
  322. package/src/__tests__/functions/assertFunction.test.ts +0 -22
  323. package/src/__tests__/functions/testFunction.test.ts +0 -22
  324. package/src/__tests__/impl/AbstractModuleTest.test.ts +0 -34
  325. package/src/functions/assert.ts +0 -4
  326. package/src/functions/test.ts +0 -4
@@ -0,0 +1,255 @@
1
+ import {
2
+ AssertionResult,
3
+ END_DIVIDER,
4
+ START_DIVIDER,
5
+ retrocycle,
6
+ } from '@sprucelabs/jest-json-reporter'
7
+ import escapeRegExp from 'lodash/escapeRegExp.js'
8
+ import { SpruceTestFile, TestResultStatus, TestResults } from './test.types.js'
9
+
10
+ interface AggregatedResult {
11
+ numTotalTestSuites: number
12
+ numFailedTestSuites: number
13
+ numPassedTestSuites: number
14
+ numFailedTests: number
15
+ numPassedTests: number
16
+ numTotalTests: number
17
+ numPendingTests: number
18
+ numTodoTests: number
19
+ testResults: TestResult[]
20
+ }
21
+
22
+ interface TestResult {
23
+ testFilePath: string
24
+ failureMessage?: string | null
25
+ numFailingTests: number
26
+ testResults: AssertionResult[]
27
+ }
28
+
29
+ interface TestInfo {
30
+ path: string
31
+ }
32
+
33
+ type JsonParserResult =
34
+ | {
35
+ status: 'onRunStart'
36
+ results: AggregatedResult
37
+ }
38
+ | {
39
+ status: 'onTestCaseResult'
40
+ test: TestInfo
41
+ testCaseResult: AssertionResult
42
+ }
43
+ | {
44
+ status: 'onTestFileStart'
45
+ test: TestInfo
46
+ }
47
+ | {
48
+ status: 'onTestFileResult'
49
+ test: TestInfo
50
+ testResult: TestResult
51
+ aggregatedResult: AggregatedResult
52
+ }
53
+
54
+ export default class JestJsonParser {
55
+ private testResults: TestResults = { totalTestFiles: 0 }
56
+ private buffer = ''
57
+
58
+ public write(data: string) {
59
+ let dataToProcess = this.buffer + data
60
+ let endDividerStartIdx = -1
61
+
62
+ do {
63
+ endDividerStartIdx = dataToProcess.search(escapeRegExp(END_DIVIDER))
64
+ if (endDividerStartIdx > -1) {
65
+ let startDividerIdx = Math.max(
66
+ 0,
67
+ dataToProcess.search(escapeRegExp(START_DIVIDER))
68
+ )
69
+ const endDividerEndIdx = endDividerStartIdx + END_DIVIDER.length
70
+ if (startDividerIdx > endDividerStartIdx) {
71
+ startDividerIdx = -1
72
+ }
73
+ const firstSegment = dataToProcess.substr(
74
+ startDividerIdx,
75
+ endDividerEndIdx - startDividerIdx
76
+ )
77
+ const cleanedSegment = firstSegment
78
+ .replace(START_DIVIDER, '')
79
+ .replace(END_DIVIDER, '')
80
+ .trim()
81
+
82
+ const result = retrocycle(
83
+ JSON.parse(cleanedSegment)
84
+ ) as JsonParserResult
85
+
86
+ this.ingestJestResult(result)
87
+
88
+ dataToProcess = dataToProcess.substr(endDividerEndIdx)
89
+ }
90
+ } while (endDividerStartIdx > -1)
91
+
92
+ this.buffer = dataToProcess
93
+ }
94
+
95
+ private ingestJestResult(result: JsonParserResult) {
96
+ const testFiles = this.testResults.testFiles ?? []
97
+ switch (result.status) {
98
+ case 'onRunStart':
99
+ this.testResults = {
100
+ totalTestFiles: result.results.numTotalTestSuites,
101
+ }
102
+ break
103
+
104
+ case 'onTestCaseResult': {
105
+ const relativePath = this.mapAbsoluteJsToRelativeTsPath(
106
+ result.test.path
107
+ )
108
+ const idx = testFiles.findIndex(
109
+ (file) => file.path === relativePath
110
+ )
111
+ const test = this.testCaseResultToTest(result.testCaseResult)
112
+
113
+ if (idx === -1) {
114
+ break
115
+ }
116
+ if (!testFiles[idx].tests) {
117
+ testFiles[idx].tests = []
118
+ }
119
+ testFiles[idx].tests?.push(test)
120
+ break
121
+ }
122
+ case 'onTestFileStart':
123
+ testFiles.push({
124
+ path: this.pullPathFromTestResponse(result),
125
+ status: this.pullTestFileStatusFromTestResponse(result),
126
+ })
127
+ break
128
+
129
+ case 'onTestFileResult': {
130
+ this.testResults.totalTestFilesComplete =
131
+ this.pullTestFilesCompleteFromAggregatedResults(
132
+ result.aggregatedResult
133
+ )
134
+ this.testResults.totalTestFiles =
135
+ result.aggregatedResult.numTotalTestSuites
136
+ this.testResults.totalFailed =
137
+ result.aggregatedResult.numFailedTests
138
+ this.testResults.totalPassed =
139
+ result.aggregatedResult.numPassedTests
140
+ this.testResults.totalTests =
141
+ result.aggregatedResult.numTotalTests
142
+ this.testResults.totalSkipped =
143
+ result.aggregatedResult.numPendingTests
144
+ this.testResults.totalTodo =
145
+ result.aggregatedResult.numTodoTests
146
+
147
+ for (const testResult of result.aggregatedResult.testResults) {
148
+ const relativePath = this.mapAbsoluteJsToRelativeTsPath(
149
+ testResult.testFilePath
150
+ )
151
+ const idx = testFiles.findIndex(
152
+ (file) => file.path === relativePath
153
+ )
154
+ const file = {
155
+ ...(testFiles[idx] ?? {}),
156
+ path: relativePath,
157
+ status: this.pullTestFileResultStatus(testResult),
158
+ tests: this.pullTestsFromTestFileResult(testResult),
159
+ }
160
+
161
+ if (testResult.failureMessage) {
162
+ file.errorMessage = testResult.failureMessage
163
+ }
164
+
165
+ if (idx === -1) {
166
+ testFiles.push(file)
167
+ } else {
168
+ testFiles[idx] = file
169
+ }
170
+ }
171
+ break
172
+ }
173
+ }
174
+
175
+ if (testFiles.length > 0) {
176
+ this.testResults.testFiles = testFiles
177
+ }
178
+ }
179
+
180
+ private pullTestFilesCompleteFromAggregatedResults(
181
+ aggregatedResult: AggregatedResult
182
+ ) {
183
+ const total =
184
+ aggregatedResult.numFailedTestSuites +
185
+ aggregatedResult.numPassedTestSuites
186
+
187
+ return total
188
+ }
189
+
190
+ private pullPathFromTestResponse(result: JsonParserResult) {
191
+ let path = ''
192
+
193
+ switch (result.status) {
194
+ case 'onTestFileResult':
195
+ case 'onTestFileStart':
196
+ path = result.test.path
197
+ break
198
+ }
199
+
200
+ const tsFile = this.mapAbsoluteJsToRelativeTsPath(path)
201
+ return tsFile
202
+ }
203
+
204
+ private mapAbsoluteJsToRelativeTsPath(path: string) {
205
+ const partialPath = path.split('__tests__').pop()
206
+ if (!partialPath) {
207
+ throw new Error('INVALID TEST FILE')
208
+ }
209
+ const tsFile = partialPath.substr(1, partialPath.length - 3) + 'ts'
210
+ return tsFile
211
+ }
212
+
213
+ private pullTestFileStatusFromTestResponse(
214
+ result: JsonParserResult
215
+ ): SpruceTestFile['status'] {
216
+ switch (result.status) {
217
+ case 'onTestFileResult':
218
+ return this.pullTestFileResultStatus(result.testResult)
219
+ default:
220
+ return 'running'
221
+ }
222
+ }
223
+
224
+ private pullTestFileResultStatus(testResult: TestResult): TestResultStatus {
225
+ return testResult.failureMessage || testResult.numFailingTests > 0
226
+ ? 'failed'
227
+ : 'passed'
228
+ }
229
+
230
+ private pullTestsFromTestFileResult(
231
+ testResult: TestResult
232
+ ): SpruceTestFile['tests'] {
233
+ return testResult.testResults.map((test: AssertionResult) =>
234
+ this.testCaseResultToTest(test)
235
+ )
236
+ }
237
+
238
+ private testCaseResultToTest(test: AssertionResult): {
239
+ name: string
240
+ status: AssertionResult['status']
241
+ errorMessages: string[]
242
+ duration: number
243
+ } {
244
+ return {
245
+ name: test.title,
246
+ status: test.status,
247
+ errorMessages: test.failureMessages,
248
+ duration: test.duration ?? 0,
249
+ }
250
+ }
251
+
252
+ public getResults(): TestResults {
253
+ return this.testResults
254
+ }
255
+ }
@@ -0,0 +1,54 @@
1
+ import terminal_kit from 'terminal-kit'
2
+ import { ButtonWidget, ButtonWidgetOptions } from './button.types.js'
3
+ import termKitUtil from './termKit.utility.js'
4
+ import TkBaseWidget, { TkWidgetOptions } from './TkBaseWidget.js'
5
+ const termKit = terminal_kit as any
6
+
7
+ export default class TKButtonWidget
8
+ extends TkBaseWidget
9
+ implements ButtonWidget
10
+ {
11
+ private button: any
12
+
13
+ public readonly type = 'button'
14
+
15
+ public constructor(
16
+ options: TkWidgetOptions & ButtonWidgetOptions & { termKitElement: any }
17
+ ) {
18
+ super({
19
+ ...options,
20
+ })
21
+
22
+ const { parent, text, ...rest } = options
23
+
24
+ const frame = termKitUtil.buildFrame(options, parent)
25
+
26
+ this.button = new termKit.Button({
27
+ parent: parent ? parent.getTermKitElement() : undefined,
28
+ content: text,
29
+ ...rest,
30
+ ...frame,
31
+ })
32
+
33
+ this.button.on('submit', this.handleClick.bind(this))
34
+ this.button.__widget = this
35
+
36
+ this.calculateSizeLockDeltas()
37
+ }
38
+
39
+ private handleClick() {
40
+ void (this as ButtonWidget).emit('click')
41
+ }
42
+
43
+ public getText(): string {
44
+ throw new Error('Method not implemented.')
45
+ }
46
+
47
+ public setText(text: string): void {
48
+ this.button.setContent(text)
49
+ }
50
+
51
+ public getTermKitElement() {
52
+ return this.button
53
+ }
54
+ }
@@ -0,0 +1,184 @@
1
+ import chalk from 'chalk'
2
+ import StackCleaner from '../utilities/StackCleaner.js'
3
+ import durationUtil from './duration.utility.js'
4
+ import { SpruceTestFile, TestFileTest, TestRunnerStatus } from './test.types.js'
5
+
6
+ export default class TestLogItemGenerator {
7
+ private startTimes: Record<string, number> = {}
8
+ private testRunnerStatus!: TestRunnerStatus
9
+
10
+ public generateLogItemForFile(
11
+ file: SpruceTestFile,
12
+ status: TestRunnerStatus
13
+ ): string {
14
+ this.testRunnerStatus = status
15
+
16
+ let logContent = ''
17
+ const duration = this.calculateDurationInMsForFile(file)
18
+
19
+ logContent += `${this.generateStatusBlock(file.status)} ${file.path}${
20
+ duration ? ` ${this.generateDuration(file.status, duration)}` : ''
21
+ }\n`
22
+
23
+ if (file.tests) {
24
+ file.tests.forEach((test) => {
25
+ const bullet = this.bulletBasedOnStatus(test.status)
26
+ logContent += ` ${bullet} ^-${
27
+ test.name
28
+ }^ ${this.generateDuration(test.status, test.duration)}\n`
29
+ })
30
+ }
31
+
32
+ if (file.status === 'running') {
33
+ const pendingKey = `${file.path}-pending-${file.tests?.length ?? 0}`
34
+ logContent += ` ^-${'Running next test... ⚡️⚡️⚡️'}^ ${this.generateDuration(
35
+ 'running',
36
+ this.calculateDurationInMs(pendingKey)
37
+ )}\n`
38
+ }
39
+
40
+ return logContent
41
+ }
42
+
43
+ private generateDuration(status: any, duration: number) {
44
+ if (duration === 0) {
45
+ return ''
46
+ }
47
+ const durationColor = this.colorBasedOnStatus(status)
48
+ return `^${durationColor}(${durationUtil.msToFriendly(duration)})^`
49
+ }
50
+
51
+ private bulletBasedOnStatus(status: TestFileTest['status'] | 'running') {
52
+ let bullet = 'y'
53
+
54
+ switch (status) {
55
+ case 'running':
56
+ bullet = '^g(running)^'
57
+ break
58
+ case 'passed':
59
+ bullet = '^g√^'
60
+ break
61
+ case 'failed':
62
+ bullet = '^rx^'
63
+ break
64
+ case 'pending':
65
+ case 'skipped':
66
+ bullet = '^y(skipped)^'
67
+ break
68
+ case 'todo':
69
+ bullet = '^y(todo)^'
70
+ break
71
+ default:
72
+ bullet = '??'
73
+ break
74
+ }
75
+
76
+ return bullet
77
+ }
78
+
79
+ private calculateDurationInMsForFile(file: SpruceTestFile): number {
80
+ if (file.status !== 'running' && file.tests) {
81
+ return file.tests.reduce((time, test) => {
82
+ time += test.duration
83
+ return time
84
+ }, 0)
85
+ }
86
+
87
+ const key = file.path
88
+ return this.calculateDurationInMs(key)
89
+ }
90
+
91
+ private calculateDurationInMs(key: string) {
92
+ if (!this.startTimes[key]) {
93
+ this.startTimes[key] = new Date().getTime()
94
+ }
95
+
96
+ const delta = new Date().getTime() - this.startTimes[key]
97
+ return delta
98
+ }
99
+
100
+ public generateErrorLogItemForFile(file: SpruceTestFile): string {
101
+ let errorContent = ''
102
+
103
+ file.tests?.forEach((test) => {
104
+ test.errorMessages?.forEach((message) => {
105
+ const cleaned = StackCleaner.clean(message ?? '')
106
+ errorContent += ` ${chalk.red(file.path)}\n`
107
+ errorContent += ` - ${chalk.red(test.name)}\n\n`
108
+ errorContent +=
109
+ cleaned.replace(/\n+ {4}at/i, '\n\n\n at') + '\n\n\n'
110
+ })
111
+ })
112
+
113
+ if (!errorContent && file.errorMessage) {
114
+ errorContent += `${chalk.red(file.path)}\n`
115
+ errorContent += file.errorMessage + '\n\n\n'
116
+ }
117
+
118
+ return errorContent
119
+ }
120
+
121
+ public resetStartTimes() {
122
+ this.startTimes = {}
123
+ }
124
+
125
+ private generateStatusBlock(status: SpruceTestFile['status']) {
126
+ const bgColor = this.colorBasedOnStatus(status)
127
+
128
+ let statusLabel = status as string
129
+ let color = 'k'
130
+ let padding = 10
131
+ switch (status) {
132
+ case 'passed':
133
+ padding = 11
134
+ color = 'w'
135
+ break
136
+ case 'failed':
137
+ padding = 11
138
+ color = 'w'
139
+ break
140
+ }
141
+
142
+ if (status === 'running' && this.testRunnerStatus === 'stopped') {
143
+ statusLabel = 'stopped'
144
+ color = 'w'
145
+ }
146
+
147
+ return `^b^#^${bgColor}^${color}^+${this.centerStringWithSpaces(
148
+ statusLabel,
149
+ padding
150
+ )}^`
151
+ }
152
+
153
+ private colorBasedOnStatus(status: SpruceTestFile['status']) {
154
+ let color = 'y'
155
+
156
+ switch (status) {
157
+ case 'passed':
158
+ color = 'g'
159
+ break
160
+ case 'failed':
161
+ color = 'r'
162
+ break
163
+ }
164
+
165
+ if (status === 'running' && this.testRunnerStatus === 'stopped') {
166
+ color = 'b'
167
+ }
168
+
169
+ return color
170
+ }
171
+
172
+ private centerStringWithSpaces(text: string, numberOfSpaces: number) {
173
+ text = text.trim()
174
+ let l = text.length
175
+ let w2 = Math.floor(numberOfSpaces / 2)
176
+ let l2 = Math.floor(l / 2)
177
+ let s = new Array(w2 - l2 + 1).join(' ')
178
+ text = s + text + s
179
+ if (text.length < numberOfSpaces) {
180
+ text += new Array(numberOfSpaces - text.length + 1).join(' ')
181
+ }
182
+ return text
183
+ }
184
+ }