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,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
@@ -1,163 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Reporter::CLI::Printer do
4
- let(:output) { StringIO.new }
5
-
6
- subject { class_under_test.call(output, reportable) }
7
-
8
- def self.it_reports(expectation)
9
- it 'writes expected report' do
10
- allow(output).to receive(:tty?).and_return(tty?)
11
- subject
12
- output.rewind
13
- expect(output.read).to eql(expectation)
14
- end
15
- end
16
-
17
- let(:reportable) { instance_double(Mutant::Result::Env, success?: success?) }
18
- let(:tty?) { true }
19
- let(:success?) { true }
20
-
21
- describe '.call' do
22
- let(:class_under_test) do
23
- Class.new(described_class) do
24
- def run
25
- puts object
26
- end
27
- end
28
- end
29
-
30
- let(:reportable) { 'foo' }
31
-
32
- it_reports "foo\n"
33
- end
34
-
35
- describe '.delegate' do
36
- let(:reportable) { double(foo: :bar, baz: :boz) }
37
-
38
- let(:class_under_test) do
39
- Class.new(described_class) do
40
- delegate :foo, :baz
41
-
42
- def run
43
- puts(foo)
44
- puts(baz)
45
- end
46
- end
47
- end
48
-
49
- it_reports "bar\nboz\n"
50
-
51
- it 'sets delegation methods to private visibility' do
52
- expect(class_under_test.private_instance_methods).to include(:foo, :baz)
53
- end
54
- end
55
-
56
- describe '#status' do
57
- let(:class_under_test) do
58
- Class.new(described_class) do
59
- def run
60
- status('foo %s', 'bar')
61
- end
62
- end
63
- end
64
-
65
- context 'on tty' do
66
- context 'on success' do
67
- it_reports Mutant::Color::GREEN.format('foo bar') + "\n"
68
- end
69
-
70
- context 'on failure' do
71
- let(:success?) { false }
72
- it_reports Mutant::Color::RED.format('foo bar') + "\n"
73
- end
74
- end
75
-
76
- context 'on no tty' do
77
- let(:tty?) { false }
78
-
79
- context 'on success' do
80
- it_reports "foo bar\n"
81
- end
82
-
83
- context 'on failure' do
84
- let(:success?) { false }
85
-
86
- it_reports "foo bar\n"
87
- end
88
- end
89
- end
90
-
91
- describe '#visit_collection' do
92
- let(:class_under_test) do
93
- reporter = nested_reporter
94
- Class.new(described_class) do
95
- define_method(:run) do
96
- visit_collection(reporter, %w[foo bar])
97
- end
98
- end
99
- end
100
-
101
- let(:nested_reporter) do
102
- Class.new(described_class) do
103
- def run
104
- puts object
105
- end
106
- end
107
- end
108
-
109
- it_reports "foo\nbar\n"
110
- end
111
-
112
- describe '#visit' do
113
- let(:class_under_test) do
114
- reporter = nested_reporter
115
- Class.new(described_class) do
116
- define_method(:run) do
117
- visit(reporter, 'foo')
118
- end
119
- end
120
- end
121
-
122
- let(:nested_reporter) do
123
- Class.new(described_class) do
124
- def run
125
- puts object
126
- end
127
- end
128
- end
129
-
130
- it_reports "foo\n"
131
- end
132
-
133
- describe '#info' do
134
- let(:class_under_test) do
135
- Class.new(described_class) do
136
- def run
137
- info('%s - %s', 'foo', 'bar')
138
- end
139
- end
140
- end
141
-
142
- it_reports "foo - bar\n"
143
- end
144
-
145
- describe '#colorize' do
146
- let(:class_under_test) do
147
- Class.new(described_class) do
148
- def run
149
- puts(colorize(Mutant::Color::RED, 'foo'))
150
- end
151
- end
152
- end
153
-
154
- context 'when output is a tty?' do
155
- it_reports Mutant::Color::RED.format('foo') + "\n"
156
- end
157
-
158
- context 'when output is NOT a tty?' do
159
- let(:tty?) { false }
160
- it_reports "foo\n"
161
- end
162
- end
163
- end
@@ -1,137 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Reporter::CLI do
4
- setup_shared_context
5
-
6
- let(:object) { described_class.new(output, format) }
7
- let(:tty?) { false }
8
-
9
- let(:format) do
10
- described_class::Format::Progressive.new(tty?)
11
- end
12
-
13
- def contents
14
- output.rewind
15
- output.read
16
- end
17
-
18
- def self.it_reports(expected_content)
19
- it 'writes expected report to output' do
20
- expect(subject).to be(object)
21
- expect(contents).to eql(expected_content)
22
- end
23
- end
24
-
25
- before do
26
- allow(Mutant::Timer).to receive_messages(now: Mutant::Timer.now)
27
- end
28
-
29
- describe '.build' do
30
- subject { described_class.build(output) }
31
-
32
- context 'when output is a tty' do
33
- let(:tty?) { true }
34
- let(:output) { instance_double(IO, tty?: true) }
35
-
36
- it { should eql(described_class.new(output, format)) }
37
- end
38
-
39
- context 'when output is not a tty' do
40
- context 'and does not respond to #tty?' do
41
- let(:output) { nil }
42
-
43
- it { should eql(described_class.new(output, format)) }
44
- end
45
-
46
- context 'and does respond to #tty?' do
47
- it { should eql(described_class.new(output, format)) }
48
- end
49
- end
50
- end
51
-
52
- describe '#warn' do
53
- subject { object.warn(message) }
54
-
55
- let(:message) { 'message' }
56
-
57
- it_reports("message\n")
58
- end
59
-
60
- describe '#delay' do
61
- subject { object.delay }
62
-
63
- it { should eql(1.0) }
64
- end
65
-
66
- describe '#start' do
67
- subject { object.start(env) }
68
-
69
- it_reports(<<~REPORT)
70
- Mutant environment:
71
- Matcher: #<Mutant::Matcher::Config empty>
72
- Integration: null
73
- Jobs: 1
74
- Includes: []
75
- Requires: []
76
- Subjects: 1
77
- Total-Tests: 1
78
- Selected-Tests: 1
79
- Tests/Subject: 1.00 avg
80
- Mutations: 2
81
- REPORT
82
- end
83
-
84
- describe '#report' do
85
- subject { object.report(env_result) }
86
-
87
- it_reports(<<~REPORT)
88
- Mutant environment:
89
- Matcher: #<Mutant::Matcher::Config empty>
90
- Integration: null
91
- Jobs: 1
92
- Includes: []
93
- Requires: []
94
- Subjects: 1
95
- Total-Tests: 1
96
- Selected-Tests: 1
97
- Tests/Subject: 1.00 avg
98
- Mutations: 2
99
- Results: 2
100
- Kills: 2
101
- Alive: 0
102
- Runtime: 4.00s
103
- Killtime: 2.00s
104
- Overhead: 100.00%
105
- Mutations/s: 0.50
106
- Coverage: 100.00%
107
- REPORT
108
- end
109
-
110
- describe '#progress' do
111
- subject { object.progress(status) }
112
-
113
- context 'with empty scheduler' do
114
- with(:env_result) { { subject_results: [] } }
115
-
116
- let(:tty?) { true }
117
-
118
- # rubocop:disable Metrics/LineLength
119
- it_reports Mutant::Color::GREEN.format('progress: 00/02 alive: 0 runtime: 4.00s killtime: 0.00s mutations/s: 0.00') + "\n"
120
- # rubocop:enable Metrics/LineLength
121
- end
122
-
123
- context 'with last mutation present' do
124
- with(:env_result) { { subject_results: [subject_a_result] } }
125
-
126
- context 'when mutation is successful' do
127
- it_reports "progress: 02/02 alive: 0 runtime: 4.00s killtime: 2.00s mutations/s: 0.50\n"
128
- end
129
-
130
- context 'when mutation is NOT successful' do
131
- with(:mutation_a_test_result) { { passed: true } }
132
-
133
- it_reports "progress: 02/02 alive: 1 runtime: 4.00s killtime: 2.00s mutations/s: 0.50\n"
134
- end
135
- end
136
- end
137
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Reporter::Null do
4
- let(:object) { described_class.new }
5
- let(:value) { instance_double(Object) }
6
-
7
- %i[progress report start warn].each do |name|
8
- describe "##{name}" do
9
- subject { object.public_send(name, value) }
10
-
11
- it_should_behave_like 'a command method'
12
- end
13
- end
14
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Reporter::Sequence do
4
- let(:object) { described_class.new([reporter_a, reporter_b]) }
5
- let(:value) { instance_double(Object) }
6
- let(:reporter_a) { instance_double(Mutant::Reporter, delay: 1.0) }
7
- let(:reporter_b) { instance_double(Mutant::Reporter, delay: 2.0) }
8
-
9
- %i[report progress warn start].each do |name|
10
- describe "##{name}" do
11
- subject { object.public_send(name, value) }
12
-
13
- before do
14
- [reporter_a, reporter_b].each do |receiver|
15
- expect(receiver).to receive(name)
16
- .ordered
17
- .with(value)
18
- .and_return(receiver)
19
- end
20
- end
21
-
22
- it_should_behave_like 'a command method'
23
- end
24
- end
25
-
26
- describe '#delay' do
27
- it 'returns the lowest value' do
28
- expect(object.delay).to eql(1.0)
29
- end
30
- end
31
- end
@@ -1,180 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe Mutant::Repository::Diff::Ranges do
4
- describe '.parse' do
5
- def apply
6
- described_class.parse(diff)
7
- end
8
-
9
- let(:diff) do
10
- Tempfile.open('old') do |old_file|
11
- old_file.write(old)
12
- old_file.flush
13
- Tempfile.open('new') do |new_file|
14
- new_file.write(new)
15
- new_file.flush
16
- # rubocop:disable Lint/RedundantSplatExpansion
17
- stdout, status = Open3.capture2(
18
- *%W[
19
- git
20
- diff
21
- --no-index
22
- --unified=0
23
- --
24
- #{old_file.path}
25
- #{new_file.path}
26
- ]
27
- )
28
- # rubocop:enable Lint/RedundantSplatExpansion
29
-
30
- fail unless [0, 256].include?(status.to_i)
31
-
32
- stdout
33
- end
34
- end
35
- end
36
-
37
- context 'on empty diff' do
38
- let(:old) { '' }
39
- let(:new) { '' }
40
-
41
- it 'returns emtpy set' do
42
- expect(apply).to eql(Set.new)
43
- end
44
- end
45
-
46
- context 'on empty old' do
47
- let(:old) { '' }
48
-
49
- context 'adding a single line' do
50
- let(:new) do
51
- <<~'STR'
52
- a
53
- STR
54
- end
55
-
56
- it 'returns expected set' do
57
- expect(apply).to eql([1..1].to_set)
58
- end
59
- end
60
-
61
- context 'adding a multiple lines' do
62
- let(:old) { '' }
63
-
64
- let(:new) do
65
- <<~'STR'
66
- a
67
- b
68
- STR
69
- end
70
-
71
- it 'returns expected set' do
72
- expect(apply).to eql([1..2].to_set)
73
- end
74
- end
75
- end
76
-
77
- context 'on empty new' do
78
- let(:new) { '' }
79
-
80
- context 'removing a single line' do
81
- let(:old) do
82
- <<~'STR'
83
- a
84
- STR
85
- end
86
-
87
- it 'returns expected set' do
88
- expect(apply).to eql([1..1].to_set)
89
- end
90
- end
91
-
92
- context 'removing a multiple lines' do
93
- let(:old) do
94
- <<~'STR'
95
- a
96
- b
97
- STR
98
- end
99
-
100
- it 'returns expected set' do
101
- expect(apply).to eql([1..2].to_set)
102
- end
103
- end
104
- end
105
-
106
- context 'single line modification' do
107
- let(:old) do
108
- <<~'STR'
109
- a
110
- b
111
- c
112
- a
113
- STR
114
- end
115
-
116
- let(:new) do
117
- <<~'STR'
118
- a
119
- b
120
- b
121
- a
122
- STR
123
- end
124
-
125
- it 'returns expected set' do
126
- expect(apply).to eql([3..3].to_set)
127
- end
128
- end
129
-
130
- context 'nonempty old and new' do
131
- context 'single line addition' do
132
- let(:old) do
133
- <<~'STR'
134
- a
135
- b
136
- a
137
- STR
138
- end
139
-
140
- let(:new) do
141
- <<~'STR'
142
- a
143
- b
144
- b
145
- a
146
- STR
147
- end
148
-
149
- it 'returns expected set' do
150
- expect(apply).to eql([3..3].to_set)
151
- end
152
- end
153
- context 'multi line modification' do
154
- let(:old) do
155
- <<~'STR'
156
- a
157
- b
158
- c
159
- d
160
- a
161
- STR
162
- end
163
-
164
- let(:new) do
165
- <<~'STR'
166
- a
167
- b
168
- b
169
- b
170
- a
171
- STR
172
- end
173
-
174
- it 'returns expected set' do
175
- expect(apply).to eql([3..4].to_set)
176
- end
177
- end
178
- end
179
- end
180
- end