mutant 0.9.8 → 0.9.13

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 (335) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mutant.rb +5 -2
  3. data/lib/mutant/ast.rb +0 -9
  4. data/lib/mutant/ast/find_metaclass_containing.rb +48 -0
  5. data/lib/mutant/ast/meta/send.rb +0 -6
  6. data/lib/mutant/bootstrap.rb +14 -37
  7. data/lib/mutant/cli.rb +11 -49
  8. data/lib/mutant/config.rb +0 -8
  9. data/lib/mutant/context.rb +0 -3
  10. data/lib/mutant/env.rb +0 -6
  11. data/lib/mutant/expression/method.rb +6 -6
  12. data/lib/mutant/expression/methods.rb +6 -6
  13. data/lib/mutant/expression/parser.rb +0 -6
  14. data/lib/mutant/integration.rb +0 -18
  15. data/lib/mutant/isolation.rb +1 -1
  16. data/lib/mutant/isolation/fork.rb +2 -24
  17. data/lib/mutant/isolation/none.rb +1 -1
  18. data/lib/mutant/license.rb +11 -0
  19. data/lib/mutant/matcher.rb +0 -14
  20. data/lib/mutant/matcher/config.rb +2 -11
  21. data/lib/mutant/matcher/method.rb +0 -31
  22. data/lib/mutant/matcher/method/instance.rb +0 -8
  23. data/lib/mutant/matcher/method/metaclass.rb +86 -0
  24. data/lib/mutant/matcher/method/singleton.rb +0 -25
  25. data/lib/mutant/matcher/methods.rb +17 -28
  26. data/lib/mutant/matcher/namespace.rb +0 -10
  27. data/lib/mutant/matcher/scope.rb +2 -4
  28. data/lib/mutant/meta/example/dsl.rb +0 -21
  29. data/lib/mutant/meta/example/verification.rb +0 -20
  30. data/lib/mutant/minitest/coverage.rb +53 -0
  31. data/lib/mutant/mutation.rb +0 -3
  32. data/lib/mutant/mutator.rb +1 -29
  33. data/lib/mutant/mutator/node.rb +1 -66
  34. data/lib/mutant/mutator/node/and_asgn.rb +0 -3
  35. data/lib/mutant/mutator/node/argument.rb +0 -15
  36. data/lib/mutant/mutator/node/arguments.rb +0 -20
  37. data/lib/mutant/mutator/node/begin.rb +0 -3
  38. data/lib/mutant/mutator/node/binary.rb +0 -23
  39. data/lib/mutant/mutator/node/block.rb +0 -15
  40. data/lib/mutant/mutator/node/block_pass.rb +29 -0
  41. data/lib/mutant/mutator/node/break.rb +0 -3
  42. data/lib/mutant/mutator/node/case.rb +0 -9
  43. data/lib/mutant/mutator/node/class.rb +0 -3
  44. data/lib/mutant/mutator/node/conditional_loop.rb +0 -3
  45. data/lib/mutant/mutator/node/const.rb +0 -3
  46. data/lib/mutant/mutator/node/define.rb +0 -11
  47. data/lib/mutant/mutator/node/defined.rb +0 -3
  48. data/lib/mutant/mutator/node/dstr.rb +0 -3
  49. data/lib/mutant/mutator/node/dsym.rb +0 -3
  50. data/lib/mutant/mutator/node/generic.rb +0 -3
  51. data/lib/mutant/mutator/node/if.rb +0 -12
  52. data/lib/mutant/mutator/node/index.rb +0 -27
  53. data/lib/mutant/mutator/node/kwbegin.rb +0 -3
  54. data/lib/mutant/mutator/node/literal.rb +0 -3
  55. data/lib/mutant/mutator/node/literal/array.rb +0 -6
  56. data/lib/mutant/mutator/node/literal/boolean.rb +0 -4
  57. data/lib/mutant/mutator/node/literal/float.rb +0 -9
  58. data/lib/mutant/mutator/node/literal/hash.rb +0 -9
  59. data/lib/mutant/mutator/node/literal/integer.rb +0 -9
  60. data/lib/mutant/mutator/node/literal/nil.rb +0 -3
  61. data/lib/mutant/mutator/node/literal/range.rb +4 -7
  62. data/lib/mutant/mutator/node/literal/regex.rb +0 -6
  63. data/lib/mutant/mutator/node/literal/string.rb +0 -3
  64. data/lib/mutant/mutator/node/literal/symbol.rb +0 -3
  65. data/lib/mutant/mutator/node/masgn.rb +0 -3
  66. data/lib/mutant/mutator/node/match_current_line.rb +0 -3
  67. data/lib/mutant/mutator/node/mlhs.rb +0 -3
  68. data/lib/mutant/mutator/node/named_value/access.rb +2 -14
  69. data/lib/mutant/mutator/node/named_value/constant_assignment.rb +0 -9
  70. data/lib/mutant/mutator/node/named_value/variable_assignment.rb +0 -6
  71. data/lib/mutant/mutator/node/next.rb +0 -3
  72. data/lib/mutant/mutator/node/noop.rb +1 -4
  73. data/lib/mutant/mutator/node/nthref.rb +0 -3
  74. data/lib/mutant/mutator/node/op_asgn.rb +0 -3
  75. data/lib/mutant/mutator/node/or_asgn.rb +0 -3
  76. data/lib/mutant/mutator/node/procarg_zero.rb +0 -3
  77. data/lib/mutant/mutator/node/regopt.rb +0 -6
  78. data/lib/mutant/mutator/node/resbody.rb +0 -6
  79. data/lib/mutant/mutator/node/rescue.rb +2 -19
  80. data/lib/mutant/mutator/node/return.rb +0 -3
  81. data/lib/mutant/mutator/node/sclass.rb +20 -0
  82. data/lib/mutant/mutator/node/send.rb +26 -61
  83. data/lib/mutant/mutator/node/send/attribute_assignment.rb +0 -9
  84. data/lib/mutant/mutator/node/send/binary.rb +0 -11
  85. data/lib/mutant/mutator/node/send/conditional.rb +0 -3
  86. data/lib/mutant/mutator/node/splat.rb +0 -3
  87. data/lib/mutant/mutator/node/super.rb +0 -3
  88. data/lib/mutant/mutator/node/when.rb +0 -19
  89. data/lib/mutant/mutator/node/yield.rb +0 -3
  90. data/lib/mutant/mutator/node/zsuper.rb +0 -3
  91. data/lib/mutant/mutator/util/array.rb +0 -6
  92. data/lib/mutant/mutator/util/symbol.rb +0 -3
  93. data/lib/mutant/parallel.rb +0 -13
  94. data/lib/mutant/parallel/driver.rb +0 -10
  95. data/lib/mutant/parallel/worker.rb +0 -22
  96. data/lib/mutant/reporter/cli.rb +0 -5
  97. data/lib/mutant/reporter/cli/format.rb +0 -9
  98. data/lib/mutant/reporter/cli/printer.rb +2 -42
  99. data/lib/mutant/reporter/cli/printer/env_progress.rb +0 -15
  100. data/lib/mutant/reporter/cli/printer/isolation_result.rb +9 -21
  101. data/lib/mutant/reporter/cli/printer/mutation_progress_result.rb +0 -5
  102. data/lib/mutant/reporter/cli/printer/mutation_result.rb +1 -22
  103. data/lib/mutant/reporter/cli/printer/status_progressive.rb +0 -8
  104. data/lib/mutant/reporter/cli/printer/subject_progress.rb +0 -9
  105. data/lib/mutant/repository/diff.rb +1 -13
  106. data/lib/mutant/repository/diff/ranges.rb +0 -11
  107. data/lib/mutant/result.rb +0 -3
  108. data/lib/mutant/runner.rb +0 -18
  109. data/lib/mutant/runner/sink.rb +0 -5
  110. data/lib/mutant/subject.rb +0 -8
  111. data/lib/mutant/subject/method.rb +0 -3
  112. data/lib/mutant/subject/method/instance.rb +40 -6
  113. data/lib/mutant/subject/method/metaclass.rb +30 -0
  114. data/lib/mutant/transform.rb +0 -92
  115. data/lib/mutant/version.rb +1 -1
  116. data/lib/mutant/warnings.rb +0 -6
  117. data/lib/mutant/zombifier.rb +2 -34
  118. metadata +61 -333
  119. data/.github/workflows/ci.yml +0 -121
  120. data/.gitignore +0 -38
  121. data/.rspec +0 -5
  122. data/.rubocop.yml +0 -7
  123. data/Changelog.md +0 -75
  124. data/Gemfile +0 -7
  125. data/Gemfile.lock +0 -167
  126. data/Gemfile.shared +0 -10
  127. data/README.md +0 -138
  128. data/Rakefile +0 -5
  129. data/config/devtools.yml +0 -2
  130. data/config/reek.yml +0 -138
  131. data/config/rubocop.yml +0 -205
  132. data/config/yardstick.yml +0 -2
  133. data/docs/commercial-support.md +0 -14
  134. data/docs/concurrency.md +0 -39
  135. data/docs/incremental.md +0 -76
  136. data/docs/known-problems.md +0 -30
  137. data/docs/limitations.md +0 -50
  138. data/docs/mutant-minitest.md +0 -149
  139. data/docs/mutant-rspec.md +0 -130
  140. data/docs/nomenclature.md +0 -82
  141. data/docs/reading-reports.md +0 -74
  142. data/lib/mutant/color.rb +0 -43
  143. data/lib/mutant/diff.rb +0 -114
  144. data/meta/and.rb +0 -15
  145. data/meta/and_asgn.rb +0 -14
  146. data/meta/array.rb +0 -30
  147. data/meta/begin.rb +0 -23
  148. data/meta/block.rb +0 -202
  149. data/meta/block_pass.rb +0 -8
  150. data/meta/blockarg.rb +0 -10
  151. data/meta/break.rb +0 -10
  152. data/meta/case.rb +0 -223
  153. data/meta/casgn.rb +0 -28
  154. data/meta/cbase.rb +0 -8
  155. data/meta/class.rb +0 -12
  156. data/meta/const.rb +0 -17
  157. data/meta/csend.rb +0 -10
  158. data/meta/cvar.rb +0 -7
  159. data/meta/cvasgn.rb +0 -10
  160. data/meta/date.rb +0 -59
  161. data/meta/def.rb +0 -203
  162. data/meta/defined.rb +0 -9
  163. data/meta/dstr.rb +0 -13
  164. data/meta/dsym.rb +0 -14
  165. data/meta/ensure.rb +0 -9
  166. data/meta/false.rb +0 -8
  167. data/meta/file.rb +0 -5
  168. data/meta/float.rb +0 -37
  169. data/meta/gvar.rb +0 -7
  170. data/meta/gvasgn.rb +0 -10
  171. data/meta/hash.rb +0 -24
  172. data/meta/if.rb +0 -77
  173. data/meta/index.rb +0 -133
  174. data/meta/indexasgn.rb +0 -31
  175. data/meta/int.rb +0 -18
  176. data/meta/ivar.rb +0 -8
  177. data/meta/ivasgn.rb +0 -23
  178. data/meta/kwarg.rb +0 -10
  179. data/meta/kwbegin.rb +0 -9
  180. data/meta/kwoptarg.rb +0 -13
  181. data/meta/lambda.rb +0 -23
  182. data/meta/line.rb +0 -5
  183. data/meta/lvar.rb +0 -16
  184. data/meta/lvasgn.rb +0 -25
  185. data/meta/masgn.rb +0 -7
  186. data/meta/match_current_line.rb +0 -15
  187. data/meta/next.rb +0 -11
  188. data/meta/nil.rb +0 -5
  189. data/meta/nthref.rb +0 -14
  190. data/meta/op_assgn.rb +0 -17
  191. data/meta/or.rb +0 -15
  192. data/meta/or_asgn.rb +0 -50
  193. data/meta/range.rb +0 -39
  194. data/meta/redo.rb +0 -5
  195. data/meta/regexp.rb +0 -81
  196. data/meta/regopt.rb +0 -10
  197. data/meta/rescue.rb +0 -90
  198. data/meta/return.rb +0 -16
  199. data/meta/self.rb +0 -7
  200. data/meta/send.rb +0 -604
  201. data/meta/str.rb +0 -7
  202. data/meta/super.rb +0 -27
  203. data/meta/sym.rb +0 -8
  204. data/meta/true.rb +0 -8
  205. data/meta/until.rb +0 -17
  206. data/meta/while.rb +0 -26
  207. data/meta/yield.rb +0 -10
  208. data/mutant-minitest.gemspec +0 -22
  209. data/mutant-rspec.gemspec +0 -22
  210. data/mutant.gemspec +0 -41
  211. data/mutant.yml +0 -6
  212. data/spec/integration/mutant/corpus_spec.rb +0 -15
  213. data/spec/integration/mutant/isolation/fork_spec.rb +0 -28
  214. data/spec/integration/mutant/minitest_spec.rb +0 -11
  215. data/spec/integration/mutant/null_spec.rb +0 -16
  216. data/spec/integration/mutant/rspec_spec.rb +0 -15
  217. data/spec/integration/mutant/test_mutator_handles_types_spec.rb +0 -9
  218. data/spec/integrations.yml +0 -63
  219. data/spec/shared/base_behavior.rb +0 -45
  220. data/spec/shared/framework_integration_behavior.rb +0 -70
  221. data/spec/shared/method_matcher_behavior.rb +0 -47
  222. data/spec/spec_helper.rb +0 -75
  223. data/spec/support/corpus.rb +0 -318
  224. data/spec/support/file_system.rb +0 -62
  225. data/spec/support/ice_nine_config.rb +0 -10
  226. data/spec/support/ruby_vm.rb +0 -84
  227. data/spec/support/shared_context.rb +0 -169
  228. data/spec/support/test_app.rb +0 -7
  229. data/spec/support/warnings.yml +0 -6
  230. data/spec/support/xspec.rb +0 -183
  231. data/spec/unit/mutant/ast/meta/optarg_spec.rb +0 -24
  232. data/spec/unit/mutant/ast/meta/send/proc_predicate_spec.rb +0 -30
  233. data/spec/unit/mutant/ast/meta/send/receiver_possible_top_level_const_predicate_spec.rb +0 -39
  234. data/spec/unit/mutant/ast/meta/send_spec.rb +0 -42
  235. data/spec/unit/mutant/ast/named_children_spec.rb +0 -89
  236. data/spec/unit/mutant/ast/sexp_spec.rb +0 -38
  237. data/spec/unit/mutant/ast_spec.rb +0 -57
  238. data/spec/unit/mutant/bootstrap_spec.rb +0 -216
  239. data/spec/unit/mutant/cli_spec.rb +0 -305
  240. data/spec/unit/mutant/clock_monotonic_spec.rb +0 -52
  241. data/spec/unit/mutant/config_spec.rb +0 -126
  242. data/spec/unit/mutant/context_spec.rb +0 -111
  243. data/spec/unit/mutant/diff_spec.rb +0 -189
  244. data/spec/unit/mutant/env_spec.rb +0 -229
  245. data/spec/unit/mutant/expression/method_spec.rb +0 -62
  246. data/spec/unit/mutant/expression/methods_spec.rb +0 -61
  247. data/spec/unit/mutant/expression/namespace/exact_spec.rb +0 -28
  248. data/spec/unit/mutant/expression/namespace/recursive_spec.rb +0 -66
  249. data/spec/unit/mutant/expression/parser_spec.rb +0 -65
  250. data/spec/unit/mutant/expression_spec.rb +0 -45
  251. data/spec/unit/mutant/integration/rspec_spec.rb +0 -201
  252. data/spec/unit/mutant/integration_spec.rb +0 -150
  253. data/spec/unit/mutant/isolation/fork_spec.rb +0 -309
  254. data/spec/unit/mutant/isolation/none_spec.rb +0 -23
  255. data/spec/unit/mutant/isolation/result_spec.rb +0 -73
  256. data/spec/unit/mutant/license_spec.rb +0 -293
  257. data/spec/unit/mutant/loader_spec.rb +0 -79
  258. data/spec/unit/mutant/matcher/chain_spec.rb +0 -26
  259. data/spec/unit/mutant/matcher/compiler_spec.rb +0 -0
  260. data/spec/unit/mutant/matcher/config_spec.rb +0 -47
  261. data/spec/unit/mutant/matcher/filter_spec.rb +0 -22
  262. data/spec/unit/mutant/matcher/method/instance_spec.rb +0 -164
  263. data/spec/unit/mutant/matcher/method/singleton_spec.rb +0 -90
  264. data/spec/unit/mutant/matcher/methods/instance_spec.rb +0 -54
  265. data/spec/unit/mutant/matcher/methods/singleton_spec.rb +0 -51
  266. data/spec/unit/mutant/matcher/namespace_spec.rb +0 -37
  267. data/spec/unit/mutant/matcher/null_spec.rb +0 -12
  268. data/spec/unit/mutant/matcher/scope_spec.rb +0 -35
  269. data/spec/unit/mutant/matcher/static_spec.rb +0 -13
  270. data/spec/unit/mutant/matcher_spec.rb +0 -102
  271. data/spec/unit/mutant/meta/example/dsl_spec.rb +0 -108
  272. data/spec/unit/mutant/meta/example/verification_spec.rb +0 -154
  273. data/spec/unit/mutant/meta/example_spec.rb +0 -34
  274. data/spec/unit/mutant/mutation_spec.rb +0 -140
  275. data/spec/unit/mutant/mutator/node_spec.rb +0 -52
  276. data/spec/unit/mutant/mutator_spec.rb +0 -21
  277. data/spec/unit/mutant/parallel/driver_spec.rb +0 -126
  278. data/spec/unit/mutant/parallel/source/array_spec.rb +0 -57
  279. data/spec/unit/mutant/parallel/worker_spec.rb +0 -206
  280. data/spec/unit/mutant/parallel_spec.rb +0 -115
  281. data/spec/unit/mutant/parser_spec.rb +0 -26
  282. data/spec/unit/mutant/range_spec.rb +0 -141
  283. data/spec/unit/mutant/registry_spec.rb +0 -74
  284. data/spec/unit/mutant/reporter/cli/printer/config_spec.rb +0 -17
  285. data/spec/unit/mutant/reporter/cli/printer/env_progress_spec.rb +0 -85
  286. data/spec/unit/mutant/reporter/cli/printer/env_result_spec.rb +0 -45
  287. data/spec/unit/mutant/reporter/cli/printer/isolation_result_spec.rb +0 -132
  288. data/spec/unit/mutant/reporter/cli/printer/mutation_progress_result_spec.rb +0 -25
  289. data/spec/unit/mutant/reporter/cli/printer/mutation_result_spec.rb +0 -153
  290. data/spec/unit/mutant/reporter/cli/printer/status_progressive_spec.rb +0 -45
  291. data/spec/unit/mutant/reporter/cli/printer/subject_progress_spec.rb +0 -36
  292. data/spec/unit/mutant/reporter/cli/printer/subject_result_spec.rb +0 -44
  293. data/spec/unit/mutant/reporter/cli/printer/test_result_spec.rb +0 -16
  294. data/spec/unit/mutant/reporter/cli/printer_spec.rb +0 -163
  295. data/spec/unit/mutant/reporter/cli_spec.rb +0 -137
  296. data/spec/unit/mutant/reporter/null_spec.rb +0 -14
  297. data/spec/unit/mutant/reporter/sequence_spec.rb +0 -31
  298. data/spec/unit/mutant/repository/diff/ranges_spec.rb +0 -180
  299. data/spec/unit/mutant/repository/diff_spec.rb +0 -122
  300. data/spec/unit/mutant/repository/subject_filter_spec.rb +0 -30
  301. data/spec/unit/mutant/require_highjack_spec.rb +0 -73
  302. data/spec/unit/mutant/result/class_methods_spec.rb +0 -51
  303. data/spec/unit/mutant/result/env_spec.rb +0 -161
  304. data/spec/unit/mutant/result/mutation_spec.rb +0 -70
  305. data/spec/unit/mutant/result/subject_spec.rb +0 -111
  306. data/spec/unit/mutant/result/test_spec.rb +0 -14
  307. data/spec/unit/mutant/result_spec.rb +0 -33
  308. data/spec/unit/mutant/runner/sink_spec.rb +0 -174
  309. data/spec/unit/mutant/runner_spec.rb +0 -121
  310. data/spec/unit/mutant/selector/expression_spec.rb +0 -62
  311. data/spec/unit/mutant/selector/null_spec.rb +0 -17
  312. data/spec/unit/mutant/subject/method/instance_spec.rb +0 -181
  313. data/spec/unit/mutant/subject/method/singleton_spec.rb +0 -61
  314. data/spec/unit/mutant/subject_spec.rb +0 -93
  315. data/spec/unit/mutant/transform/array_spec.rb +0 -92
  316. data/spec/unit/mutant/transform/bool_spec.rb +0 -63
  317. data/spec/unit/mutant/transform/error_spec.rb +0 -132
  318. data/spec/unit/mutant/transform/exception_spec.rb +0 -44
  319. data/spec/unit/mutant/transform/hash_spec.rb +0 -236
  320. data/spec/unit/mutant/transform/index_spec.rb +0 -92
  321. data/spec/unit/mutant/transform/named_spec.rb +0 -49
  322. data/spec/unit/mutant/transform/primitive_spec.rb +0 -56
  323. data/spec/unit/mutant/transform/sequence_spec.rb +0 -98
  324. data/spec/unit/mutant/util/one_spec.rb +0 -22
  325. data/spec/unit/mutant/warnings_spec.rb +0 -89
  326. data/spec/unit/mutant/world_spec.rb +0 -63
  327. data/spec/unit/mutant/zombifier_spec.rb +0 -122
  328. data/test_app/.rspec +0 -1
  329. data/test_app/Gemfile.minitest +0 -4
  330. data/test_app/Gemfile.rspec3.8 +0 -7
  331. data/test_app/lib/test_app.rb +0 -109
  332. data/test_app/lib/test_app/literal.rb +0 -35
  333. data/test_app/spec/spec_helper.rb +0 -9
  334. data/test_app/spec/unit/test_app/literal_spec.rb +0 -20
  335. data/test_app/test/unit/test_app/literal_test.rb +0 -16
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Reporter::CLI::Printer::EnvResult do
4
- setup_shared_context
5
-
6
- with(:mutation_a_test_result) { { passed: true } }
7
-
8
- let(:reportable) { env_result }
9
-
10
- describe '.call' do
11
- it_reports <<~'STR'
12
- subject-a
13
- - test-a
14
- evil:subject-a:d27d2
15
- @@ -1,2 +1,2 @@
16
- -true
17
- +false
18
- -----------------------
19
- - 1 @ runtime: 1.0
20
- - test-a
21
- Test Output:
22
- mutation a test result output
23
- -----------------------
24
- Mutant environment:
25
- Matcher: #<Mutant::Matcher::Config empty>
26
- Integration: null
27
- Jobs: 1
28
- Includes: []
29
- Requires: []
30
- Subjects: 1
31
- Total-Tests: 1
32
- Selected-Tests: 1
33
- Tests/Subject: 1.00 avg
34
- Mutations: 2
35
- Results: 2
36
- Kills: 1
37
- Alive: 1
38
- Runtime: 4.00s
39
- Killtime: 2.00s
40
- Overhead: 100.00%
41
- Mutations/s: 0.50
42
- Coverage: 50.00%
43
- STR
44
- end
45
- end
@@ -1,132 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Reporter::CLI::Printer::IsolationResult do
4
- setup_shared_context
5
-
6
- describe '.call' do
7
- context 'on sucessful isolation' do
8
- let(:reportable) do
9
- Mutant::Isolation::Result::Success.new(mutation_a_test_result)
10
- end
11
-
12
- it_reports <<~'STR'
13
- - 1 @ runtime: 1.0
14
- - test-a
15
- Test Output:
16
- mutation a test result output
17
- STR
18
- end
19
-
20
- context 'on exception isolation error' do
21
- let(:exception) do
22
- Class.new(RuntimeError) do
23
- def inspect
24
- '<TestException>'
25
- end
26
-
27
- def backtrace
28
- %w[first last]
29
- end
30
- end.new('foo')
31
- end
32
-
33
- let(:reportable) do
34
- Mutant::Isolation::Result::Exception.new(exception)
35
- end
36
-
37
- it_reports <<~'STR'
38
- Killing the mutation resulted in an integration error.
39
- This is the case when the tests selected for the current mutation
40
- did not produce a test result, but instead an exception was raised.
41
-
42
- This may point to the following problems:
43
- * Bug in mutant
44
- * Bug in the ruby interpreter
45
- * Bug in your test suite
46
- * Bug in your test suite under concurrency
47
-
48
- The following exception was raised:
49
-
50
- ```
51
- <TestException>
52
- first
53
- last
54
- ```
55
- STR
56
- end
57
-
58
- context 'on fork isolation error' do
59
- let(:reportable) do
60
- Mutant::Isolation::Fork::ForkError.new
61
- end
62
-
63
- it_reports <<~'STR'
64
- Forking the child process to isolate the mutation in failed.
65
- This meant that either the RubyVM or your OS was under too much
66
- pressure to add another child process.
67
-
68
- Possible solutions are:
69
- * Reduce concurrency
70
- * Reduce locks
71
- STR
72
- end
73
-
74
- context 'on child isolation error' do
75
- let(:reportable) do
76
- Mutant::Isolation::Fork::ChildError.new(
77
- instance_double(
78
- Process::Status,
79
- 'unsuccessful status'
80
- ),
81
- 'log message'
82
- )
83
- end
84
-
85
- it_reports <<~'STR'
86
- Killfork exited nonzero. Its result (if any) was ignored.
87
- Process status:
88
- #<InstanceDouble(Process::Status) "unsuccessful status">
89
- Log messages (combined stderr and stdout):
90
- log message
91
- STR
92
- end
93
-
94
- context 'on child isolation error' do
95
- let(:fork_error) do
96
- Mutant::Isolation::Fork::ForkError.new
97
- end
98
-
99
- let(:child_error) do
100
- Mutant::Isolation::Fork::ChildError.new(
101
- instance_double(
102
- Process::Status,
103
- 'unsuccessful status'
104
- ),
105
- 'log message'
106
- )
107
- end
108
-
109
- let(:reportable) do
110
- Mutant::Isolation::Result::ErrorChain.new(
111
- fork_error,
112
- child_error
113
- )
114
- end
115
-
116
- it_reports <<~'STR'
117
- Forking the child process to isolate the mutation in failed.
118
- This meant that either the RubyVM or your OS was under too much
119
- pressure to add another child process.
120
-
121
- Possible solutions are:
122
- * Reduce concurrency
123
- * Reduce locks
124
- Killfork exited nonzero. Its result (if any) was ignored.
125
- Process status:
126
- #<InstanceDouble(Process::Status) "unsuccessful status">
127
- Log messages (combined stderr and stdout):
128
- log message
129
- STR
130
- end
131
- end
132
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Reporter::CLI::Printer::MutationProgressResult do
4
- setup_shared_context
5
-
6
- let(:reportable) { mutation_a_result }
7
-
8
- before do
9
- allow(output).to receive(:tty?).and_return(true)
10
- end
11
-
12
- describe '.run' do
13
- context 'on killed mutant' do
14
- with(:mutation_a_test_result) { { passed: true } }
15
-
16
- it_reports Mutant::Color::RED.format('F')
17
- end
18
-
19
- context 'on alive mutant' do
20
- with(:mutation_a_test_result) { { passed: false } }
21
-
22
- it_reports Mutant::Color::GREEN.format('.')
23
- end
24
- end
25
- end
@@ -1,153 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Reporter::CLI::Printer::MutationResult do
4
- setup_shared_context
5
-
6
- let(:reportable) { mutation_a_result }
7
-
8
- describe '.call' do
9
- context 'isolation problem' do
10
- let(:status) do
11
- instance_double(Process::Status)
12
- end
13
-
14
- let(:mutation_a_isolation_result) do
15
- Mutant::Isolation::Fork::ChildError.new(status, 'log message')
16
- end
17
-
18
- it_reports(<<~'REPORT')
19
- evil:subject-a:d27d2
20
- @@ -1,2 +1,2 @@
21
- -true
22
- +false
23
- -----------------------
24
- Killfork exited nonzero. Its result (if any) was ignored.
25
- Process status:
26
- #<InstanceDouble(Process::Status) (anonymous)>
27
- Log messages (combined stderr and stdout):
28
- log message
29
- -----------------------
30
- REPORT
31
- end
32
-
33
- context 'unsucessful result' do
34
- with(:mutation_a_test_result) { { passed: true } }
35
-
36
- context 'on evil mutation' do
37
- context 'with a diff' do
38
- context 'on a tty' do
39
- before do
40
- allow(output).to receive(:tty?).and_return(true)
41
- end
42
-
43
- it_reports(
44
- [
45
- [Mutant::Color::NONE, "evil:subject-a:d27d2\n"],
46
- [Mutant::Color::NONE, "@@ -1,2 +1,2 @@\n"],
47
- [Mutant::Color::RED, "-true\n"],
48
- [Mutant::Color::GREEN, "+false\n"],
49
- [Mutant::Color::NONE, "-----------------------\n"],
50
- [Mutant::Color::NONE, "- 1 @ runtime: 1.0\n"],
51
- [Mutant::Color::NONE, " - test-a\n"],
52
- [Mutant::Color::NONE, "Test Output:\n"],
53
- [Mutant::Color::NONE, "mutation a test result output\n"],
54
- [Mutant::Color::NONE, "-----------------------\n"]
55
- ].map { |color, text| color.format(text) }.join
56
- )
57
- end
58
-
59
- context 'on non tty' do
60
- it_reports(<<~'STR')
61
- evil:subject-a:d27d2
62
- @@ -1,2 +1,2 @@
63
- -true
64
- +false
65
- -----------------------
66
- - 1 @ runtime: 1.0
67
- - test-a
68
- Test Output:
69
- mutation a test result output
70
- -----------------------
71
- STR
72
- end
73
- end
74
-
75
- context 'without a diff' do
76
- # This is intentionally invalid AST mutant might produce
77
- let(:subject_a_node) { s(:lvar, :super) }
78
-
79
- # Unparses exactly the same way as above node
80
- let(:mutation_a_node) { s(:zsuper) }
81
-
82
- it_reports(<<~REPORT)
83
- evil:subject-a:a5bc7
84
- --- Internal failure ---
85
- BUG: A generted mutation did not result in exactly one diff hunk!
86
- This is an invariant violation by the mutation generation engine.
87
- Please report a reproduction to https://github.com/mbj/mutant
88
- Original unparsed source:
89
- super
90
- Original AST:
91
- s(:lvar, :super)
92
- Mutated unparsed source:
93
- super
94
- Mutated AST:
95
- s(:zsuper)
96
- -----------------------
97
- - 1 @ runtime: 1.0
98
- - test-a
99
- Test Output:
100
- mutation a test result output
101
- -----------------------
102
- REPORT
103
- end
104
- end
105
-
106
- context 'on neutral mutation' do
107
- with(:mutation_a_test_result) { { passed: false } }
108
-
109
- let(:mutation_a) do
110
- Mutant::Mutation::Neutral.new(subject_a, s(:true))
111
- end
112
-
113
- it_reports(<<~REPORT)
114
- neutral:subject-a:d5318
115
- --- Neutral failure ---
116
- Original code was inserted unmutated. And the test did NOT PASS.
117
- Your tests do not pass initially or you found a bug in mutant / unparser.
118
- Subject AST:
119
- s(:true)
120
- Unparsed Source:
121
- true
122
- -----------------------
123
- - 1 @ runtime: 1.0
124
- - test-a
125
- Test Output:
126
- mutation a test result output
127
- -----------------------
128
- REPORT
129
- end
130
-
131
- context 'on noop mutation' do
132
- with(:mutation_a_test_result) { { passed: false } }
133
-
134
- let(:mutation_a) do
135
- Mutant::Mutation::Noop.new(subject_a, s(:true))
136
- end
137
-
138
- it_reports(<<~REPORT)
139
- noop:subject-a:d5318
140
- ---- Noop failure -----
141
- No code was inserted. And the test did NOT PASS.
142
- This is typically a problem of your specs not passing unmutated.
143
- -----------------------
144
- - 1 @ runtime: 1.0
145
- - test-a
146
- Test Output:
147
- mutation a test result output
148
- -----------------------
149
- REPORT
150
- end
151
- end
152
- end
153
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Reporter::CLI::Printer::StatusProgressive do
4
- setup_shared_context
5
-
6
- let(:reportable) { status }
7
-
8
- describe '.call' do
9
- context 'with empty scheduler' do
10
- with(:env_result) { { subject_results: [] } }
11
-
12
- it_reports <<~REPORT
13
- progress: 00/02 alive: 0 runtime: 4.00s killtime: 0.00s mutations/s: 0.00
14
- REPORT
15
- end
16
-
17
- context 'with scheduler active on one subject' do
18
- context 'without progress' do
19
- with(:status) { { active_jobs: [].to_set } }
20
-
21
- it_reports(<<~REPORT)
22
- progress: 02/02 alive: 0 runtime: 4.00s killtime: 2.00s mutations/s: 0.50
23
- REPORT
24
- end
25
-
26
- context 'with progress' do
27
- with(:status) { { active_jobs: [job_b, job_a].to_set } }
28
-
29
- context 'on failure' do
30
- with(:mutation_a_test_result) { { passed: true } }
31
-
32
- it_reports(<<~REPORT)
33
- progress: 02/02 alive: 1 runtime: 4.00s killtime: 2.00s mutations/s: 0.50
34
- REPORT
35
- end
36
-
37
- context 'on success' do
38
- it_reports(<<~REPORT)
39
- progress: 02/02 alive: 0 runtime: 4.00s killtime: 2.00s mutations/s: 0.50
40
- REPORT
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Reporter::CLI::Printer::SubjectProgress do
4
- setup_shared_context
5
-
6
- let(:reportable) { subject_a_result }
7
-
8
- describe '.call' do
9
- context 'on full coverage' do
10
- it_reports <<~'STR'
11
- subject-a mutations: 2
12
- ..
13
- (02/02) 100% - killtime: 2.00s runtime: 2.00s overhead: 0.00s
14
- STR
15
- end
16
-
17
- context 'on partial coverage' do
18
- with(:mutation_a_test_result) { { passed: true } }
19
-
20
- it_reports <<~'STR'
21
- subject-a mutations: 2
22
- F.
23
- (01/02) 50% - killtime: 2.00s runtime: 2.00s overhead: 0.00s
24
- STR
25
- end
26
-
27
- context 'without results' do
28
- with(:subject_a_result) { { mutation_results: [] } }
29
-
30
- it_reports <<~'STR'
31
- subject-a mutations: 2
32
- (00/02) 100% - killtime: 0.00s runtime: 0.00s overhead: 0.00s
33
- STR
34
- end
35
- end
36
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Reporter::CLI::Printer::SubjectResult do
4
- setup_shared_context
5
-
6
- let(:reportable) { subject_a_result }
7
-
8
- describe '.call' do
9
- context 'on full coverage' do
10
- it_reports <<~'STR'
11
- subject-a
12
- - test-a
13
- STR
14
- end
15
-
16
- context 'on partial coverage' do
17
- with(:mutation_a_test_result) { { passed: true } }
18
-
19
- it_reports <<~'STR'
20
- subject-a
21
- - test-a
22
- evil:subject-a:d27d2
23
- @@ -1,2 +1,2 @@
24
- -true
25
- +false
26
- -----------------------
27
- - 1 @ runtime: 1.0
28
- - test-a
29
- Test Output:
30
- mutation a test result output
31
- -----------------------
32
- STR
33
- end
34
-
35
- context 'without results' do
36
- with(:subject_a_result) { { mutation_results: [] } }
37
-
38
- it_reports <<~'STR'
39
- subject-a
40
- - test-a
41
- STR
42
- end
43
- end
44
- end