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
@@ -39,20 +39,12 @@ module Mutant
39
39
 
40
40
  private
41
41
 
42
- # Next job, if any
43
- #
44
- # @return [Job, nil]
45
42
  def next_job
46
43
  var_source.with do |source|
47
44
  source.next if source.next?
48
45
  end
49
46
  end
50
47
 
51
- # Add result
52
- #
53
- # @param [Object] result
54
- #
55
- # @return [Boolean]
56
48
  def add_result(result)
57
49
  var_sink.with do |sink|
58
50
  sink.result(result)
@@ -60,32 +52,18 @@ module Mutant
60
52
  end
61
53
  end
62
54
 
63
- # Register job to be started
64
- #
65
- # @param [Job] job
66
- #
67
- # @return [undefined]
68
55
  def job_start(job)
69
56
  var_active_jobs.with do |active_jobs|
70
57
  active_jobs << job
71
58
  end
72
59
  end
73
60
 
74
- # Register job to be done
75
- #
76
- # @param [Job] job
77
- # @param [Object] result
78
- #
79
- # @return [undefined]
80
61
  def job_done(job)
81
62
  var_active_jobs.with do |active_jobs|
82
63
  active_jobs.delete(job)
83
64
  end
84
65
  end
85
66
 
86
- # Finalize worker
87
- #
88
- # @return [undefined]
89
67
  def finalize
90
68
  var_final.put(nil) if var_running.modify(&:pred).zero?
91
69
  end
@@ -69,11 +69,6 @@ module Mutant
69
69
 
70
70
  private
71
71
 
72
- # Write output frame
73
- #
74
- # @param [String] frame
75
- #
76
- # @return [undefined]
77
72
  def write(frame)
78
73
  output.write(frame)
79
74
  end
@@ -49,12 +49,6 @@ module Mutant
49
49
 
50
50
  private
51
51
 
52
- # Format object with printer
53
- #
54
- # @param [Class:Printer] printer
55
- # @param [Object] object
56
- #
57
- # @return [String]
58
52
  def format(printer, object)
59
53
  buffer = new_buffer
60
54
  printer.call(Output.new(tty, buffer), object)
@@ -84,9 +78,6 @@ module Mutant
84
78
 
85
79
  private
86
80
 
87
- # New buffer
88
- #
89
- # @return [StringIO]
90
81
  def new_buffer
91
82
  StringIO.new
92
83
  end
@@ -44,81 +44,41 @@ module Mutant
44
44
 
45
45
  private
46
46
 
47
- # Status color
48
- #
49
- # @return [Color]
50
47
  def status_color
51
- success? ? Color::GREEN : Color::RED
48
+ success? ? Unparser::Color::GREEN : Unparser::Color::RED
52
49
  end
53
50
 
54
- # Visit a collection of objects
55
- #
56
- # @return [Class::Printer] printer
57
- # @return [Enumerable<Object>] collection
58
- #
59
- # @return [undefined]
60
51
  def visit_collection(printer, collection)
61
52
  collection.each do |object|
62
53
  visit(printer, object)
63
54
  end
64
55
  end
65
56
 
66
- # Visit object
67
- #
68
- # @param [Class::Printer] printer
69
- # @param [Object] object
70
- #
71
- # @return [undefined]
72
57
  def visit(printer, object)
73
58
  printer.call(output, object)
74
59
  end
75
60
 
76
- # Print an info line to output
77
- #
78
- # @return [undefined]
79
61
  def info(string, *arguments)
80
62
  puts(string % arguments)
81
63
  end
82
64
 
83
- # Print a status line to output
84
- #
85
- # @return [undefined]
86
65
  def status(string, *arguments)
87
66
  puts(colorize(status_color, string % arguments))
88
67
  end
89
68
 
90
- # Print a line to output
91
- #
92
- # @return [undefined]
93
69
  def puts(string)
94
70
  output.puts(string)
95
71
  end
96
72
 
97
- # Colorize message
98
- #
99
- # @param [Color] color
100
- # @param [String] message
101
- #
102
- # @return [String]
103
- # if color is enabled
104
- # unmodified message otherwise
105
73
  def colorize(color, message)
106
- color = Color::NONE unless tty?
74
+ color = Unparser::Color::NONE unless tty?
107
75
  color.format(message)
108
76
  end
109
77
 
110
- # Test if output is a tty
111
- #
112
- # @return [Boolean]
113
78
  def tty?
114
79
  output.tty?
115
80
  end
116
81
 
117
- # Test if output can be colored
118
- #
119
- # @return [Boolean]
120
- #
121
- # @api private
122
82
  alias_method :color?, :tty?
123
83
  end # Printer
124
84
  end # CLI
@@ -40,29 +40,14 @@ module Mutant
40
40
 
41
41
  private
42
42
 
43
- # Mutations processed per second
44
- #
45
- # @return [Float]
46
- #
47
- # @api private
48
43
  def mutations_per_second
49
44
  amount_mutation_results / runtime
50
45
  end
51
46
 
52
- # Coverage in percent
53
- #
54
- # @return [Float]
55
- #
56
- # @api private
57
47
  def coverage_percent
58
48
  coverage * 100
59
49
  end
60
50
 
61
- # Overhead in percent
62
- #
63
- # @return [Float]
64
- #
65
- # @api private
66
51
  def overhead_percent
67
52
  (overhead / killtime) * 100
68
53
  end
@@ -28,7 +28,7 @@ module Mutant
28
28
  * Bug in your test suite
29
29
  * Bug in your test suite under concurrency
30
30
 
31
- The following exception was raised:
31
+ The following exception was raised while reading the killfork result:
32
32
 
33
33
  ```
34
34
  %s
@@ -60,45 +60,36 @@ module Mutant
60
60
  #
61
61
  # @return [undefined]
62
62
  def run
63
- __send__(MAP.fetch(object.class))
64
63
  print_log_messages
64
+ __send__(MAP.fetch(object.class))
65
65
  end
66
66
 
67
67
  private
68
68
 
69
- # Visit successful isolation result
70
- #
71
- # @return [undefined]
72
69
  def visit_success
73
70
  visit(TestResult, object.value)
74
71
  end
75
72
 
76
- # Print log messages
77
- #
78
- # @return [undefined]
79
73
  def print_log_messages
80
74
  log = object.log
81
75
 
82
- puts(LOG_MESSAGES % log) unless log.empty?
76
+ return if log.empty?
77
+
78
+ puts('Log messages (combined stderr and stdout):')
79
+
80
+ log.each_line do |line|
81
+ puts('[killfork] %<line>s' % { line: line })
82
+ end
83
83
  end
84
84
 
85
- # Visit child error isolation result
86
- #
87
- # @return [undefined]
88
85
  def visit_child_error
89
86
  puts(CHILD_ERROR_MESSAGE % object.value.inspect)
90
87
  end
91
88
 
92
- # Visit fork error isolation result
93
- #
94
- # @return [undefined]
95
89
  def visit_fork_error
96
90
  puts(FORK_ERROR_MESSAGE)
97
91
  end
98
92
 
99
- # Visit exception isolation result
100
- #
101
- # @return [undefined]
102
93
  def visit_exception
103
94
  exception = object.value
104
95
 
@@ -110,9 +101,6 @@ module Mutant
110
101
  )
111
102
  end
112
103
 
113
- # Visit chain
114
- #
115
- # @return [undefined]
116
104
  def visit_chain
117
105
  printer = self.class
118
106
 
@@ -18,11 +18,6 @@ module Mutant
18
18
 
19
19
  private
20
20
 
21
- # Write colorized char
22
- #
23
- # @param [String] char
24
- #
25
- # @return [undefined]
26
21
  def char(char)
27
22
  output.write(colorize(status_color, char))
28
23
  end
@@ -59,9 +59,6 @@ module Mutant
59
59
 
60
60
  private
61
61
 
62
- # Print mutation details
63
- #
64
- # @return [undefined]
65
62
  def print_details
66
63
  __send__(MAP.fetch(mutation.class))
67
64
 
@@ -69,11 +66,8 @@ module Mutant
69
66
  visit_isolation_result
70
67
  end
71
68
 
72
- # Evil mutation details
73
- #
74
- # @return [String]
75
69
  def evil_details
76
- diff = Diff.build(mutation.original_source, mutation.source)
70
+ diff = Unparser::Diff.build(mutation.original_source, mutation.source)
77
71
  diff = color? ? diff.colorized_diff : diff.diff
78
72
  if diff
79
73
  output.write(diff)
@@ -82,9 +76,6 @@ module Mutant
82
76
  end
83
77
  end
84
78
 
85
- # Print no diff message
86
- #
87
- # @return [undefined]
88
79
  def print_no_diff_message
89
80
  info(
90
81
  NO_DIFF_MESSAGE,
@@ -95,30 +86,18 @@ module Mutant
95
86
  )
96
87
  end
97
88
 
98
- # Noop details
99
- #
100
- # @return [String]
101
89
  def noop_details
102
90
  info(NOOP_MESSAGE)
103
91
  end
104
92
 
105
- # Neutral details
106
- #
107
- # @return [String]
108
93
  def neutral_details
109
94
  info(NEUTRAL_MESSAGE, original_node.inspect, mutation.source)
110
95
  end
111
96
 
112
- # Visit failed test results
113
- #
114
- # @return [undefined]
115
97
  def visit_isolation_result
116
98
  visit(IsolationResult, isolation_result)
117
99
  end
118
100
 
119
- # Original node
120
- #
121
- # @return [Parser::AST::Node]
122
101
  def original_node
123
102
  mutation.subject.node
124
103
  end
@@ -35,18 +35,10 @@ module Mutant
35
35
 
36
36
  private
37
37
 
38
- # Object being printed
39
- #
40
- # @return [Result::Env]
41
38
  def object
42
39
  super().payload
43
40
  end
44
41
 
45
- # Mutations processed per second
46
- #
47
- # @return [Float]
48
- #
49
- # @api private
50
42
  def mutations_per_second
51
43
  amount_mutation_results / runtime
52
44
  end
@@ -32,9 +32,6 @@ module Mutant
32
32
 
33
33
  private
34
34
 
35
- # Print stats
36
- #
37
- # @return [undefined]
38
35
  def print_stats
39
36
  status(
40
37
  FORMAT,
@@ -47,16 +44,10 @@ module Mutant
47
44
  )
48
45
  end
49
46
 
50
- # Print progress bar finish
51
- #
52
- # @return [undefined]
53
47
  def print_progress_bar_finish
54
48
  puts(nil) unless amount_mutation_results.zero?
55
49
  end
56
50
 
57
- # Print mutation results
58
- #
59
- # @return [undefined]
60
51
  def print_mutation_results
61
52
  visit_collection(MutationProgressResult, object.mutation_results)
62
53
  end
@@ -29,10 +29,6 @@ module Mutant
29
29
 
30
30
  private
31
31
 
32
- # Touched paths
33
- #
34
- # @return [Hash{Pathname => Path}]
35
- #
36
32
  # rubocop:disable Metrics/MethodLength
37
33
  def touched_paths
38
34
  pathname = world.pathname
@@ -49,13 +45,8 @@ module Mutant
49
45
  .to_h
50
46
  end
51
47
  memoize :touched_paths
48
+ # rubocop:enable Metrics/MethodLength
52
49
 
53
- # Parse path
54
- #
55
- # @param [Pathname] work_dir
56
- # @param [String] line
57
- #
58
- # @return [Path]
59
50
  def parse_line(work_dir, line)
60
51
  match = FORMAT.match(line) or fail Error, "Invalid git diff-index line: #{line}"
61
52
 
@@ -88,9 +79,6 @@ module Mutant
88
79
 
89
80
  private
90
81
 
91
- # Ranges of hunks in the diff
92
- #
93
- # @return [Array<Range<Integer>>]
94
82
  def diff_ranges
95
83
  world
96
84
  .capture_stdout(%W[git diff --unified=0 #{to} -- #{path}])
@@ -18,11 +18,6 @@ module Mutant
18
18
  diff.lines.flat_map(&method(:parse_ranges)).to_set
19
19
  end
20
20
 
21
- # Parse ranges from line
22
- #
23
- # @param [String] line
24
- #
25
- # @return [Array<Range<Integer>>]
26
21
  def self.parse_ranges(line)
27
22
  match = REGEXP.match(line) or return EMPTY_ARRAY
28
23
 
@@ -34,12 +29,6 @@ module Mutant
34
29
  end
35
30
  private_class_method :parse_ranges
36
31
 
37
- # Construct a range from start point and offset
38
- #
39
- # @param [String] start
40
- # @param [String, nil] offset
41
- #
42
- # @return [Range<Integer>]
43
32
  def self.mk_range(start, offset)
44
33
  start = Integer(start)
45
34