mutant 0.9.9 → 0.9.14

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 (252) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mutant.rb +2 -4
  3. data/lib/mutant/bootstrap.rb +14 -1
  4. data/lib/mutant/cli.rb +6 -0
  5. data/lib/mutant/isolation.rb +1 -1
  6. data/lib/mutant/isolation/fork.rb +2 -2
  7. data/lib/mutant/isolation/none.rb +1 -1
  8. data/lib/mutant/matcher/config.rb +2 -0
  9. data/lib/mutant/meta/example.rb +16 -4
  10. data/lib/mutant/meta/example/dsl.rb +33 -16
  11. data/lib/mutant/meta/example/verification.rb +70 -28
  12. data/lib/mutant/minitest/coverage.rb +53 -0
  13. data/lib/mutant/mutator/node.rb +2 -2
  14. data/lib/mutant/mutator/node/block_pass.rb +29 -0
  15. data/lib/mutant/mutator/node/{dstr.rb → dynamic_literal.rb} +7 -5
  16. data/lib/mutant/mutator/node/index.rb +4 -4
  17. data/lib/mutant/mutator/node/literal/range.rb +4 -1
  18. data/lib/mutant/mutator/node/noop.rb +1 -1
  19. data/lib/mutant/mutator/node/op_asgn.rb +15 -1
  20. data/lib/mutant/mutator/node/send.rb +25 -1
  21. data/lib/mutant/mutator/node/send/attribute_assignment.rb +1 -0
  22. data/lib/mutant/reporter/cli/printer.rb +2 -2
  23. data/lib/mutant/reporter/cli/printer/isolation_result.rb +9 -3
  24. data/lib/mutant/reporter/cli/printer/mutation_result.rb +1 -1
  25. data/lib/mutant/subject/method/instance.rb +41 -2
  26. data/lib/mutant/version.rb +1 -1
  27. metadata +59 -347
  28. data/.github/workflows/ci.yml +0 -121
  29. data/.gitignore +0 -38
  30. data/.rspec +0 -5
  31. data/.rubocop.yml +0 -7
  32. data/Changelog.md +0 -81
  33. data/Gemfile +0 -7
  34. data/Gemfile.lock +0 -167
  35. data/Gemfile.shared +0 -10
  36. data/README.md +0 -178
  37. data/Rakefile +0 -5
  38. data/config/devtools.yml +0 -2
  39. data/config/reek.yml +0 -139
  40. data/config/rubocop.yml +0 -205
  41. data/config/yardstick.yml +0 -2
  42. data/docs/commercial-support.md +0 -14
  43. data/docs/concurrency.md +0 -39
  44. data/docs/incremental.md +0 -76
  45. data/docs/known-problems.md +0 -30
  46. data/docs/limitations.md +0 -50
  47. data/docs/mutant-minitest.md +0 -149
  48. data/docs/mutant-rspec.md +0 -130
  49. data/docs/nomenclature.md +0 -82
  50. data/docs/reading-reports.md +0 -74
  51. data/lib/mutant/color.rb +0 -40
  52. data/lib/mutant/diff.rb +0 -97
  53. data/lib/mutant/mutator/node/dsym.rb +0 -22
  54. data/meta/and.rb +0 -13
  55. data/meta/and_asgn.rb +0 -14
  56. data/meta/array.rb +0 -27
  57. data/meta/begin.rb +0 -20
  58. data/meta/block.rb +0 -199
  59. data/meta/block_pass.rb +0 -8
  60. data/meta/blockarg.rb +0 -10
  61. data/meta/break.rb +0 -9
  62. data/meta/case.rb +0 -217
  63. data/meta/casgn.rb +0 -25
  64. data/meta/cbase.rb +0 -8
  65. data/meta/class.rb +0 -12
  66. data/meta/const.rb +0 -17
  67. data/meta/csend.rb +0 -10
  68. data/meta/cvar.rb +0 -7
  69. data/meta/cvasgn.rb +0 -9
  70. data/meta/date.rb +0 -59
  71. data/meta/def.rb +0 -196
  72. data/meta/defined.rb +0 -9
  73. data/meta/dstr.rb +0 -13
  74. data/meta/dsym.rb +0 -14
  75. data/meta/ensure.rb +0 -8
  76. data/meta/false.rb +0 -7
  77. data/meta/file.rb +0 -5
  78. data/meta/float.rb +0 -37
  79. data/meta/gvar.rb +0 -7
  80. data/meta/gvasgn.rb +0 -9
  81. data/meta/hash.rb +0 -20
  82. data/meta/if.rb +0 -72
  83. data/meta/index.rb +0 -133
  84. data/meta/indexasgn.rb +0 -31
  85. data/meta/int.rb +0 -18
  86. data/meta/ivar.rb +0 -8
  87. data/meta/ivasgn.rb +0 -22
  88. data/meta/kwarg.rb +0 -10
  89. data/meta/kwbegin.rb +0 -8
  90. data/meta/kwoptarg.rb +0 -13
  91. data/meta/lambda.rb +0 -23
  92. data/meta/line.rb +0 -5
  93. data/meta/lvar.rb +0 -16
  94. data/meta/lvasgn.rb +0 -24
  95. data/meta/masgn.rb +0 -7
  96. data/meta/match_current_line.rb +0 -14
  97. data/meta/next.rb +0 -10
  98. data/meta/nil.rb +0 -5
  99. data/meta/nthref.rb +0 -14
  100. data/meta/op_assgn.rb +0 -17
  101. data/meta/or.rb +0 -13
  102. data/meta/or_asgn.rb +0 -50
  103. data/meta/range.rb +0 -39
  104. data/meta/redo.rb +0 -5
  105. data/meta/regexp.rb +0 -80
  106. data/meta/regopt.rb +0 -10
  107. data/meta/rescue.rb +0 -84
  108. data/meta/return.rb +0 -16
  109. data/meta/sclass.rb +0 -12
  110. data/meta/self.rb +0 -7
  111. data/meta/send.rb +0 -600
  112. data/meta/str.rb +0 -7
  113. data/meta/super.rb +0 -27
  114. data/meta/sym.rb +0 -8
  115. data/meta/true.rb +0 -7
  116. data/meta/until.rb +0 -16
  117. data/meta/while.rb +0 -24
  118. data/meta/yield.rb +0 -9
  119. data/mutant-minitest.gemspec +0 -22
  120. data/mutant-rspec.gemspec +0 -22
  121. data/mutant.gemspec +0 -41
  122. data/mutant.sh +0 -12
  123. data/mutant.yml +0 -6
  124. data/spec/integration/mutant/corpus_spec.rb +0 -15
  125. data/spec/integration/mutant/isolation/fork_spec.rb +0 -28
  126. data/spec/integration/mutant/minitest_spec.rb +0 -11
  127. data/spec/integration/mutant/null_spec.rb +0 -16
  128. data/spec/integration/mutant/rspec_spec.rb +0 -15
  129. data/spec/integration/mutant/test_mutator_handles_types_spec.rb +0 -9
  130. data/spec/integrations.yml +0 -63
  131. data/spec/shared/base_behavior.rb +0 -45
  132. data/spec/shared/framework_integration_behavior.rb +0 -70
  133. data/spec/shared/method_matcher_behavior.rb +0 -47
  134. data/spec/spec_helper.rb +0 -75
  135. data/spec/support/corpus.rb +0 -318
  136. data/spec/support/file_system.rb +0 -62
  137. data/spec/support/ice_nine_config.rb +0 -10
  138. data/spec/support/ruby_vm.rb +0 -84
  139. data/spec/support/shared_context.rb +0 -169
  140. data/spec/support/test_app.rb +0 -7
  141. data/spec/support/warnings.yml +0 -6
  142. data/spec/support/xspec.rb +0 -183
  143. data/spec/unit/mutant/ast/find_metaclass_containing_spec.rb +0 -64
  144. data/spec/unit/mutant/ast/meta/optarg_spec.rb +0 -24
  145. data/spec/unit/mutant/ast/meta/send/proc_predicate_spec.rb +0 -30
  146. data/spec/unit/mutant/ast/meta/send/receiver_possible_top_level_const_predicate_spec.rb +0 -39
  147. data/spec/unit/mutant/ast/meta/send_spec.rb +0 -42
  148. data/spec/unit/mutant/ast/named_children_spec.rb +0 -89
  149. data/spec/unit/mutant/ast/sexp_spec.rb +0 -38
  150. data/spec/unit/mutant/ast_spec.rb +0 -57
  151. data/spec/unit/mutant/bootstrap_spec.rb +0 -216
  152. data/spec/unit/mutant/cli_spec.rb +0 -305
  153. data/spec/unit/mutant/clock_monotonic_spec.rb +0 -52
  154. data/spec/unit/mutant/config_spec.rb +0 -126
  155. data/spec/unit/mutant/context_spec.rb +0 -111
  156. data/spec/unit/mutant/diff_spec.rb +0 -189
  157. data/spec/unit/mutant/env_spec.rb +0 -229
  158. data/spec/unit/mutant/expression/method_spec.rb +0 -62
  159. data/spec/unit/mutant/expression/methods_spec.rb +0 -66
  160. data/spec/unit/mutant/expression/namespace/exact_spec.rb +0 -28
  161. data/spec/unit/mutant/expression/namespace/recursive_spec.rb +0 -66
  162. data/spec/unit/mutant/expression/parser_spec.rb +0 -65
  163. data/spec/unit/mutant/expression_spec.rb +0 -45
  164. data/spec/unit/mutant/integration/rspec_spec.rb +0 -201
  165. data/spec/unit/mutant/integration_spec.rb +0 -150
  166. data/spec/unit/mutant/isolation/fork_spec.rb +0 -309
  167. data/spec/unit/mutant/isolation/none_spec.rb +0 -23
  168. data/spec/unit/mutant/isolation/result_spec.rb +0 -73
  169. data/spec/unit/mutant/license_spec.rb +0 -305
  170. data/spec/unit/mutant/loader_spec.rb +0 -79
  171. data/spec/unit/mutant/matcher/chain_spec.rb +0 -26
  172. data/spec/unit/mutant/matcher/compiler_spec.rb +0 -0
  173. data/spec/unit/mutant/matcher/config_spec.rb +0 -47
  174. data/spec/unit/mutant/matcher/filter_spec.rb +0 -22
  175. data/spec/unit/mutant/matcher/method/instance_spec.rb +0 -164
  176. data/spec/unit/mutant/matcher/method/metaclass_spec.rb +0 -108
  177. data/spec/unit/mutant/matcher/method/singleton_spec.rb +0 -90
  178. data/spec/unit/mutant/matcher/methods/instance_spec.rb +0 -54
  179. data/spec/unit/mutant/matcher/methods/metaclass_spec.rb +0 -62
  180. data/spec/unit/mutant/matcher/methods/singleton_spec.rb +0 -51
  181. data/spec/unit/mutant/matcher/namespace_spec.rb +0 -39
  182. data/spec/unit/mutant/matcher/null_spec.rb +0 -12
  183. data/spec/unit/mutant/matcher/scope_spec.rb +0 -45
  184. data/spec/unit/mutant/matcher/static_spec.rb +0 -13
  185. data/spec/unit/mutant/matcher_spec.rb +0 -102
  186. data/spec/unit/mutant/meta/example/dsl_spec.rb +0 -108
  187. data/spec/unit/mutant/meta/example/verification_spec.rb +0 -154
  188. data/spec/unit/mutant/meta/example_spec.rb +0 -34
  189. data/spec/unit/mutant/mutation_spec.rb +0 -140
  190. data/spec/unit/mutant/mutator/node_spec.rb +0 -47
  191. data/spec/unit/mutant/mutator_spec.rb +0 -21
  192. data/spec/unit/mutant/parallel/driver_spec.rb +0 -126
  193. data/spec/unit/mutant/parallel/source/array_spec.rb +0 -57
  194. data/spec/unit/mutant/parallel/worker_spec.rb +0 -206
  195. data/spec/unit/mutant/parallel_spec.rb +0 -115
  196. data/spec/unit/mutant/parser_spec.rb +0 -26
  197. data/spec/unit/mutant/range_spec.rb +0 -141
  198. data/spec/unit/mutant/registry_spec.rb +0 -74
  199. data/spec/unit/mutant/reporter/cli/printer/config_spec.rb +0 -17
  200. data/spec/unit/mutant/reporter/cli/printer/env_progress_spec.rb +0 -85
  201. data/spec/unit/mutant/reporter/cli/printer/env_result_spec.rb +0 -45
  202. data/spec/unit/mutant/reporter/cli/printer/isolation_result_spec.rb +0 -132
  203. data/spec/unit/mutant/reporter/cli/printer/mutation_progress_result_spec.rb +0 -25
  204. data/spec/unit/mutant/reporter/cli/printer/mutation_result_spec.rb +0 -153
  205. data/spec/unit/mutant/reporter/cli/printer/status_progressive_spec.rb +0 -45
  206. data/spec/unit/mutant/reporter/cli/printer/subject_progress_spec.rb +0 -36
  207. data/spec/unit/mutant/reporter/cli/printer/subject_result_spec.rb +0 -44
  208. data/spec/unit/mutant/reporter/cli/printer/test_result_spec.rb +0 -16
  209. data/spec/unit/mutant/reporter/cli/printer_spec.rb +0 -163
  210. data/spec/unit/mutant/reporter/cli_spec.rb +0 -137
  211. data/spec/unit/mutant/reporter/null_spec.rb +0 -14
  212. data/spec/unit/mutant/reporter/sequence_spec.rb +0 -31
  213. data/spec/unit/mutant/repository/diff/ranges_spec.rb +0 -180
  214. data/spec/unit/mutant/repository/diff_spec.rb +0 -122
  215. data/spec/unit/mutant/repository/subject_filter_spec.rb +0 -30
  216. data/spec/unit/mutant/require_highjack_spec.rb +0 -73
  217. data/spec/unit/mutant/result/class_methods_spec.rb +0 -51
  218. data/spec/unit/mutant/result/env_spec.rb +0 -161
  219. data/spec/unit/mutant/result/mutation_spec.rb +0 -70
  220. data/spec/unit/mutant/result/subject_spec.rb +0 -111
  221. data/spec/unit/mutant/result/test_spec.rb +0 -14
  222. data/spec/unit/mutant/result_spec.rb +0 -33
  223. data/spec/unit/mutant/runner/sink_spec.rb +0 -174
  224. data/spec/unit/mutant/runner_spec.rb +0 -121
  225. data/spec/unit/mutant/selector/expression_spec.rb +0 -62
  226. data/spec/unit/mutant/selector/null_spec.rb +0 -17
  227. data/spec/unit/mutant/subject/method/instance_spec.rb +0 -181
  228. data/spec/unit/mutant/subject/method/metaclass_spec.rb +0 -63
  229. data/spec/unit/mutant/subject/method/singleton_spec.rb +0 -61
  230. data/spec/unit/mutant/subject_spec.rb +0 -93
  231. data/spec/unit/mutant/transform/array_spec.rb +0 -92
  232. data/spec/unit/mutant/transform/bool_spec.rb +0 -63
  233. data/spec/unit/mutant/transform/error_spec.rb +0 -132
  234. data/spec/unit/mutant/transform/exception_spec.rb +0 -44
  235. data/spec/unit/mutant/transform/hash_spec.rb +0 -236
  236. data/spec/unit/mutant/transform/index_spec.rb +0 -92
  237. data/spec/unit/mutant/transform/named_spec.rb +0 -49
  238. data/spec/unit/mutant/transform/primitive_spec.rb +0 -56
  239. data/spec/unit/mutant/transform/sequence_spec.rb +0 -98
  240. data/spec/unit/mutant/util/one_spec.rb +0 -22
  241. data/spec/unit/mutant/warnings_spec.rb +0 -89
  242. data/spec/unit/mutant/world_spec.rb +0 -63
  243. data/spec/unit/mutant/zombifier_spec.rb +0 -122
  244. data/test_app/.rspec +0 -1
  245. data/test_app/Gemfile.minitest +0 -4
  246. data/test_app/Gemfile.rspec3.8 +0 -7
  247. data/test_app/lib/test_app.rb +0 -110
  248. data/test_app/lib/test_app/literal.rb +0 -35
  249. data/test_app/lib/test_app/metaclasses.rb +0 -108
  250. data/test_app/spec/spec_helper.rb +0 -9
  251. data/test_app/spec/unit/test_app/literal_spec.rb +0 -20
  252. 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::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
@@ -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