mutant 0.9.7 → 0.9.12

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 (336) 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 +0 -36
  7. data/lib/mutant/cli.rb +5 -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 +0 -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 -74
  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/registry.rb +2 -7
  97. data/lib/mutant/reporter/cli.rb +0 -5
  98. data/lib/mutant/reporter/cli/format.rb +0 -9
  99. data/lib/mutant/reporter/cli/printer.rb +2 -42
  100. data/lib/mutant/reporter/cli/printer/env_progress.rb +0 -15
  101. data/lib/mutant/reporter/cli/printer/isolation_result.rb +0 -18
  102. data/lib/mutant/reporter/cli/printer/mutation_progress_result.rb +0 -5
  103. data/lib/mutant/reporter/cli/printer/mutation_result.rb +1 -22
  104. data/lib/mutant/reporter/cli/printer/status_progressive.rb +0 -8
  105. data/lib/mutant/reporter/cli/printer/subject_progress.rb +0 -9
  106. data/lib/mutant/repository/diff.rb +1 -13
  107. data/lib/mutant/repository/diff/ranges.rb +0 -11
  108. data/lib/mutant/result.rb +0 -3
  109. data/lib/mutant/runner.rb +0 -18
  110. data/lib/mutant/runner/sink.rb +0 -5
  111. data/lib/mutant/subject.rb +0 -8
  112. data/lib/mutant/subject/method.rb +0 -3
  113. data/lib/mutant/subject/method/instance.rb +40 -6
  114. data/lib/mutant/subject/method/metaclass.rb +30 -0
  115. data/lib/mutant/transform.rb +0 -92
  116. data/lib/mutant/version.rb +1 -1
  117. data/lib/mutant/warnings.rb +0 -6
  118. data/lib/mutant/zombifier.rb +2 -34
  119. metadata +61 -333
  120. data/.circleci/config.yml +0 -53
  121. data/.gitignore +0 -38
  122. data/.rspec +0 -5
  123. data/.rubocop.yml +0 -7
  124. data/Changelog.md +0 -71
  125. data/Gemfile +0 -14
  126. data/Gemfile.lock +0 -167
  127. data/Gemfile.shared +0 -3
  128. data/README.md +0 -138
  129. data/Rakefile +0 -5
  130. data/config/devtools.yml +0 -2
  131. data/config/reek.yml +0 -138
  132. data/config/rubocop.yml +0 -205
  133. data/config/yardstick.yml +0 -2
  134. data/docs/commercial-support.md +0 -14
  135. data/docs/concurrency.md +0 -39
  136. data/docs/incremental.md +0 -76
  137. data/docs/known-problems.md +0 -30
  138. data/docs/limitations.md +0 -50
  139. data/docs/mutant-minitest.md +0 -149
  140. data/docs/mutant-rspec.md +0 -130
  141. data/docs/nomenclature.md +0 -82
  142. data/docs/reading-reports.md +0 -74
  143. data/lib/mutant/color.rb +0 -43
  144. data/lib/mutant/diff.rb +0 -114
  145. data/meta/and.rb +0 -15
  146. data/meta/and_asgn.rb +0 -14
  147. data/meta/array.rb +0 -30
  148. data/meta/begin.rb +0 -23
  149. data/meta/block.rb +0 -202
  150. data/meta/block_pass.rb +0 -8
  151. data/meta/blockarg.rb +0 -10
  152. data/meta/break.rb +0 -10
  153. data/meta/case.rb +0 -223
  154. data/meta/casgn.rb +0 -28
  155. data/meta/cbase.rb +0 -8
  156. data/meta/class.rb +0 -12
  157. data/meta/const.rb +0 -17
  158. data/meta/csend.rb +0 -10
  159. data/meta/cvar.rb +0 -7
  160. data/meta/cvasgn.rb +0 -10
  161. data/meta/date.rb +0 -59
  162. data/meta/def.rb +0 -203
  163. data/meta/defined.rb +0 -9
  164. data/meta/dstr.rb +0 -13
  165. data/meta/dsym.rb +0 -14
  166. data/meta/ensure.rb +0 -9
  167. data/meta/false.rb +0 -8
  168. data/meta/file.rb +0 -5
  169. data/meta/float.rb +0 -37
  170. data/meta/gvar.rb +0 -7
  171. data/meta/gvasgn.rb +0 -10
  172. data/meta/hash.rb +0 -24
  173. data/meta/if.rb +0 -77
  174. data/meta/index.rb +0 -133
  175. data/meta/indexasgn.rb +0 -31
  176. data/meta/int.rb +0 -18
  177. data/meta/ivar.rb +0 -8
  178. data/meta/ivasgn.rb +0 -23
  179. data/meta/kwarg.rb +0 -10
  180. data/meta/kwbegin.rb +0 -9
  181. data/meta/kwoptarg.rb +0 -13
  182. data/meta/lambda.rb +0 -23
  183. data/meta/line.rb +0 -5
  184. data/meta/lvar.rb +0 -16
  185. data/meta/lvasgn.rb +0 -25
  186. data/meta/masgn.rb +0 -7
  187. data/meta/match_current_line.rb +0 -15
  188. data/meta/next.rb +0 -11
  189. data/meta/nil.rb +0 -5
  190. data/meta/nthref.rb +0 -14
  191. data/meta/op_assgn.rb +0 -17
  192. data/meta/or.rb +0 -15
  193. data/meta/or_asgn.rb +0 -50
  194. data/meta/range.rb +0 -39
  195. data/meta/redo.rb +0 -5
  196. data/meta/regexp.rb +0 -81
  197. data/meta/regopt.rb +0 -10
  198. data/meta/rescue.rb +0 -90
  199. data/meta/return.rb +0 -16
  200. data/meta/self.rb +0 -7
  201. data/meta/send.rb +0 -604
  202. data/meta/str.rb +0 -7
  203. data/meta/super.rb +0 -27
  204. data/meta/sym.rb +0 -8
  205. data/meta/true.rb +0 -8
  206. data/meta/until.rb +0 -17
  207. data/meta/while.rb +0 -26
  208. data/meta/yield.rb +0 -10
  209. data/mutant-minitest.gemspec +0 -22
  210. data/mutant-rspec.gemspec +0 -22
  211. data/mutant.gemspec +0 -41
  212. data/mutant.yml +0 -6
  213. data/spec/integration/mutant/corpus_spec.rb +0 -15
  214. data/spec/integration/mutant/isolation/fork_spec.rb +0 -28
  215. data/spec/integration/mutant/minitest_spec.rb +0 -11
  216. data/spec/integration/mutant/null_spec.rb +0 -16
  217. data/spec/integration/mutant/rspec_spec.rb +0 -15
  218. data/spec/integration/mutant/test_mutator_handles_types_spec.rb +0 -9
  219. data/spec/integrations.yml +0 -63
  220. data/spec/shared/base_behavior.rb +0 -45
  221. data/spec/shared/framework_integration_behavior.rb +0 -70
  222. data/spec/shared/method_matcher_behavior.rb +0 -47
  223. data/spec/spec_helper.rb +0 -75
  224. data/spec/support/corpus.rb +0 -318
  225. data/spec/support/file_system.rb +0 -62
  226. data/spec/support/ice_nine_config.rb +0 -10
  227. data/spec/support/ruby_vm.rb +0 -84
  228. data/spec/support/shared_context.rb +0 -169
  229. data/spec/support/test_app.rb +0 -7
  230. data/spec/support/warnings.yml +0 -6
  231. data/spec/support/xspec.rb +0 -183
  232. data/spec/unit/mutant/ast/meta/optarg_spec.rb +0 -24
  233. data/spec/unit/mutant/ast/meta/send/proc_predicate_spec.rb +0 -30
  234. data/spec/unit/mutant/ast/meta/send/receiver_possible_top_level_const_predicate_spec.rb +0 -39
  235. data/spec/unit/mutant/ast/meta/send_spec.rb +0 -42
  236. data/spec/unit/mutant/ast/named_children_spec.rb +0 -89
  237. data/spec/unit/mutant/ast/sexp_spec.rb +0 -38
  238. data/spec/unit/mutant/ast_spec.rb +0 -57
  239. data/spec/unit/mutant/bootstrap_spec.rb +0 -216
  240. data/spec/unit/mutant/cli_spec.rb +0 -305
  241. data/spec/unit/mutant/clock_monotonic_spec.rb +0 -52
  242. data/spec/unit/mutant/config_spec.rb +0 -126
  243. data/spec/unit/mutant/context_spec.rb +0 -111
  244. data/spec/unit/mutant/diff_spec.rb +0 -189
  245. data/spec/unit/mutant/env_spec.rb +0 -229
  246. data/spec/unit/mutant/expression/method_spec.rb +0 -62
  247. data/spec/unit/mutant/expression/methods_spec.rb +0 -61
  248. data/spec/unit/mutant/expression/namespace/exact_spec.rb +0 -28
  249. data/spec/unit/mutant/expression/namespace/recursive_spec.rb +0 -66
  250. data/spec/unit/mutant/expression/parser_spec.rb +0 -65
  251. data/spec/unit/mutant/expression_spec.rb +0 -45
  252. data/spec/unit/mutant/integration/rspec_spec.rb +0 -201
  253. data/spec/unit/mutant/integration_spec.rb +0 -150
  254. data/spec/unit/mutant/isolation/fork_spec.rb +0 -309
  255. data/spec/unit/mutant/isolation/none_spec.rb +0 -23
  256. data/spec/unit/mutant/isolation/result_spec.rb +0 -73
  257. data/spec/unit/mutant/license_spec.rb +0 -293
  258. data/spec/unit/mutant/loader_spec.rb +0 -79
  259. data/spec/unit/mutant/matcher/chain_spec.rb +0 -26
  260. data/spec/unit/mutant/matcher/compiler_spec.rb +0 -0
  261. data/spec/unit/mutant/matcher/config_spec.rb +0 -47
  262. data/spec/unit/mutant/matcher/filter_spec.rb +0 -22
  263. data/spec/unit/mutant/matcher/method/instance_spec.rb +0 -164
  264. data/spec/unit/mutant/matcher/method/singleton_spec.rb +0 -90
  265. data/spec/unit/mutant/matcher/methods/instance_spec.rb +0 -54
  266. data/spec/unit/mutant/matcher/methods/singleton_spec.rb +0 -51
  267. data/spec/unit/mutant/matcher/namespace_spec.rb +0 -37
  268. data/spec/unit/mutant/matcher/null_spec.rb +0 -12
  269. data/spec/unit/mutant/matcher/scope_spec.rb +0 -35
  270. data/spec/unit/mutant/matcher/static_spec.rb +0 -13
  271. data/spec/unit/mutant/matcher_spec.rb +0 -102
  272. data/spec/unit/mutant/meta/example/dsl_spec.rb +0 -108
  273. data/spec/unit/mutant/meta/example/verification_spec.rb +0 -154
  274. data/spec/unit/mutant/meta/example_spec.rb +0 -34
  275. data/spec/unit/mutant/mutation_spec.rb +0 -140
  276. data/spec/unit/mutant/mutator/node_spec.rb +0 -52
  277. data/spec/unit/mutant/mutator_spec.rb +0 -21
  278. data/spec/unit/mutant/parallel/driver_spec.rb +0 -126
  279. data/spec/unit/mutant/parallel/source/array_spec.rb +0 -57
  280. data/spec/unit/mutant/parallel/worker_spec.rb +0 -206
  281. data/spec/unit/mutant/parallel_spec.rb +0 -115
  282. data/spec/unit/mutant/parser_spec.rb +0 -26
  283. data/spec/unit/mutant/range_spec.rb +0 -141
  284. data/spec/unit/mutant/registry_spec.rb +0 -47
  285. data/spec/unit/mutant/reporter/cli/printer/config_spec.rb +0 -17
  286. data/spec/unit/mutant/reporter/cli/printer/env_progress_spec.rb +0 -85
  287. data/spec/unit/mutant/reporter/cli/printer/env_result_spec.rb +0 -45
  288. data/spec/unit/mutant/reporter/cli/printer/isolation_result_spec.rb +0 -132
  289. data/spec/unit/mutant/reporter/cli/printer/mutation_progress_result_spec.rb +0 -25
  290. data/spec/unit/mutant/reporter/cli/printer/mutation_result_spec.rb +0 -153
  291. data/spec/unit/mutant/reporter/cli/printer/status_progressive_spec.rb +0 -45
  292. data/spec/unit/mutant/reporter/cli/printer/subject_progress_spec.rb +0 -36
  293. data/spec/unit/mutant/reporter/cli/printer/subject_result_spec.rb +0 -44
  294. data/spec/unit/mutant/reporter/cli/printer/test_result_spec.rb +0 -16
  295. data/spec/unit/mutant/reporter/cli/printer_spec.rb +0 -163
  296. data/spec/unit/mutant/reporter/cli_spec.rb +0 -137
  297. data/spec/unit/mutant/reporter/null_spec.rb +0 -14
  298. data/spec/unit/mutant/reporter/sequence_spec.rb +0 -31
  299. data/spec/unit/mutant/repository/diff/ranges_spec.rb +0 -180
  300. data/spec/unit/mutant/repository/diff_spec.rb +0 -122
  301. data/spec/unit/mutant/repository/subject_filter_spec.rb +0 -30
  302. data/spec/unit/mutant/require_highjack_spec.rb +0 -73
  303. data/spec/unit/mutant/result/class_methods_spec.rb +0 -51
  304. data/spec/unit/mutant/result/env_spec.rb +0 -161
  305. data/spec/unit/mutant/result/mutation_spec.rb +0 -70
  306. data/spec/unit/mutant/result/subject_spec.rb +0 -111
  307. data/spec/unit/mutant/result/test_spec.rb +0 -14
  308. data/spec/unit/mutant/result_spec.rb +0 -33
  309. data/spec/unit/mutant/runner/sink_spec.rb +0 -174
  310. data/spec/unit/mutant/runner_spec.rb +0 -121
  311. data/spec/unit/mutant/selector/expression_spec.rb +0 -62
  312. data/spec/unit/mutant/selector/null_spec.rb +0 -17
  313. data/spec/unit/mutant/subject/method/instance_spec.rb +0 -181
  314. data/spec/unit/mutant/subject/method/singleton_spec.rb +0 -61
  315. data/spec/unit/mutant/subject_spec.rb +0 -93
  316. data/spec/unit/mutant/transform/array_spec.rb +0 -92
  317. data/spec/unit/mutant/transform/bool_spec.rb +0 -63
  318. data/spec/unit/mutant/transform/error_spec.rb +0 -132
  319. data/spec/unit/mutant/transform/exception_spec.rb +0 -44
  320. data/spec/unit/mutant/transform/hash_spec.rb +0 -236
  321. data/spec/unit/mutant/transform/index_spec.rb +0 -92
  322. data/spec/unit/mutant/transform/named_spec.rb +0 -49
  323. data/spec/unit/mutant/transform/primitive_spec.rb +0 -56
  324. data/spec/unit/mutant/transform/sequence_spec.rb +0 -98
  325. data/spec/unit/mutant/util/one_spec.rb +0 -22
  326. data/spec/unit/mutant/warnings_spec.rb +0 -89
  327. data/spec/unit/mutant/world_spec.rb +0 -63
  328. data/spec/unit/mutant/zombifier_spec.rb +0 -122
  329. data/test_app/.rspec +0 -1
  330. data/test_app/Gemfile.minitest +0 -4
  331. data/test_app/Gemfile.rspec3.8 +0 -7
  332. data/test_app/lib/test_app.rb +0 -109
  333. data/test_app/lib/test_app/literal.rb +0 -35
  334. data/test_app/spec/spec_helper.rb +0 -9
  335. data/test_app/spec/unit/test_app/literal_spec.rb +0 -20
  336. data/test_app/test/unit/test_app/literal_test.rb +0 -16
@@ -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
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Reporter::CLI::Printer::TestResult do
4
- setup_shared_context
5
-
6
- let(:reportable) { mutation_a_test_result }
7
-
8
- describe '.call' do
9
- it_reports <<~'STR'
10
- - 1 @ runtime: 1.0
11
- - test-a
12
- Test Output:
13
- mutation a test result output
14
- STR
15
- end
16
- end