xtrm-tools 2.2.0 → 2.4.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 (286) hide show
  1. package/README.md +127 -104
  2. package/cli/dist/index.cjs +1078 -970
  3. package/cli/dist/index.cjs.map +1 -1
  4. package/cli/package.json +1 -1
  5. package/config/pi/extensions/beads.ts +33 -5
  6. package/config/pi/extensions/service-skills.ts +17 -9
  7. package/config/pi/install-schema.json +2 -1
  8. package/hooks/beads-gate-core.mjs +6 -4
  9. package/hooks/beads-memory-gate.mjs +12 -5
  10. package/hooks/hooks.json +126 -0
  11. package/package.json +3 -1
  12. package/skills/test-planning/SKILL.md +208 -0
  13. package/skills/test-planning/evals/evals.json +23 -0
  14. package/skills/using-xtrm/SKILL.md +5 -27
  15. package/project-skills/tdd-guard/.claude/hooks/tdd-guard-pretool-bridge.cjs +0 -103
  16. package/project-skills/tdd-guard/.claude/settings.json +0 -38
  17. package/project-skills/tdd-guard/.claude/skills/using-tdd-guard/SKILL.md +0 -79
  18. package/project-skills/tdd-guard/CLAUDE.md +0 -98
  19. package/project-skills/tdd-guard/CONTRIBUTING.md +0 -38
  20. package/project-skills/tdd-guard/DEVELOPMENT.md +0 -127
  21. package/project-skills/tdd-guard/LICENSE +0 -21
  22. package/project-skills/tdd-guard/README.md +0 -398
  23. package/project-skills/tdd-guard/docs/adr/001-claude-session-subdirectory.md +0 -52
  24. package/project-skills/tdd-guard/docs/adr/002-secure-claude-binary-path.md +0 -56
  25. package/project-skills/tdd-guard/docs/adr/003-remove-configurable-data-directory.md +0 -56
  26. package/project-skills/tdd-guard/docs/adr/004-monorepo-architecture.md +0 -64
  27. package/project-skills/tdd-guard/docs/adr/005-claude-project-dir-support.md +0 -55
  28. package/project-skills/tdd-guard/docs/adr/006-phpunit-separate-repository.md +0 -93
  29. package/project-skills/tdd-guard/docs/adr/007-golangci-lint-path-support.md +0 -83
  30. package/project-skills/tdd-guard/docs/adr/008-storybook-reporter-design.md +0 -182
  31. package/project-skills/tdd-guard/docs/assets/tdd-guard-demo-screenshot.gif +0 -0
  32. package/project-skills/tdd-guard/docs/config-migration.md +0 -143
  33. package/project-skills/tdd-guard/docs/configuration.md +0 -137
  34. package/project-skills/tdd-guard/docs/custom-instructions.md +0 -43
  35. package/project-skills/tdd-guard/docs/enforcement.md +0 -46
  36. package/project-skills/tdd-guard/docs/ignore-patterns.md +0 -81
  37. package/project-skills/tdd-guard/docs/linting.md +0 -109
  38. package/project-skills/tdd-guard/docs/quick-commands.md +0 -52
  39. package/project-skills/tdd-guard/docs/session-management.md +0 -75
  40. package/project-skills/tdd-guard/docs/storybook-vitest-addon.md +0 -120
  41. package/project-skills/tdd-guard/docs/validation-model.md +0 -63
  42. package/project-skills/tdd-guard/eslint.config.mjs +0 -140
  43. package/project-skills/tdd-guard/package-lock.json +0 -16937
  44. package/project-skills/tdd-guard/package.json +0 -102
  45. package/project-skills/tdd-guard/reporters/go/README.md +0 -67
  46. package/project-skills/tdd-guard/reporters/go/cmd/tdd-guard-go/main.go +0 -127
  47. package/project-skills/tdd-guard/reporters/go/cmd/tdd-guard-go/main_test.go +0 -280
  48. package/project-skills/tdd-guard/reporters/go/go.mod +0 -3
  49. package/project-skills/tdd-guard/reporters/go/go.sum +0 -0
  50. package/project-skills/tdd-guard/reporters/go/internal/formatter/formatter.go +0 -126
  51. package/project-skills/tdd-guard/reporters/go/internal/formatter/formatter_test.go +0 -264
  52. package/project-skills/tdd-guard/reporters/go/internal/io/tee_reader.go +0 -26
  53. package/project-skills/tdd-guard/reporters/go/internal/io/tee_reader_test.go +0 -37
  54. package/project-skills/tdd-guard/reporters/go/internal/parser/mixed_reader.go +0 -94
  55. package/project-skills/tdd-guard/reporters/go/internal/parser/mixed_reader_test.go +0 -198
  56. package/project-skills/tdd-guard/reporters/go/internal/parser/parser.go +0 -245
  57. package/project-skills/tdd-guard/reporters/go/internal/parser/parser_test.go +0 -547
  58. package/project-skills/tdd-guard/reporters/go/internal/storage/storage.go +0 -35
  59. package/project-skills/tdd-guard/reporters/go/internal/storage/storage_test.go +0 -113
  60. package/project-skills/tdd-guard/reporters/go/internal/transformer/transformer.go +0 -103
  61. package/project-skills/tdd-guard/reporters/go/internal/transformer/transformer_test.go +0 -303
  62. package/project-skills/tdd-guard/reporters/jest/README.md +0 -102
  63. package/project-skills/tdd-guard/reporters/jest/package.json +0 -38
  64. package/project-skills/tdd-guard/reporters/jest/src/JestReporter.test-data.ts +0 -199
  65. package/project-skills/tdd-guard/reporters/jest/src/JestReporter.test.ts +0 -302
  66. package/project-skills/tdd-guard/reporters/jest/src/JestReporter.ts +0 -201
  67. package/project-skills/tdd-guard/reporters/jest/src/index.ts +0 -4
  68. package/project-skills/tdd-guard/reporters/jest/src/types.ts +0 -42
  69. package/project-skills/tdd-guard/reporters/jest/tsconfig.json +0 -11
  70. package/project-skills/tdd-guard/reporters/phpunit/.php-cs-fixer.php +0 -28
  71. package/project-skills/tdd-guard/reporters/phpunit/README.md +0 -97
  72. package/project-skills/tdd-guard/reporters/phpunit/SYNC_README.md +0 -29
  73. package/project-skills/tdd-guard/reporters/phpunit/composer.json +0 -55
  74. package/project-skills/tdd-guard/reporters/phpunit/phpunit.xml.dist +0 -19
  75. package/project-skills/tdd-guard/reporters/phpunit/psalm.xml +0 -44
  76. package/project-skills/tdd-guard/reporters/phpunit/src/Event/ErroredTestSubscriber.php +0 -28
  77. package/project-skills/tdd-guard/reporters/phpunit/src/Event/FailedTestSubscriber.php +0 -28
  78. package/project-skills/tdd-guard/reporters/phpunit/src/Event/IncompleteTestSubscriber.php +0 -28
  79. package/project-skills/tdd-guard/reporters/phpunit/src/Event/PassedTestSubscriber.php +0 -27
  80. package/project-skills/tdd-guard/reporters/phpunit/src/Event/SkippedTestSubscriber.php +0 -28
  81. package/project-skills/tdd-guard/reporters/phpunit/src/Event/TestRunnerFinishedSubscriber.php +0 -24
  82. package/project-skills/tdd-guard/reporters/phpunit/src/PathValidator.php +0 -88
  83. package/project-skills/tdd-guard/reporters/phpunit/src/Storage.php +0 -26
  84. package/project-skills/tdd-guard/reporters/phpunit/src/TddGuardExtension.php +0 -33
  85. package/project-skills/tdd-guard/reporters/phpunit/src/TddGuardListener.php +0 -158
  86. package/project-skills/tdd-guard/reporters/phpunit/src/TddGuardSubscriber.php +0 -35
  87. package/project-skills/tdd-guard/reporters/phpunit/src/TestResultCollector.php +0 -105
  88. package/project-skills/tdd-guard/reporters/phpunit/tests/PathValidatorTest.php +0 -74
  89. package/project-skills/tdd-guard/reporters/phpunit/tests/TddGuardExtensionFailedTest.php +0 -241
  90. package/project-skills/tdd-guard/reporters/phpunit/tests/TddGuardExtensionTest.php +0 -84
  91. package/project-skills/tdd-guard/reporters/phpunit/tests/TddGuardStorageLocationTest.php +0 -71
  92. package/project-skills/tdd-guard/reporters/pytest/README.md +0 -77
  93. package/project-skills/tdd-guard/reporters/pytest/pyproject.toml +0 -43
  94. package/project-skills/tdd-guard/reporters/pytest/pytest.ini.example +0 -7
  95. package/project-skills/tdd-guard/reporters/pytest/tdd_guard_pytest/__init__.py +0 -1
  96. package/project-skills/tdd-guard/reporters/pytest/tdd_guard_pytest/pytest_reporter.py +0 -134
  97. package/project-skills/tdd-guard/reporters/pytest/tests/__init__.py +0 -1
  98. package/project-skills/tdd-guard/reporters/pytest/tests/conftest.py +0 -3
  99. package/project-skills/tdd-guard/reporters/pytest/tests/helpers.py +0 -293
  100. package/project-skills/tdd-guard/reporters/pytest/tests/test_config_option.py +0 -38
  101. package/project-skills/tdd-guard/reporters/pytest/tests/test_path_validation.py +0 -59
  102. package/project-skills/tdd-guard/reporters/pytest/tests/test_plugin_config.py +0 -32
  103. package/project-skills/tdd-guard/reporters/pytest/tests/test_project_root.py +0 -296
  104. package/project-skills/tdd-guard/reporters/pytest/tests/test_pytest_reporter.py +0 -137
  105. package/project-skills/tdd-guard/reporters/rspec/Gemfile +0 -3
  106. package/project-skills/tdd-guard/reporters/rust/Cargo.lock +0 -458
  107. package/project-skills/tdd-guard/reporters/rust/Cargo.toml +0 -33
  108. package/project-skills/tdd-guard/reporters/rust/Makefile.example +0 -95
  109. package/project-skills/tdd-guard/reporters/rust/README.md +0 -88
  110. package/project-skills/tdd-guard/reporters/rust/src/error_parser.rs +0 -309
  111. package/project-skills/tdd-guard/reporters/rust/src/main.rs +0 -464
  112. package/project-skills/tdd-guard/reporters/rust/src/parser.rs +0 -225
  113. package/project-skills/tdd-guard/reporters/rust/src/transformer.rs +0 -409
  114. package/project-skills/tdd-guard/reporters/storybook/README.md +0 -108
  115. package/project-skills/tdd-guard/reporters/storybook/package-lock.json +0 -9482
  116. package/project-skills/tdd-guard/reporters/storybook/package.json +0 -43
  117. package/project-skills/tdd-guard/reporters/storybook/src/StorybookReporter.test-data.ts +0 -22
  118. package/project-skills/tdd-guard/reporters/storybook/src/StorybookReporter.test.ts +0 -190
  119. package/project-skills/tdd-guard/reporters/storybook/src/StorybookReporter.ts +0 -88
  120. package/project-skills/tdd-guard/reporters/storybook/src/index.ts +0 -12
  121. package/project-skills/tdd-guard/reporters/storybook/src/types.ts +0 -37
  122. package/project-skills/tdd-guard/reporters/storybook/tsconfig.json +0 -11
  123. package/project-skills/tdd-guard/reporters/test/artifacts/go/failing/go.mod +0 -3
  124. package/project-skills/tdd-guard/reporters/test/artifacts/go/failing/single_failing_test.go +0 -13
  125. package/project-skills/tdd-guard/reporters/test/artifacts/go/import/go.mod +0 -3
  126. package/project-skills/tdd-guard/reporters/test/artifacts/go/import/single_import_error_test.go +0 -17
  127. package/project-skills/tdd-guard/reporters/test/artifacts/go/passing/go.mod +0 -3
  128. package/project-skills/tdd-guard/reporters/test/artifacts/go/passing/single_passing_test.go +0 -13
  129. package/project-skills/tdd-guard/reporters/test/artifacts/jest/single-failing.test.js +0 -5
  130. package/project-skills/tdd-guard/reporters/test/artifacts/jest/single-import-error.test.js +0 -8
  131. package/project-skills/tdd-guard/reporters/test/artifacts/jest/single-passing.test.js +0 -5
  132. package/project-skills/tdd-guard/reporters/test/artifacts/phpunit/SingleFailingTest.php +0 -11
  133. package/project-skills/tdd-guard/reporters/test/artifacts/phpunit/SingleImportErrorTest.php +0 -14
  134. package/project-skills/tdd-guard/reporters/test/artifacts/phpunit/SinglePassingTest.php +0 -11
  135. package/project-skills/tdd-guard/reporters/test/artifacts/pytest/test_single_failing.py +0 -3
  136. package/project-skills/tdd-guard/reporters/test/artifacts/pytest/test_single_import_error.py +0 -6
  137. package/project-skills/tdd-guard/reporters/test/artifacts/pytest/test_single_passing.py +0 -3
  138. package/project-skills/tdd-guard/reporters/test/artifacts/rust/failing/Cargo.lock +0 -7
  139. package/project-skills/tdd-guard/reporters/test/artifacts/rust/failing/Cargo.toml +0 -4
  140. package/project-skills/tdd-guard/reporters/test/artifacts/rust/failing/src/lib.rs +0 -14
  141. package/project-skills/tdd-guard/reporters/test/artifacts/rust/import/Cargo.lock +0 -7
  142. package/project-skills/tdd-guard/reporters/test/artifacts/rust/import/Cargo.toml +0 -4
  143. package/project-skills/tdd-guard/reporters/test/artifacts/rust/import/src/lib.rs +0 -13
  144. package/project-skills/tdd-guard/reporters/test/artifacts/rust/passing/Cargo.lock +0 -7
  145. package/project-skills/tdd-guard/reporters/test/artifacts/rust/passing/Cargo.toml +0 -4
  146. package/project-skills/tdd-guard/reporters/test/artifacts/rust/passing/src/lib.rs +0 -14
  147. package/project-skills/tdd-guard/reporters/test/artifacts/storybook/Calculator.js +0 -4
  148. package/project-skills/tdd-guard/reporters/test/artifacts/storybook/single-failing.stories.js +0 -15
  149. package/project-skills/tdd-guard/reporters/test/artifacts/storybook/single-import-error.stories.js +0 -14
  150. package/project-skills/tdd-guard/reporters/test/artifacts/storybook/single-passing.stories.js +0 -15
  151. package/project-skills/tdd-guard/reporters/test/artifacts/vitest/single-failing.test.js +0 -7
  152. package/project-skills/tdd-guard/reporters/test/artifacts/vitest/single-import-error.test.js +0 -9
  153. package/project-skills/tdd-guard/reporters/test/artifacts/vitest/single-passing.test.js +0 -7
  154. package/project-skills/tdd-guard/reporters/test/factories/go.ts +0 -59
  155. package/project-skills/tdd-guard/reporters/test/factories/helpers.ts +0 -48
  156. package/project-skills/tdd-guard/reporters/test/factories/index.ts +0 -7
  157. package/project-skills/tdd-guard/reporters/test/factories/jest.ts +0 -51
  158. package/project-skills/tdd-guard/reporters/test/factories/phpunit.ts +0 -63
  159. package/project-skills/tdd-guard/reporters/test/factories/pytest.ts +0 -41
  160. package/project-skills/tdd-guard/reporters/test/factories/rust.ts +0 -158
  161. package/project-skills/tdd-guard/reporters/test/factories/storybook.ts +0 -198
  162. package/project-skills/tdd-guard/reporters/test/factories/vitest.ts +0 -51
  163. package/project-skills/tdd-guard/reporters/test/reporters.integration.test.ts +0 -735
  164. package/project-skills/tdd-guard/reporters/test/types.ts +0 -28
  165. package/project-skills/tdd-guard/reporters/vitest/README.md +0 -64
  166. package/project-skills/tdd-guard/reporters/vitest/package.json +0 -35
  167. package/project-skills/tdd-guard/reporters/vitest/src/VitestReporter.test-data.ts +0 -85
  168. package/project-skills/tdd-guard/reporters/vitest/src/VitestReporter.test.ts +0 -446
  169. package/project-skills/tdd-guard/reporters/vitest/src/VitestReporter.ts +0 -110
  170. package/project-skills/tdd-guard/reporters/vitest/src/index.ts +0 -4
  171. package/project-skills/tdd-guard/reporters/vitest/src/types.ts +0 -39
  172. package/project-skills/tdd-guard/reporters/vitest/tsconfig.json +0 -11
  173. package/project-skills/tdd-guard/src/cli/buildContext.test.ts +0 -200
  174. package/project-skills/tdd-guard/src/cli/buildContext.ts +0 -48
  175. package/project-skills/tdd-guard/src/cli/tdd-guard.test.ts +0 -159
  176. package/project-skills/tdd-guard/src/cli/tdd-guard.ts +0 -48
  177. package/project-skills/tdd-guard/src/config/Config.test.ts +0 -538
  178. package/project-skills/tdd-guard/src/config/Config.ts +0 -172
  179. package/project-skills/tdd-guard/src/contracts/schemas/guardSchemas.test.ts +0 -58
  180. package/project-skills/tdd-guard/src/contracts/schemas/guardSchemas.ts +0 -8
  181. package/project-skills/tdd-guard/src/contracts/schemas/lintSchemas.test.ts +0 -347
  182. package/project-skills/tdd-guard/src/contracts/schemas/lintSchemas.ts +0 -61
  183. package/project-skills/tdd-guard/src/contracts/schemas/pytestSchemas.test.ts +0 -24
  184. package/project-skills/tdd-guard/src/contracts/schemas/pytestSchemas.ts +0 -7
  185. package/project-skills/tdd-guard/src/contracts/schemas/reporterSchemas.test.ts +0 -377
  186. package/project-skills/tdd-guard/src/contracts/schemas/reporterSchemas.ts +0 -75
  187. package/project-skills/tdd-guard/src/contracts/schemas/toolSchemas.test.ts +0 -563
  188. package/project-skills/tdd-guard/src/contracts/schemas/toolSchemas.ts +0 -140
  189. package/project-skills/tdd-guard/src/contracts/types/ClientType.ts +0 -1
  190. package/project-skills/tdd-guard/src/contracts/types/ConfigOptions.ts +0 -12
  191. package/project-skills/tdd-guard/src/contracts/types/Context.ts +0 -16
  192. package/project-skills/tdd-guard/src/contracts/types/ModelClient.ts +0 -3
  193. package/project-skills/tdd-guard/src/contracts/types/ValidationResult.ts +0 -6
  194. package/project-skills/tdd-guard/src/guard/GuardManager.test.ts +0 -336
  195. package/project-skills/tdd-guard/src/guard/GuardManager.ts +0 -83
  196. package/project-skills/tdd-guard/src/hooks/HookEvents.test.ts +0 -107
  197. package/project-skills/tdd-guard/src/hooks/HookEvents.ts +0 -39
  198. package/project-skills/tdd-guard/src/hooks/fileTypeDetection.ts +0 -16
  199. package/project-skills/tdd-guard/src/hooks/postToolLint.test.ts +0 -327
  200. package/project-skills/tdd-guard/src/hooks/postToolLint.ts +0 -165
  201. package/project-skills/tdd-guard/src/hooks/processHookData.test.ts +0 -465
  202. package/project-skills/tdd-guard/src/hooks/processHookData.ts +0 -203
  203. package/project-skills/tdd-guard/src/hooks/sessionHandler.test.ts +0 -136
  204. package/project-skills/tdd-guard/src/hooks/sessionHandler.ts +0 -31
  205. package/project-skills/tdd-guard/src/hooks/userPromptHandler.test.ts +0 -131
  206. package/project-skills/tdd-guard/src/hooks/userPromptHandler.ts +0 -55
  207. package/project-skills/tdd-guard/src/index.ts +0 -19
  208. package/project-skills/tdd-guard/src/linters/Linter.ts +0 -5
  209. package/project-skills/tdd-guard/src/linters/eslint/ESLint.test.ts +0 -183
  210. package/project-skills/tdd-guard/src/linters/eslint/ESLint.ts +0 -82
  211. package/project-skills/tdd-guard/src/linters/golangci/GolangciLint.test.ts +0 -170
  212. package/project-skills/tdd-guard/src/linters/golangci/GolangciLint.ts +0 -148
  213. package/project-skills/tdd-guard/src/processors/index.ts +0 -1
  214. package/project-skills/tdd-guard/src/processors/lintProcessor.ts +0 -77
  215. package/project-skills/tdd-guard/src/processors/testResults/TestResultsProcessor.test.ts +0 -303
  216. package/project-skills/tdd-guard/src/processors/testResults/TestResultsProcessor.ts +0 -255
  217. package/project-skills/tdd-guard/src/providers/LinterProvider.test.ts +0 -43
  218. package/project-skills/tdd-guard/src/providers/LinterProvider.ts +0 -20
  219. package/project-skills/tdd-guard/src/providers/ModelClientProvider.test.ts +0 -68
  220. package/project-skills/tdd-guard/src/providers/ModelClientProvider.ts +0 -22
  221. package/project-skills/tdd-guard/src/storage/FileStorage.test.ts +0 -76
  222. package/project-skills/tdd-guard/src/storage/FileStorage.ts +0 -108
  223. package/project-skills/tdd-guard/src/storage/MemoryStorage.ts +0 -57
  224. package/project-skills/tdd-guard/src/storage/Storage.test.ts +0 -227
  225. package/project-skills/tdd-guard/src/storage/Storage.ts +0 -17
  226. package/project-skills/tdd-guard/src/validation/context/context.test.ts +0 -364
  227. package/project-skills/tdd-guard/src/validation/context/context.ts +0 -155
  228. package/project-skills/tdd-guard/src/validation/models/AnthropicApi.test.ts +0 -171
  229. package/project-skills/tdd-guard/src/validation/models/AnthropicApi.ts +0 -49
  230. package/project-skills/tdd-guard/src/validation/models/ClaudeAgentSdk.test.ts +0 -167
  231. package/project-skills/tdd-guard/src/validation/models/ClaudeAgentSdk.ts +0 -54
  232. package/project-skills/tdd-guard/src/validation/models/ClaudeCli.test.ts +0 -239
  233. package/project-skills/tdd-guard/src/validation/models/ClaudeCli.ts +0 -57
  234. package/project-skills/tdd-guard/src/validation/prompts/file-types.ts +0 -52
  235. package/project-skills/tdd-guard/src/validation/prompts/operations/edit.ts +0 -58
  236. package/project-skills/tdd-guard/src/validation/prompts/operations/multi-edit.ts +0 -54
  237. package/project-skills/tdd-guard/src/validation/prompts/operations/write.ts +0 -54
  238. package/project-skills/tdd-guard/src/validation/prompts/response.ts +0 -40
  239. package/project-skills/tdd-guard/src/validation/prompts/rules.ts +0 -51
  240. package/project-skills/tdd-guard/src/validation/prompts/system-prompt.ts +0 -10
  241. package/project-skills/tdd-guard/src/validation/prompts/tools/lint-results.ts +0 -15
  242. package/project-skills/tdd-guard/src/validation/prompts/tools/test-output.ts +0 -14
  243. package/project-skills/tdd-guard/src/validation/prompts/tools/todos.ts +0 -9
  244. package/project-skills/tdd-guard/src/validation/validator.test.ts +0 -268
  245. package/project-skills/tdd-guard/src/validation/validator.ts +0 -159
  246. package/project-skills/tdd-guard/test/artifacts/go/.golangci.yml +0 -6
  247. package/project-skills/tdd-guard/test/artifacts/go/with-issues/file-with-issues.go +0 -12
  248. package/project-skills/tdd-guard/test/artifacts/go/with-issues/go.mod +0 -3
  249. package/project-skills/tdd-guard/test/artifacts/go/without-issues/file-without-issues.go +0 -7
  250. package/project-skills/tdd-guard/test/artifacts/go/without-issues/go.mod +0 -3
  251. package/project-skills/tdd-guard/test/artifacts/javascript/eslint.config.js +0 -20
  252. package/project-skills/tdd-guard/test/artifacts/javascript/file-with-issues.js +0 -12
  253. package/project-skills/tdd-guard/test/artifacts/javascript/file-without-issues.js +0 -10
  254. package/project-skills/tdd-guard/test/hooks/fileTypeDetection.test.ts +0 -26
  255. package/project-skills/tdd-guard/test/hooks/processHookData.fileType.test.ts +0 -46
  256. package/project-skills/tdd-guard/test/hooks/processHookData.python.test.ts +0 -68
  257. package/project-skills/tdd-guard/test/integration/test-context.test.ts +0 -66
  258. package/project-skills/tdd-guard/test/integration/validator.core.test.ts +0 -96
  259. package/project-skills/tdd-guard/test/integration/validator.scenarios.test.ts +0 -497
  260. package/project-skills/tdd-guard/test/utils/assertions.ts +0 -29
  261. package/project-skills/tdd-guard/test/utils/factories/contextFactory.ts +0 -30
  262. package/project-skills/tdd-guard/test/utils/factories/editFactory.ts +0 -82
  263. package/project-skills/tdd-guard/test/utils/factories/helpers.test.ts +0 -46
  264. package/project-skills/tdd-guard/test/utils/factories/helpers.ts +0 -46
  265. package/project-skills/tdd-guard/test/utils/factories/lintFactory.ts +0 -352
  266. package/project-skills/tdd-guard/test/utils/factories/modelClientProviderFactory.ts +0 -21
  267. package/project-skills/tdd-guard/test/utils/factories/multiEditFactory.ts +0 -79
  268. package/project-skills/tdd-guard/test/utils/factories/operations.ts +0 -57
  269. package/project-skills/tdd-guard/test/utils/factories/reporterFactory.ts +0 -55
  270. package/project-skills/tdd-guard/test/utils/factories/scenarios/index.ts +0 -22
  271. package/project-skills/tdd-guard/test/utils/factories/scenarios/languages/python.ts +0 -745
  272. package/project-skills/tdd-guard/test/utils/factories/scenarios/languages/typescript.ts +0 -767
  273. package/project-skills/tdd-guard/test/utils/factories/scenarios/types.ts +0 -77
  274. package/project-skills/tdd-guard/test/utils/factories/scenarios/utils.ts +0 -15
  275. package/project-skills/tdd-guard/test/utils/factories/sessionStartFactory.ts +0 -36
  276. package/project-skills/tdd-guard/test/utils/factories/testDefaults.ts +0 -90
  277. package/project-skills/tdd-guard/test/utils/factories/testResultsFactory.ts +0 -234
  278. package/project-skills/tdd-guard/test/utils/factories/todoFactory.ts +0 -99
  279. package/project-skills/tdd-guard/test/utils/factories/userPromptSubmitFactory.ts +0 -39
  280. package/project-skills/tdd-guard/test/utils/factories/writeFactory.ts +0 -70
  281. package/project-skills/tdd-guard/test/utils/index.ts +0 -131
  282. package/project-skills/tdd-guard/tsconfig.build.json +0 -16
  283. package/project-skills/tdd-guard/tsconfig.eslint.json +0 -17
  284. package/project-skills/tdd-guard/tsconfig.json +0 -32
  285. package/project-skills/tdd-guard/tsconfig.node.json +0 -10
  286. package/project-skills/tdd-guard/vitest.config.ts +0 -85
@@ -1,464 +0,0 @@
1
- // src/main.rs - Simplified main module with unified execution paths
2
-
3
- use clap::Parser;
4
- use std::fs;
5
- use std::io::{self, BufRead, BufReader, IsTerminal, Write};
6
- use std::path::{Path, PathBuf};
7
- use std::process::{Child, Command, Stdio};
8
-
9
- mod error_parser;
10
- mod parser;
11
- mod transformer;
12
-
13
- use error_parser::parse_error_buffer;
14
- use parser::TestEvent;
15
- use transformer::{transform_events, TddGuardOutput};
16
-
17
- #[derive(Parser, Debug)]
18
- #[command(name = "tdd-guard-rust")]
19
- #[command(about = "Rust test reporter for TDD Guard validation")]
20
- #[command(version = "0.1.0")]
21
- #[command(
22
- long_about = "A test reporter that captures Rust test results for TDD Guard validation. \
23
- Supports both cargo test and cargo nextest with optional JSON output for detailed reporting."
24
- )]
25
- struct Args {
26
- /// Absolute path to project root directory
27
- #[arg(long, value_name = "PATH")]
28
- project_root: String,
29
-
30
- /// Pass through mode - read from stdin instead of running tests
31
- #[arg(long, default_value_t = false)]
32
- passthrough: bool,
33
-
34
- /// Disable implicit passthrough when stdin is piped (auto on by default)
35
- #[arg(long, default_value_t = false)]
36
- no_auto_passthrough: bool,
37
-
38
- /// Test runner to use (nextest, cargo, auto)
39
- #[arg(long, default_value = "auto")]
40
- runner: String,
41
-
42
- /// Pass remaining args to test runner
43
- #[arg(trailing_var_arg = true)]
44
- test_args: Vec<String>,
45
- }
46
-
47
- fn main() -> io::Result<()> {
48
- let args = Args::parse();
49
-
50
- let project_root = PathBuf::from(&args.project_root);
51
- if !project_root.is_absolute() {
52
- eprintln!("Error: project-root must be an absolute path");
53
- std::process::exit(1);
54
- }
55
-
56
- if !project_root.exists() {
57
- eprintln!(
58
- "Error: project-root does not exist: {}",
59
- project_root.display()
60
- );
61
- std::process::exit(1);
62
- }
63
-
64
- let auto_enabled = !args.no_auto_passthrough && env_auto_enabled();
65
- let use_pass = should_passthrough(args.passthrough, auto_enabled);
66
-
67
- let exit_code = if use_pass {
68
- process_passthrough(&project_root)?
69
- } else {
70
- run_and_process(&args, &project_root)?
71
- };
72
-
73
- std::process::exit(exit_code);
74
- }
75
-
76
- /// Unified function to run tests and process output
77
- fn run_and_process(args: &Args, project_root: &Path) -> io::Result<i32> {
78
- let runner = detect_runner(&args.runner);
79
-
80
- let mut cmd = build_test_command(&runner, &args.test_args);
81
-
82
- // Execute and collect output
83
- let mut child = cmd.stdout(Stdio::piped()).stderr(Stdio::piped()).spawn()?;
84
-
85
- let (test_lines, stderr_lines) = read_output(&mut child, false)?;
86
-
87
- process_output(&test_lines, &stderr_lines, project_root)?;
88
-
89
- let status = child.wait()?;
90
- Ok(status.code().unwrap_or(1))
91
- }
92
-
93
- /// Build test command based on runner type
94
- fn build_test_command(runner: &str, test_args: &[String]) -> Command {
95
- let mut cmd = Command::new("cargo");
96
-
97
- match runner {
98
- "nextest" => {
99
- cmd.arg("nextest").arg("run");
100
- cmd.env("NEXTEST_EXPERIMENTAL_LIBTEST_JSON", "1");
101
- cmd.arg("--message-format").arg("libtest-json");
102
- cmd.arg("--no-fail-fast");
103
- }
104
- _ => {
105
- cmd.arg("test");
106
- cmd.arg("--no-fail-fast");
107
-
108
- // Add test arguments
109
- for arg in test_args {
110
- cmd.arg(arg);
111
- }
112
-
113
- // Add JSON output flags (best effort - may require nightly)
114
- cmd.arg("--");
115
- cmd.arg("-Z").arg("unstable-options");
116
- cmd.arg("--format").arg("json");
117
- cmd.arg("--show-output");
118
-
119
- // Return here to avoid adding test_args twice
120
- return cmd;
121
- }
122
- }
123
-
124
- // Add test arguments for nextest
125
- for arg in test_args {
126
- cmd.arg(arg);
127
- }
128
-
129
- cmd
130
- }
131
-
132
- /// Process passthrough mode - read from stdin and echo
133
- fn process_passthrough(project_root: &Path) -> io::Result<i32> {
134
- let stdin = io::stdin();
135
- let reader = stdin.lock();
136
-
137
- let mut all_lines = Vec::new();
138
- for line in reader.lines() {
139
- let line = line?;
140
- println!("{}", line);
141
- io::stdout().flush()?;
142
- all_lines.push(line);
143
- }
144
-
145
- // Separate JSON and non-JSON lines
146
- let (json_lines, other_lines): (Vec<_>, Vec<_>) = all_lines
147
- .into_iter()
148
- .partition(|line| line.trim().starts_with('{') && line.contains("\"type\":"));
149
-
150
- process_output(&json_lines, &other_lines, project_root)?;
151
- Ok(0)
152
- }
153
-
154
- /// Read output from child process, optionally echoing to stdout/stderr
155
- fn read_output(child: &mut Child, echo: bool) -> io::Result<(Vec<String>, Vec<String>)> {
156
- let stdout = child.stdout.take().expect("Failed to capture stdout");
157
- let stderr = child.stderr.take().expect("Failed to capture stderr");
158
-
159
- let mut test_lines = Vec::new();
160
- let mut stderr_lines = Vec::new();
161
-
162
- for line in BufReader::new(stdout).lines() {
163
- let line = line?;
164
- if echo {
165
- println!("{}", line);
166
- io::stdout().flush()?;
167
- }
168
- test_lines.push(line);
169
- }
170
-
171
- for line in BufReader::new(stderr).lines() {
172
- let line = line?;
173
- if echo {
174
- eprintln!("{}", line);
175
- }
176
- stderr_lines.push(line);
177
- }
178
-
179
- if !echo {
180
- for line in &test_lines {
181
- println!("{}", line);
182
- }
183
- for line in &stderr_lines {
184
- eprintln!("{}", line);
185
- }
186
- io::stdout().flush()?;
187
- }
188
-
189
- Ok((test_lines, stderr_lines))
190
- }
191
-
192
- /// Process test output and save results
193
- fn process_output(
194
- test_lines: &[String],
195
- stderr_lines: &[String],
196
- project_root: &Path,
197
- ) -> io::Result<()> {
198
- // Parse JSON events
199
- let mut events = Vec::new();
200
- for line in test_lines {
201
- if let Ok(event) = serde_json::from_str::<TestEvent>(line) {
202
- events.push(event);
203
- }
204
- }
205
-
206
- let mut compilation_errors = parse_error_buffer(stderr_lines);
207
-
208
- // If no JSON events found, also check test output for errors
209
- if events.is_empty() && !test_lines.is_empty() {
210
- let test_errors = parse_error_buffer(test_lines);
211
- compilation_errors.extend(test_errors);
212
- }
213
-
214
- // Transform to TDD Guard format
215
- let output = transform_events(events, compilation_errors);
216
-
217
- save_results(project_root, &output)?;
218
-
219
- Ok(())
220
- }
221
-
222
- /// Save test results to TDD Guard format
223
- fn save_results(project_root: &Path, output: &TddGuardOutput) -> io::Result<()> {
224
- let output_dir = project_root.join(".claude").join("tdd-guard").join("data");
225
- fs::create_dir_all(&output_dir)?;
226
-
227
- let output_file = output_dir.join("test.json");
228
- let temp_file = output_dir.join("test.json.tmp");
229
-
230
- let json = serde_json::to_string_pretty(output)?;
231
- fs::write(&temp_file, json)?;
232
- fs::rename(&temp_file, &output_file)?;
233
-
234
- Ok(())
235
- }
236
-
237
- /// Detect which test runner to use
238
- fn detect_runner(preference: &str) -> String {
239
- match preference {
240
- "nextest" => "nextest".to_string(),
241
- "cargo" => "cargo".to_string(),
242
- "auto" => {
243
- // Check if nextest is available (cache this in real impl)
244
- if Command::new("cargo")
245
- .args(&["nextest", "--version"])
246
- .output()
247
- .map(|output| output.status.success())
248
- .unwrap_or(false)
249
- {
250
- "nextest".to_string()
251
- } else {
252
- "cargo".to_string()
253
- }
254
- }
255
- _ => "cargo".to_string(),
256
- }
257
- }
258
-
259
- fn env_auto_enabled() -> bool {
260
- match std::env::var("TDD_GUARD_AUTO_PASSTHROUGH") {
261
- Ok(val) => {
262
- let v = val.trim().to_ascii_lowercase();
263
- !(v == "0" || v == "false" || v == "no" || v == "off")
264
- }
265
- Err(_) => true,
266
- }
267
- }
268
-
269
- fn decide_passthrough(explicit: bool, auto_enabled: bool, stdin_is_terminal: bool) -> bool {
270
- if explicit {
271
- return true;
272
- }
273
- if auto_enabled {
274
- return !stdin_is_terminal;
275
- }
276
- false
277
- }
278
-
279
- fn should_passthrough(explicit: bool, auto_enabled: bool) -> bool {
280
- let stdin_is_terminal = io::stdin().is_terminal();
281
- decide_passthrough(explicit, auto_enabled, stdin_is_terminal)
282
- }
283
-
284
- #[cfg(test)]
285
- mod tests {
286
- use super::*;
287
- use tempfile::TempDir;
288
-
289
- #[test]
290
- fn test_save_results() {
291
- let temp_dir = TempDir::new().unwrap();
292
- let project_root = temp_dir.path();
293
-
294
- let output = TddGuardOutput {
295
- test_modules: vec![],
296
- reason: Some("passed".to_string()),
297
- };
298
-
299
- save_results(project_root, &output).unwrap();
300
-
301
- let expected_file = project_root
302
- .join(".claude")
303
- .join("tdd-guard")
304
- .join("data")
305
- .join("test.json");
306
-
307
- assert!(expected_file.exists());
308
-
309
- let content = fs::read_to_string(expected_file).unwrap();
310
- let parsed: serde_json::Value = serde_json::from_str(&content).unwrap();
311
-
312
- assert_eq!(parsed["reason"], "passed");
313
- }
314
-
315
- #[test]
316
- fn test_env_auto_enabled() {
317
- use std::env;
318
- let key = "TDD_GUARD_AUTO_PASSTHROUGH";
319
-
320
- // Unset -> true
321
- env::remove_var(key);
322
- assert!(super::env_auto_enabled());
323
-
324
- env::set_var(key, "0");
325
- assert!(!super::env_auto_enabled());
326
- env::set_var(key, "false");
327
- assert!(!super::env_auto_enabled());
328
- env::set_var(key, "no");
329
- assert!(!super::env_auto_enabled());
330
- env::set_var(key, "off");
331
- assert!(!super::env_auto_enabled());
332
-
333
- env::set_var(key, "1");
334
- assert!(super::env_auto_enabled());
335
- env::set_var(key, "true");
336
- assert!(super::env_auto_enabled());
337
- env::set_var(key, "yes");
338
- assert!(super::env_auto_enabled());
339
- env::set_var(key, "on");
340
- assert!(super::env_auto_enabled());
341
-
342
- env::remove_var(key);
343
- }
344
-
345
- #[test]
346
- fn test_decide_passthrough_matrix() {
347
- // explicit always wins
348
- assert!(super::decide_passthrough(true, true, true));
349
- assert!(super::decide_passthrough(true, true, false));
350
- assert!(super::decide_passthrough(true, false, true));
351
- assert!(super::decide_passthrough(true, false, false));
352
-
353
- // auto disabled: never passthrough unless explicit
354
- assert!(!super::decide_passthrough(false, false, true));
355
- assert!(!super::decide_passthrough(false, false, false));
356
-
357
- // auto enabled: passthrough when stdin is not a terminal
358
- assert!(!super::decide_passthrough(false, true, true));
359
- assert!(super::decide_passthrough(false, true, false));
360
- }
361
-
362
- #[test]
363
- fn test_detect_runner() {
364
- assert_eq!(detect_runner("nextest"), "nextest");
365
- assert_eq!(detect_runner("cargo"), "cargo");
366
- assert_eq!(detect_runner("invalid"), "cargo");
367
- }
368
-
369
- #[test]
370
- fn test_process_empty_output() {
371
- let temp_dir = TempDir::new().unwrap();
372
- let project_root = temp_dir.path();
373
-
374
- process_output(&[], &[], project_root).unwrap();
375
-
376
- let expected_file = project_root
377
- .join(".claude")
378
- .join("tdd-guard")
379
- .join("data")
380
- .join("test.json");
381
-
382
- assert!(expected_file.exists());
383
- }
384
-
385
- #[test]
386
- fn test_process_output_merges_stderr_compilation_errors_when_no_json() {
387
- use tempfile::TempDir;
388
- let temp_dir = TempDir::new().unwrap();
389
- let project_root = temp_dir.path();
390
-
391
- // No JSON events, only stderr with a compilation error
392
- let test_lines: Vec<String> = vec![
393
- // stdout
394
- "running 0 tests".to_string(),
395
- ];
396
- let stderr_lines: Vec<String> = vec![
397
- // stderr from rustc
398
- "error[E0425]: cannot find value `x` in this scope".to_string(),
399
- " --> src/lib.rs:2:9".to_string(),
400
- ];
401
-
402
- super::process_output(&test_lines, &stderr_lines, project_root).unwrap();
403
-
404
- // Verify output file exists and contains a compilation module failed
405
- let out = project_root
406
- .join(".claude")
407
- .join("tdd-guard")
408
- .join("data")
409
- .join("test.json");
410
- let content = std::fs::read_to_string(out).unwrap();
411
- let v: serde_json::Value = serde_json::from_str(&content).unwrap();
412
- assert_eq!(v["reason"], "failed");
413
- assert!(v["testModules"]
414
- .as_array()
415
- .unwrap()
416
- .iter()
417
- .any(|m| m["moduleId"] == "compilation"));
418
- }
419
-
420
- #[test]
421
- fn test_process_passthrough_partitions_json_and_non_json() {
422
- use crate::parser::TestEvent;
423
- use tempfile::TempDir;
424
-
425
- let temp_dir = TempDir::new().unwrap();
426
- let project_root = temp_dir.path();
427
-
428
- // Simulate passthrough partition logic by calling process_output directly with mixed lines.
429
- // JSON-like lines need a "type" key to be parsed as events.
430
- let json_test_event = serde_json::to_string(&TestEvent::Test {
431
- name: "crate::tests::adds$works".to_string(),
432
- event: "failed".to_string(),
433
- stdout: Some("assertion `left == right` failed\n left: 1\n right: 2".to_string()),
434
- stderr: None,
435
- })
436
- .unwrap();
437
-
438
- let non_json_error = vec![
439
- "error[E0599]: no method named `foo` found for type `u8`".to_string(),
440
- " --> src/main.rs:10:5".to_string(),
441
- ];
442
-
443
- let test_lines = vec![json_test_event]; // stdin JSON goes here
444
- let stderr_lines = non_json_error; // other lines treated as stderr here
445
-
446
- super::process_output(&test_lines, &stderr_lines, project_root).unwrap();
447
-
448
- let out = project_root
449
- .join(".claude")
450
- .join("tdd-guard")
451
- .join("data")
452
- .join("test.json");
453
- let content = std::fs::read_to_string(out).unwrap();
454
- let v: serde_json::Value = serde_json::from_str(&content).unwrap();
455
-
456
- // Expect both a normal module (crate) and compilation module
457
- assert_eq!(v["reason"], "failed");
458
- let modules = v["testModules"].as_array().unwrap();
459
- assert!(modules
460
- .iter()
461
- .any(|m| m["moduleId"].as_str().unwrap().contains("crate")));
462
- assert!(modules.iter().any(|m| m["moduleId"] == "compilation"));
463
- }
464
- }
@@ -1,225 +0,0 @@
1
- // src/parser.rs - Simplified parser for test events
2
-
3
- use serde::{Deserialize, Serialize};
4
- use serde_json::Value;
5
-
6
- /// Test event from cargo test/nextest JSON output
7
- #[derive(Debug, Clone, Deserialize, Serialize)]
8
- #[serde(tag = "type", rename_all = "lowercase")]
9
- pub enum TestEvent {
10
- Suite {
11
- event: String,
12
- #[serde(default)]
13
- passed: u32,
14
- #[serde(default)]
15
- failed: u32,
16
- #[serde(default)]
17
- ignored: u32,
18
- },
19
- Test {
20
- name: String,
21
- event: String,
22
- #[serde(default)]
23
- stdout: Option<String>,
24
- #[serde(default)]
25
- stderr: Option<String>,
26
- },
27
- #[serde(untagged)]
28
- Other(Value),
29
- }
30
-
31
- impl TestEvent {
32
- /// Get error message from stdout/stderr
33
- pub fn error_message(&self) -> Option<String> {
34
- match self {
35
- TestEvent::Test { stdout, stderr, .. } => {
36
- let mut msg = String::new();
37
-
38
- if let Some(out) = stdout {
39
- msg.push_str(out.trim());
40
- }
41
-
42
- if let Some(err) = stderr {
43
- if !msg.is_empty() {
44
- msg.push('\n');
45
- }
46
- msg.push_str(err.trim());
47
- }
48
-
49
- if msg.is_empty() {
50
- None
51
- } else {
52
- Some(msg)
53
- }
54
- }
55
- _ => None,
56
- }
57
- }
58
-
59
- /// Extract module name from test path
60
- pub fn module_name(&self) -> String {
61
- match self {
62
- TestEvent::Test { name, .. } => extract_module(name),
63
- _ => "tests".to_string(),
64
- }
65
- }
66
-
67
- /// Extract simple test name
68
- pub fn simple_test_name(&self) -> String {
69
- match self {
70
- TestEvent::Test { name, .. } => extract_test_name(name),
71
- _ => String::new(),
72
- }
73
- }
74
- }
75
-
76
- /// Extract module from test path
77
- fn extract_module(path: &str) -> String {
78
- // Handle doc tests: "src/lib.rs - function (line X)"
79
- if path.contains(" - ") && path.contains(" (line ") {
80
- return "doctests".to_string();
81
- }
82
-
83
- // Handle integration tests: "tests/integration.rs: test_name"
84
- if path.starts_with("tests/") && path.contains(':') {
85
- if let Some(file) = path.split(':').next() {
86
- return file.trim_end_matches(".rs").replace('/', "::");
87
- }
88
- }
89
-
90
- // Handle nextest format with $
91
- if let Some(pos) = path.find('$') {
92
- let module = &path[..pos];
93
- // Remove duplicate crate name if present
94
- if let Some(colon_pos) = module.rfind("::") {
95
- let prefix = &module[..colon_pos];
96
- let suffix = &module[colon_pos + 2..];
97
- if prefix == suffix {
98
- return prefix.to_string();
99
- }
100
- }
101
- return module.to_string();
102
- }
103
-
104
- // Standard format: extract first component
105
- if let Some(pos) = path.find("::") {
106
- return path[..pos].to_string();
107
- }
108
-
109
- "tests".to_string()
110
- }
111
-
112
- /// Extract test name from path
113
- fn extract_test_name(path: &str) -> String {
114
- // Handle doc tests
115
- if path.contains(" - ") && path.contains(" (line ") {
116
- if let Some(start) = path.find(" - ") {
117
- let after = &path[start + 3..];
118
- if let Some(end) = after.find(" (line ") {
119
- return after[..end].to_string();
120
- }
121
- }
122
- }
123
-
124
- // Handle integration tests
125
- if path.starts_with("tests/") && path.contains(": ") {
126
- if let Some(pos) = path.find(": ") {
127
- return path[pos + 2..].to_string();
128
- }
129
- }
130
-
131
- // Handle nextest format
132
- if let Some(pos) = path.find('$') {
133
- return path[pos + 1..].to_string();
134
- }
135
-
136
- // Standard format: last component
137
- if let Some(pos) = path.rfind("::") {
138
- return path[pos + 2..].to_string();
139
- }
140
-
141
- path.to_string()
142
- }
143
-
144
- #[cfg(test)]
145
- mod tests {
146
- use super::*;
147
-
148
- #[test]
149
- fn test_extract_module() {
150
- assert_eq!(extract_module("src/lib.rs - add (line 7)"), "doctests");
151
- assert_eq!(
152
- extract_module("tests/integration: test_basic"),
153
- "tests::integration"
154
- );
155
- assert_eq!(
156
- extract_module("my_crate::my_crate$tests::test_fn"),
157
- "my_crate"
158
- );
159
- assert_eq!(extract_module("my_crate::tests::test_fn"), "my_crate");
160
- }
161
-
162
- #[test]
163
- fn test_extract_test_name() {
164
- assert_eq!(
165
- extract_test_name("src/lib.rs - module::add (line 7)"),
166
- "module::add"
167
- );
168
- assert_eq!(
169
- extract_test_name("tests/integration: test_basic"),
170
- "test_basic"
171
- );
172
- assert_eq!(extract_test_name("crate$tests::test_fn"), "tests::test_fn");
173
- assert_eq!(extract_test_name("crate::tests::test_fn"), "test_fn");
174
- }
175
-
176
- #[test]
177
- fn test_error_message() {
178
- let event = TestEvent::Test {
179
- name: "test".to_string(),
180
- event: "failed".to_string(),
181
- stdout: Some("assertion failed".to_string()),
182
- stderr: Some("error details".to_string()),
183
- };
184
-
185
- let msg = event.error_message().unwrap();
186
- assert!(msg.contains("assertion failed"));
187
- assert!(msg.contains("error details"));
188
- }
189
-
190
- #[test]
191
- fn test_doctest_paths_module_and_name() {
192
- let e = TestEvent::Test {
193
- name: "src/lib.rs - my_mod::add (line 7)".to_string(),
194
- event: "ok".to_string(),
195
- stdout: None,
196
- stderr: None,
197
- };
198
- assert_eq!(e.module_name(), "doctests");
199
- assert_eq!(e.simple_test_name(), "my_mod::add");
200
- }
201
-
202
- #[test]
203
- fn test_integration_test_paths() {
204
- let e = TestEvent::Test {
205
- name: "tests/integration.rs: test_basic".to_string(),
206
- event: "ok".to_string(),
207
- stdout: None,
208
- stderr: None,
209
- };
210
- assert_eq!(e.module_name(), "tests::integration");
211
- assert_eq!(e.simple_test_name(), "test_basic");
212
- }
213
-
214
- #[test]
215
- fn test_nextest_dollar_format_and_duplicate_crate() {
216
- let e = TestEvent::Test {
217
- name: "my_crate::my_crate$tests::test_fn".to_string(),
218
- event: "ok".to_string(),
219
- stdout: None,
220
- stderr: None,
221
- };
222
- assert_eq!(e.module_name(), "my_crate");
223
- assert_eq!(e.simple_test_name(), "tests::test_fn");
224
- }
225
- }