@neurodevs/node-tdd 0.2.5 → 1.0.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 (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 +30 -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,583 @@
1
+ import chalk from 'chalk'
2
+ import deepEqual from 'deep-equal'
3
+ import { printDiffOrStringify } from 'jest-matcher-utils'
4
+ import { escapeRegExp, isObjectLike, cloneDeep, set } from 'lodash-es'
5
+ import { expectType } from 'ts-expect'
6
+ import diff from 'variable-diff'
7
+ import assertUtil from './assert.utility.js'
8
+ export * from './assert.utility.js'
9
+
10
+ const stringify = assertUtil.stringify.bind(assertUtil)
11
+
12
+ export type RecursivePartial<T> = {
13
+ [P in keyof T]?: T[P] extends (infer U)[]
14
+ ? RecursivePartial<U>[]
15
+ : T[P] extends object
16
+ ? RecursivePartial<T[P]>
17
+ : T[P]
18
+ }
19
+
20
+ type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N
21
+ type IsAny<T> = IfAny<T, true, never>
22
+
23
+ type TypeEqual<T, U> =
24
+ IsAny<T> extends never
25
+ ? Exclude<T, U> extends never
26
+ ? Exclude<U, T> extends never
27
+ ? true
28
+ : false
29
+ : false
30
+ : false
31
+
32
+ export function isExactType<T, E, Pass = TypeEqual<T, E>>(_: Pass) {}
33
+
34
+ export interface Assert {
35
+ isInstanceOf<T>(
36
+ test: T,
37
+ Test: new (...props: any[]) => T,
38
+ message?: string
39
+ ): void
40
+ isNumber(actual: any, message?: string): asserts actual is number
41
+ isType: typeof expectType
42
+ isExactType: typeof isExactType
43
+ isArray<T extends any[]>(actual: any, message?: string): asserts actual is T
44
+ areSameType<T>(actual: T, expected: T): asserts actual is T
45
+ isEqual<T>(actual: T, expected: T, message?: string): asserts actual is T
46
+ isNotEqual<T>(actual: T, expected: T, message?: string): asserts actual is T
47
+ isEqualDeep<T>(
48
+ actual: T,
49
+ expected: T,
50
+ message?: string,
51
+ shouldAppendDelta?: boolean
52
+ ): asserts actual is T
53
+ isNotEqualDeep<T>(actual: T, expected: T, message?: string): void
54
+ isAbove<T>(actual: T, floor: T, message?: string): void
55
+ isBelow<T>(actual: T, ceiling: T, message?: string): void
56
+ isUndefined<T>(actual: T, message?: string): void
57
+ isTruthy<T = any>(
58
+ value: T,
59
+ message?: string
60
+ ): asserts value is NonNullable<T>
61
+ isFalsy(value: any, message?: string): void
62
+ isTrue(
63
+ actual: boolean | undefined | null,
64
+ message?: string
65
+ ): asserts actual is true
66
+ isFalse(
67
+ actual: boolean | undefined | null,
68
+ message?: string
69
+ ): asserts actual is false
70
+ isObject<T>(actual: T, message?: string): void
71
+ isLength(
72
+ actual: any[] | undefined | null,
73
+ expected: number,
74
+ message?: string
75
+ ): void
76
+ isNull(actual: any, message?: string): void
77
+ doesNotInclude<T>(
78
+ haystack: T,
79
+ needle: RecursivePartial<T>,
80
+ message?: string
81
+ ): void
82
+
83
+ doesNotInclude(haystack: string, needle: string, message?: string): void
84
+ doesNotInclude(haystack: any, needle: string, message?: string): void
85
+ doesNotInclude(haystack: any, needle: any, message?: string): void
86
+
87
+ doesInclude<T>(
88
+ haystack: T,
89
+ needle: RecursivePartial<T>,
90
+ message?: string
91
+ ): void
92
+
93
+ doesInclude(haystack: string, needle: string, message?: string): void
94
+ doesInclude(haystack: any, needle: string, message?: string): void
95
+ doesInclude(haystack: any, needle: any, message?: string): void
96
+
97
+ isString(actual: any, message?: string): asserts actual is string
98
+
99
+ isFunction(actual: any, message?: string): asserts actual is Function
100
+ hasAllFunctions(obj: any, functionNames: string[]): void
101
+ doesThrow(
102
+ cb: () => any,
103
+ matcher?: string | RegExp | undefined,
104
+ msg?: string | undefined
105
+ ): Error
106
+ doesThrowAsync(
107
+ cb: () => any | Promise<any>,
108
+ matcher?: string | RegExp | undefined,
109
+ msg?: string | undefined
110
+ ): Promise<Error>
111
+ fail(message?: string): void
112
+ isBetween(
113
+ actual: any,
114
+ floor: number,
115
+ ceiling: number,
116
+ message?: string
117
+ ): asserts actual is number
118
+
119
+ isBetweenInclusive(
120
+ actual: any,
121
+ floor: number,
122
+ ceiling: number,
123
+ message?: string
124
+ ): asserts actual is number
125
+ }
126
+
127
+ const assert: Assert = {
128
+ areSameType() {},
129
+
130
+ isType: expectType,
131
+
132
+ isExactType,
133
+
134
+ isNumber(actual, message) {
135
+ if (typeof actual !== 'number') {
136
+ this.fail(
137
+ buildErrorMessage(
138
+ `${stringify(actual)} is not a number!`,
139
+ message
140
+ )
141
+ )
142
+ }
143
+ },
144
+
145
+ isEqual(actual, expected, message) {
146
+ if (actual !== expected) {
147
+ const diff = printDiffOrStringify(
148
+ expected,
149
+ actual,
150
+ 'Expected',
151
+ 'Actual',
152
+ false
153
+ )
154
+ this.fail(buildErrorMessage(`${diff}`, message))
155
+ }
156
+ },
157
+
158
+ isNotEqual(actual, expected, message) {
159
+ if (actual === expected) {
160
+ this.fail(
161
+ buildErrorMessage(
162
+ `${stringify(actual)}\n\n should not equal ${stringify(expected)}\n\n`,
163
+ message
164
+ )
165
+ )
166
+ }
167
+ },
168
+
169
+ isEqualDeep(actual, expected, message, shouldAppendDelta = true) {
170
+ if (!deepEqual(actual, expected, { strict: true })) {
171
+ let result = diff(actual, expected)
172
+ this.fail(
173
+ buildErrorMessage(
174
+ `${`Deep equal failed.\n\nActual would need the following changes to match expected:`}${shouldAppendDelta ? `\n\n${result.text}` : ``}`,
175
+ message
176
+ )
177
+ )
178
+ }
179
+ },
180
+
181
+ isNotEqualDeep(actual, expected, message) {
182
+ this.doesThrow(
183
+ () => this.isEqualDeep(actual, expected),
184
+ undefined,
185
+ buildErrorMessage(
186
+ `The objects you passed are deep equal! They should not be!`,
187
+ message
188
+ )
189
+ )
190
+ },
191
+
192
+ isAbove(actual, floor, message) {
193
+ if (typeof actual !== 'number') {
194
+ this.fail(
195
+ buildErrorMessage(
196
+ `${stringify(actual)} is not a number!`,
197
+ message
198
+ )
199
+ )
200
+ }
201
+ if (actual <= floor) {
202
+ this.fail(
203
+ buildErrorMessage(
204
+ `${stringify(actual)} is not above ${stringify(floor)}`,
205
+ message
206
+ )
207
+ )
208
+ }
209
+ },
210
+
211
+ isBelow(actual, ceiling, message) {
212
+ if (typeof actual !== 'number') {
213
+ this.fail(
214
+ buildErrorMessage(
215
+ `${stringify(actual)} is not a number!`,
216
+ message
217
+ )
218
+ )
219
+ }
220
+
221
+ if (actual >= ceiling) {
222
+ this.fail(
223
+ buildErrorMessage(
224
+ `${stringify(actual)} is not below ${stringify(ceiling)}`,
225
+ message
226
+ )
227
+ )
228
+ }
229
+ },
230
+
231
+ isUndefined(actual, message) {
232
+ if (typeof actual !== 'undefined') {
233
+ this.fail(
234
+ buildErrorMessage(
235
+ `${stringify(actual)} is not undefined`,
236
+ message
237
+ )
238
+ )
239
+ }
240
+ },
241
+
242
+ isTruthy(actual: any, message) {
243
+ if (
244
+ actual === false ||
245
+ actual === null ||
246
+ typeof actual === 'undefined' ||
247
+ actual === 0
248
+ ) {
249
+ this.fail(
250
+ buildErrorMessage(`${stringify(actual)} is not truthy`, message)
251
+ )
252
+ }
253
+ },
254
+
255
+ isFalsy(actual, message) {
256
+ if (actual) {
257
+ this.fail(
258
+ buildErrorMessage(`${stringify(actual)} is not falsy`, message)
259
+ )
260
+ }
261
+ },
262
+
263
+ isNull(actual: any, message?) {
264
+ if (actual !== null) {
265
+ this.fail(
266
+ buildErrorMessage(`${stringify(actual)} is not null`, message)
267
+ )
268
+ }
269
+ },
270
+
271
+ isString(actual, message) {
272
+ assertUtil.assertTypeof(actual, 'string', message)
273
+ },
274
+
275
+ isFunction(actual, message) {
276
+ assertUtil.assertTypeof(actual, 'function', message)
277
+ },
278
+
279
+ isTrue(actual, message) {
280
+ //@ts-ignore
281
+ this.isEqual(actual, true, message)
282
+ },
283
+
284
+ isFalse(actual, message) {
285
+ //@ts-ignore
286
+ this.isEqual(actual, false, message)
287
+ },
288
+
289
+ isObject(actual, message) {
290
+ if (!isObjectLike(actual)) {
291
+ throw this.fail(
292
+ buildErrorMessage(
293
+ `${stringify(actual)} is not an object`,
294
+ message
295
+ )
296
+ )
297
+ }
298
+ },
299
+
300
+ isArray(actual, message) {
301
+ if (!Array.isArray(actual)) {
302
+ throw this.fail(
303
+ buildErrorMessage(
304
+ `${stringify(actual)} is not an array`,
305
+ message
306
+ )
307
+ )
308
+ }
309
+ },
310
+
311
+ isLength(actual, expected, message) {
312
+ if (!actual) {
313
+ throw this.fail(
314
+ buildErrorMessage(
315
+ `Expected array of length ${expected}, but got ${stringify(actual)}`,
316
+ message
317
+ )
318
+ )
319
+ }
320
+
321
+ //@ts-ignore
322
+ this.isEqual(
323
+ actual.length,
324
+ expected,
325
+ buildErrorMessage(`Your array is not the expected length!`, message)
326
+ )
327
+ },
328
+
329
+ doesNotInclude(haystack: any, needle: any, message?: string) {
330
+ let doesInclude = false
331
+ try {
332
+ this.doesInclude(haystack, needle, message)
333
+ doesInclude = true
334
+ } catch {
335
+ doesInclude = false
336
+ }
337
+
338
+ if (doesInclude) {
339
+ this.fail(
340
+ buildErrorMessage(
341
+ `${stringify(haystack)} should not include ${stringify(
342
+ needle
343
+ )}, but it does`,
344
+ message
345
+ )
346
+ )
347
+ }
348
+ },
349
+
350
+ doesInclude(haystack: any, needle: any, message?: string) {
351
+ let msg = `Could not find \n\n${stringify(needle)}\n\n in \n\n${stringify(haystack)}\n\n`
352
+
353
+ const isNeedleString = typeof needle === 'string'
354
+ const isNeedleRegex = needle instanceof RegExp
355
+
356
+ if (
357
+ typeof haystack === 'string' &&
358
+ (isNeedleString || isNeedleRegex) &&
359
+ haystack.search(isNeedleString ? escapeRegExp(needle) : needle) > -1
360
+ ) {
361
+ return
362
+ }
363
+
364
+ const isHaystackObject = isObjectLike(haystack)
365
+ const { needleHasArrayNotation, path, expected } =
366
+ assertUtil.parseIncludeNeedle(needle)
367
+
368
+ if (Array.isArray(haystack)) {
369
+ let cleanedNeedle = needle
370
+
371
+ if (path && path.substr(0, 3) === '[].') {
372
+ cleanedNeedle = { [path.substr(3)]: expected }
373
+ }
374
+
375
+ const found = assertUtil.doHaystacksPassCheck(
376
+ haystack,
377
+ cleanedNeedle,
378
+ this.doesInclude.bind(this)
379
+ )
380
+
381
+ if (found) {
382
+ return
383
+ }
384
+ }
385
+
386
+ if (isHaystackObject && isObjectLike(needle)) {
387
+ try {
388
+ //@ts-ignore
389
+ this.isEqualDeep(haystack, needle, message)
390
+ return
391
+ } catch {}
392
+ }
393
+
394
+ if (
395
+ assertUtil.foundUsing3rdPartyIncludes(
396
+ haystack,
397
+ needle,
398
+ isHaystackObject
399
+ )
400
+ ) {
401
+ return
402
+ }
403
+
404
+ if (
405
+ !Array.isArray(haystack) &&
406
+ isHaystackObject &&
407
+ isObjectLike(needle) &&
408
+ Object.keys(needle).length === 1 &&
409
+ !needleHasArrayNotation &&
410
+ path
411
+ ) {
412
+ const actual = assertUtil.valueAtPath(haystack, path)
413
+
414
+ if (typeof actual === 'undefined') {
415
+ msg = `The path ${stringify(path)} was not found in ${stringify(
416
+ haystack
417
+ )}`
418
+ } else {
419
+ // msg = `Expected:\n\n${chalk.green(
420
+ // stringify(actual)
421
+ // )}\n\nbut found:\n\n${chalk.red(stringify(actual))}\n\nat key:\n\n${stringify(
422
+ // path
423
+ // )}\n\nin:\n\n${stringify(haystack)}`
424
+
425
+ msg = `Expected:\n\n${chalk.green(
426
+ stringify(needle[path])
427
+ )}\n\nbut found:\n\n${chalk.red(stringify(actual))}\n\nat key:\n\n${stringify(
428
+ path
429
+ )}`
430
+
431
+ let clonedHaystack = cloneDeep(haystack)
432
+ clonedHaystack = set(
433
+ clonedHaystack,
434
+ path,
435
+ `${actual} -> ${expected}`
436
+ )
437
+ msg += `\n\nHere is the change:\n\n${stringify(clonedHaystack)}`
438
+ }
439
+
440
+ if (
441
+ typeof expected === 'string' &&
442
+ typeof actual === 'string' &&
443
+ actual.search(expected) > -1
444
+ ) {
445
+ return
446
+ } else if (expected instanceof RegExp && expected.exec(actual)) {
447
+ return
448
+ } else {
449
+ //@ts-ignore
450
+ this.isEqualDeep(
451
+ expected,
452
+ actual,
453
+ buildErrorMessage(msg, message),
454
+ false
455
+ )
456
+ }
457
+
458
+ return
459
+ }
460
+
461
+ if (isHaystackObject && isObjectLike(needle) && path) {
462
+ const { actualBeforeArray, pathAfterFirstArray } =
463
+ assertUtil.splitPathBasedOnArrayNotation(path, haystack)
464
+
465
+ if (!Array.isArray(actualBeforeArray)) {
466
+ this.fail(buildErrorMessage(msg, message))
467
+ }
468
+
469
+ const found = assertUtil.doHaystacksPassCheck(
470
+ actualBeforeArray,
471
+ {
472
+ [pathAfterFirstArray]: expected,
473
+ },
474
+ this.doesInclude.bind(this)
475
+ )
476
+
477
+ if (found) {
478
+ return
479
+ }
480
+
481
+ msg = `Could not find match ${stringify(expected)} at ${stringify(
482
+ pathAfterFirstArray
483
+ )} in ${stringify(actualBeforeArray)}.`
484
+ }
485
+
486
+ this.fail(buildErrorMessage(msg, message))
487
+ },
488
+
489
+ hasAllFunctions(obj, functionNames, message?: string) {
490
+ functionNames.forEach((name) => {
491
+ if (typeof obj[name] !== 'function') {
492
+ this.fail(
493
+ buildErrorMessage(
494
+ `A function named "${name}" does not exist on ${stringify(obj)}`,
495
+ message
496
+ )
497
+ )
498
+ }
499
+ })
500
+ },
501
+
502
+ doesThrow(cb, matcher, msg) {
503
+ try {
504
+ cb()
505
+ } catch (err: any) {
506
+ assertUtil.assertErrorIncludes(matcher, err, msg)
507
+ return err
508
+ }
509
+
510
+ this.fail(
511
+ buildErrorMessage(
512
+ 'Expected a thrown error, but never got one!',
513
+ msg
514
+ )
515
+ )
516
+ },
517
+
518
+ async doesThrowAsync(cb, matcher, msg) {
519
+ try {
520
+ await cb()
521
+ } catch (err: any) {
522
+ assertUtil.assertErrorIncludes(matcher, err, msg)
523
+
524
+ return err
525
+ }
526
+
527
+ this.fail(
528
+ buildErrorMessage(
529
+ 'Expected a thrown error, but never got one!',
530
+ msg
531
+ )
532
+ )
533
+ },
534
+
535
+ fail: assertUtil.fail,
536
+ isInstanceOf<T>(
537
+ actual: T,
538
+ Class: new (...props: any[]) => T,
539
+ message?: string
540
+ ): void {
541
+ assert.isTrue(
542
+ actual instanceof Class,
543
+ buildErrorMessage(
544
+ `${assertUtil.stringify(actual)} is not an instance of:\n\n${Class}`,
545
+ message
546
+ )
547
+ )
548
+ },
549
+
550
+ isBetween(actual, floor, ceiling, message) {
551
+ assert.isBelow(actual, ceiling, message)
552
+ assert.isAbove(actual, floor, message)
553
+ },
554
+
555
+ isBetweenInclusive(actual, floor, ceiling, message) {
556
+ //@ts-ignore
557
+ this.isNumber(actual, message)
558
+
559
+ if (actual >= floor && actual <= ceiling) {
560
+ return
561
+ }
562
+
563
+ assert.fail(
564
+ buildErrorMessage(
565
+ `${actual} is not between ${floor} and ${ceiling} (inclusive)`,
566
+ message
567
+ )
568
+ )
569
+ },
570
+ }
571
+
572
+ export default assert
573
+
574
+ function buildErrorMessage(
575
+ defaultMessage: string,
576
+ customMessage: string | undefined
577
+ ) {
578
+ return (
579
+ (customMessage
580
+ ? `${customMessage}\n\n${defaultMessage}`
581
+ : defaultMessage) + '\n\n'
582
+ )
583
+ }