mutant 0.9.10 → 0.10.0

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 (254) hide show
  1. checksums.yaml +4 -4
  2. data/bin/mutant +16 -11
  3. data/lib/mutant.rb +8 -4
  4. data/lib/mutant/bootstrap.rb +14 -1
  5. data/lib/mutant/cli.rb +9 -162
  6. data/lib/mutant/cli/command.rb +196 -0
  7. data/lib/mutant/cli/command/root.rb +13 -0
  8. data/lib/mutant/cli/command/run.rb +151 -0
  9. data/lib/mutant/cli/command/subscription.rb +54 -0
  10. data/lib/mutant/expression.rb +0 -1
  11. data/lib/mutant/isolation.rb +1 -1
  12. data/lib/mutant/isolation/fork.rb +2 -2
  13. data/lib/mutant/isolation/none.rb +1 -1
  14. data/lib/mutant/license.rb +9 -35
  15. data/lib/mutant/license/subscription.rb +31 -9
  16. data/lib/mutant/license/subscription/commercial.rb +2 -4
  17. data/lib/mutant/license/subscription/opensource.rb +7 -7
  18. data/lib/mutant/matcher/config.rb +2 -0
  19. data/lib/mutant/meta/example.rb +16 -4
  20. data/lib/mutant/meta/example/dsl.rb +33 -16
  21. data/lib/mutant/meta/example/verification.rb +70 -28
  22. data/lib/mutant/minitest/coverage.rb +53 -0
  23. data/lib/mutant/mutator/node.rb +2 -2
  24. data/lib/mutant/mutator/node/block_pass.rb +29 -0
  25. data/lib/mutant/mutator/node/{dstr.rb → dynamic_literal.rb} +7 -5
  26. data/lib/mutant/mutator/node/index.rb +4 -4
  27. data/lib/mutant/mutator/node/literal/range.rb +5 -2
  28. data/lib/mutant/mutator/node/named_value/variable_assignment.rb +1 -1
  29. data/lib/mutant/mutator/node/noop.rb +1 -1
  30. data/lib/mutant/mutator/node/op_asgn.rb +15 -1
  31. data/lib/mutant/mutator/node/send.rb +25 -1
  32. data/lib/mutant/mutator/node/send/attribute_assignment.rb +1 -0
  33. data/lib/mutant/reporter/cli/printer/isolation_result.rb +9 -3
  34. data/lib/mutant/subject/method/instance.rb +1 -1
  35. data/lib/mutant/version.rb +1 -1
  36. metadata +18 -336
  37. data/.github/workflows/ci.yml +0 -121
  38. data/.gitignore +0 -38
  39. data/.rspec +0 -5
  40. data/.rubocop.yml +0 -210
  41. data/Changelog.md +0 -87
  42. data/Gemfile +0 -7
  43. data/Gemfile.lock +0 -107
  44. data/Gemfile.shared +0 -10
  45. data/README.md +0 -199
  46. data/Rakefile +0 -5
  47. data/config/devtools.yml +0 -2
  48. data/config/reek.yml +0 -139
  49. data/config/yardstick.yml +0 -2
  50. data/docs/commercial-support.md +0 -14
  51. data/docs/concurrency.md +0 -39
  52. data/docs/incremental.md +0 -76
  53. data/docs/known-problems.md +0 -30
  54. data/docs/limitations.md +0 -50
  55. data/docs/mutant-minitest.md +0 -149
  56. data/docs/mutant-rspec.md +0 -130
  57. data/docs/nomenclature.md +0 -82
  58. data/docs/reading-reports.md +0 -74
  59. data/lib/mutant/mutator/node/dsym.rb +0 -22
  60. data/meta/and.rb +0 -13
  61. data/meta/and_asgn.rb +0 -14
  62. data/meta/array.rb +0 -27
  63. data/meta/begin.rb +0 -20
  64. data/meta/block.rb +0 -199
  65. data/meta/block_pass.rb +0 -8
  66. data/meta/blockarg.rb +0 -10
  67. data/meta/break.rb +0 -9
  68. data/meta/case.rb +0 -217
  69. data/meta/casgn.rb +0 -25
  70. data/meta/cbase.rb +0 -8
  71. data/meta/class.rb +0 -12
  72. data/meta/const.rb +0 -17
  73. data/meta/csend.rb +0 -10
  74. data/meta/cvar.rb +0 -7
  75. data/meta/cvasgn.rb +0 -9
  76. data/meta/date.rb +0 -59
  77. data/meta/def.rb +0 -196
  78. data/meta/defined.rb +0 -9
  79. data/meta/dstr.rb +0 -13
  80. data/meta/dsym.rb +0 -14
  81. data/meta/ensure.rb +0 -8
  82. data/meta/false.rb +0 -7
  83. data/meta/file.rb +0 -5
  84. data/meta/float.rb +0 -37
  85. data/meta/gvar.rb +0 -7
  86. data/meta/gvasgn.rb +0 -9
  87. data/meta/hash.rb +0 -20
  88. data/meta/if.rb +0 -72
  89. data/meta/index.rb +0 -133
  90. data/meta/indexasgn.rb +0 -31
  91. data/meta/int.rb +0 -18
  92. data/meta/ivar.rb +0 -8
  93. data/meta/ivasgn.rb +0 -22
  94. data/meta/kwarg.rb +0 -10
  95. data/meta/kwbegin.rb +0 -8
  96. data/meta/kwoptarg.rb +0 -13
  97. data/meta/lambda.rb +0 -23
  98. data/meta/line.rb +0 -5
  99. data/meta/lvar.rb +0 -16
  100. data/meta/lvasgn.rb +0 -24
  101. data/meta/masgn.rb +0 -7
  102. data/meta/match_current_line.rb +0 -14
  103. data/meta/next.rb +0 -10
  104. data/meta/nil.rb +0 -5
  105. data/meta/nthref.rb +0 -14
  106. data/meta/op_assgn.rb +0 -17
  107. data/meta/or.rb +0 -13
  108. data/meta/or_asgn.rb +0 -50
  109. data/meta/range.rb +0 -65
  110. data/meta/redo.rb +0 -5
  111. data/meta/regexp.rb +0 -80
  112. data/meta/regopt.rb +0 -10
  113. data/meta/rescue.rb +0 -84
  114. data/meta/return.rb +0 -16
  115. data/meta/sclass.rb +0 -12
  116. data/meta/self.rb +0 -7
  117. data/meta/send.rb +0 -600
  118. data/meta/str.rb +0 -7
  119. data/meta/super.rb +0 -27
  120. data/meta/sym.rb +0 -8
  121. data/meta/true.rb +0 -7
  122. data/meta/until.rb +0 -16
  123. data/meta/while.rb +0 -24
  124. data/meta/yield.rb +0 -9
  125. data/mutant-minitest.gemspec +0 -22
  126. data/mutant-rspec.gemspec +0 -22
  127. data/mutant.gemspec +0 -44
  128. data/mutant.sh +0 -12
  129. data/mutant.yml +0 -6
  130. data/spec/integration/mutant/corpus_spec.rb +0 -15
  131. data/spec/integration/mutant/isolation/fork_spec.rb +0 -28
  132. data/spec/integration/mutant/minitest_spec.rb +0 -11
  133. data/spec/integration/mutant/null_spec.rb +0 -16
  134. data/spec/integration/mutant/rspec_spec.rb +0 -15
  135. data/spec/integration/mutant/test_mutator_handles_types_spec.rb +0 -9
  136. data/spec/integrations.yml +0 -63
  137. data/spec/shared/framework_integration_behavior.rb +0 -70
  138. data/spec/shared/method_matcher_behavior.rb +0 -47
  139. data/spec/spec_helper.rb +0 -90
  140. data/spec/support/corpus.rb +0 -318
  141. data/spec/support/file_system.rb +0 -62
  142. data/spec/support/ice_nine_config.rb +0 -10
  143. data/spec/support/ruby_vm.rb +0 -84
  144. data/spec/support/shared_context.rb +0 -169
  145. data/spec/support/xspec.rb +0 -183
  146. data/spec/unit/mutant/ast/find_metaclass_containing_spec.rb +0 -64
  147. data/spec/unit/mutant/ast/meta/optarg_spec.rb +0 -24
  148. data/spec/unit/mutant/ast/meta/send/proc_predicate_spec.rb +0 -30
  149. data/spec/unit/mutant/ast/meta/send/receiver_possible_top_level_const_predicate_spec.rb +0 -39
  150. data/spec/unit/mutant/ast/meta/send_spec.rb +0 -42
  151. data/spec/unit/mutant/ast/named_children_spec.rb +0 -89
  152. data/spec/unit/mutant/ast/sexp_spec.rb +0 -38
  153. data/spec/unit/mutant/ast_spec.rb +0 -57
  154. data/spec/unit/mutant/bootstrap_spec.rb +0 -216
  155. data/spec/unit/mutant/cli_spec.rb +0 -305
  156. data/spec/unit/mutant/clock_monotonic_spec.rb +0 -52
  157. data/spec/unit/mutant/config_spec.rb +0 -126
  158. data/spec/unit/mutant/context_spec.rb +0 -111
  159. data/spec/unit/mutant/env_spec.rb +0 -229
  160. data/spec/unit/mutant/expression/method_spec.rb +0 -62
  161. data/spec/unit/mutant/expression/methods_spec.rb +0 -66
  162. data/spec/unit/mutant/expression/namespace/exact_spec.rb +0 -28
  163. data/spec/unit/mutant/expression/namespace/recursive_spec.rb +0 -66
  164. data/spec/unit/mutant/expression/parser_spec.rb +0 -65
  165. data/spec/unit/mutant/expression_spec.rb +0 -45
  166. data/spec/unit/mutant/integration/rspec_spec.rb +0 -201
  167. data/spec/unit/mutant/integration_spec.rb +0 -150
  168. data/spec/unit/mutant/isolation/fork_spec.rb +0 -309
  169. data/spec/unit/mutant/isolation/none_spec.rb +0 -23
  170. data/spec/unit/mutant/isolation/result_spec.rb +0 -73
  171. data/spec/unit/mutant/license_spec.rb +0 -305
  172. data/spec/unit/mutant/loader_spec.rb +0 -79
  173. data/spec/unit/mutant/matcher/chain_spec.rb +0 -26
  174. data/spec/unit/mutant/matcher/compiler_spec.rb +0 -0
  175. data/spec/unit/mutant/matcher/config_spec.rb +0 -47
  176. data/spec/unit/mutant/matcher/filter_spec.rb +0 -22
  177. data/spec/unit/mutant/matcher/method/instance_spec.rb +0 -164
  178. data/spec/unit/mutant/matcher/method/metaclass_spec.rb +0 -108
  179. data/spec/unit/mutant/matcher/method/singleton_spec.rb +0 -90
  180. data/spec/unit/mutant/matcher/methods/instance_spec.rb +0 -54
  181. data/spec/unit/mutant/matcher/methods/metaclass_spec.rb +0 -62
  182. data/spec/unit/mutant/matcher/methods/singleton_spec.rb +0 -51
  183. data/spec/unit/mutant/matcher/namespace_spec.rb +0 -39
  184. data/spec/unit/mutant/matcher/null_spec.rb +0 -12
  185. data/spec/unit/mutant/matcher/scope_spec.rb +0 -45
  186. data/spec/unit/mutant/matcher/static_spec.rb +0 -13
  187. data/spec/unit/mutant/matcher_spec.rb +0 -102
  188. data/spec/unit/mutant/meta/example/dsl_spec.rb +0 -108
  189. data/spec/unit/mutant/meta/example/verification_spec.rb +0 -154
  190. data/spec/unit/mutant/meta/example_spec.rb +0 -34
  191. data/spec/unit/mutant/mutation_spec.rb +0 -140
  192. data/spec/unit/mutant/mutator/node_spec.rb +0 -47
  193. data/spec/unit/mutant/mutator_spec.rb +0 -21
  194. data/spec/unit/mutant/parallel/driver_spec.rb +0 -126
  195. data/spec/unit/mutant/parallel/source/array_spec.rb +0 -57
  196. data/spec/unit/mutant/parallel/worker_spec.rb +0 -206
  197. data/spec/unit/mutant/parallel_spec.rb +0 -115
  198. data/spec/unit/mutant/parser_spec.rb +0 -26
  199. data/spec/unit/mutant/range_spec.rb +0 -141
  200. data/spec/unit/mutant/registry_spec.rb +0 -74
  201. data/spec/unit/mutant/reporter/cli/printer/config_spec.rb +0 -17
  202. data/spec/unit/mutant/reporter/cli/printer/env_progress_spec.rb +0 -85
  203. data/spec/unit/mutant/reporter/cli/printer/env_result_spec.rb +0 -45
  204. data/spec/unit/mutant/reporter/cli/printer/isolation_result_spec.rb +0 -132
  205. data/spec/unit/mutant/reporter/cli/printer/mutation_progress_result_spec.rb +0 -25
  206. data/spec/unit/mutant/reporter/cli/printer/mutation_result_spec.rb +0 -153
  207. data/spec/unit/mutant/reporter/cli/printer/status_progressive_spec.rb +0 -45
  208. data/spec/unit/mutant/reporter/cli/printer/subject_progress_spec.rb +0 -36
  209. data/spec/unit/mutant/reporter/cli/printer/subject_result_spec.rb +0 -44
  210. data/spec/unit/mutant/reporter/cli/printer/test_result_spec.rb +0 -16
  211. data/spec/unit/mutant/reporter/cli/printer_spec.rb +0 -163
  212. data/spec/unit/mutant/reporter/cli_spec.rb +0 -137
  213. data/spec/unit/mutant/reporter/null_spec.rb +0 -14
  214. data/spec/unit/mutant/reporter/sequence_spec.rb +0 -31
  215. data/spec/unit/mutant/repository/diff/ranges_spec.rb +0 -180
  216. data/spec/unit/mutant/repository/diff_spec.rb +0 -122
  217. data/spec/unit/mutant/repository/subject_filter_spec.rb +0 -30
  218. data/spec/unit/mutant/require_highjack_spec.rb +0 -73
  219. data/spec/unit/mutant/result/class_methods_spec.rb +0 -51
  220. data/spec/unit/mutant/result/env_spec.rb +0 -161
  221. data/spec/unit/mutant/result/mutation_spec.rb +0 -70
  222. data/spec/unit/mutant/result/subject_spec.rb +0 -111
  223. data/spec/unit/mutant/result/test_spec.rb +0 -14
  224. data/spec/unit/mutant/result_spec.rb +0 -33
  225. data/spec/unit/mutant/runner/sink_spec.rb +0 -174
  226. data/spec/unit/mutant/runner_spec.rb +0 -121
  227. data/spec/unit/mutant/selector/expression_spec.rb +0 -62
  228. data/spec/unit/mutant/selector/null_spec.rb +0 -17
  229. data/spec/unit/mutant/subject/method/instance_spec.rb +0 -276
  230. data/spec/unit/mutant/subject/method/metaclass_spec.rb +0 -63
  231. data/spec/unit/mutant/subject/method/singleton_spec.rb +0 -61
  232. data/spec/unit/mutant/subject_spec.rb +0 -93
  233. data/spec/unit/mutant/transform/array_spec.rb +0 -92
  234. data/spec/unit/mutant/transform/bool_spec.rb +0 -63
  235. data/spec/unit/mutant/transform/error_spec.rb +0 -132
  236. data/spec/unit/mutant/transform/exception_spec.rb +0 -44
  237. data/spec/unit/mutant/transform/hash_spec.rb +0 -236
  238. data/spec/unit/mutant/transform/index_spec.rb +0 -92
  239. data/spec/unit/mutant/transform/named_spec.rb +0 -49
  240. data/spec/unit/mutant/transform/primitive_spec.rb +0 -56
  241. data/spec/unit/mutant/transform/sequence_spec.rb +0 -98
  242. data/spec/unit/mutant/util/one_spec.rb +0 -22
  243. data/spec/unit/mutant/warnings_spec.rb +0 -89
  244. data/spec/unit/mutant/world_spec.rb +0 -63
  245. data/spec/unit/mutant/zombifier_spec.rb +0 -122
  246. data/test_app/.rspec +0 -1
  247. data/test_app/Gemfile.minitest +0 -6
  248. data/test_app/Gemfile.rspec3.8 +0 -7
  249. data/test_app/lib/test_app.rb +0 -114
  250. data/test_app/lib/test_app/literal.rb +0 -35
  251. data/test_app/lib/test_app/metaclasses.rb +0 -108
  252. data/test_app/spec/spec_helper.rb +0 -9
  253. data/test_app/spec/unit/test_app/literal_spec.rb +0 -20
  254. data/test_app/test/unit/test_app/literal_test.rb +0 -16
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Parser do
4
- let(:object) { described_class.new }
5
-
6
- describe '#call' do
7
- let(:path) { instance_double(Pathname) }
8
-
9
- subject { object.call(path) }
10
-
11
- before do
12
- expect(path).to receive(:read)
13
- .with(no_args)
14
- .and_return(':source')
15
- end
16
-
17
- it 'returns parsed source' do
18
- expect(subject).to eql(s(:sym, :source))
19
- end
20
-
21
- it 'is idempotent' do
22
- source = object.call(path)
23
- expect(subject).to be(source)
24
- end
25
- end
26
- end
@@ -1,141 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe Mutant::Range do
4
- describe '.overlap?' do
5
- def apply
6
- described_class.overlap?(left, right)
7
- end
8
-
9
- context 'no overlap left before right' do
10
- # |---|
11
- # |---|
12
- let(:left) { 1..2 }
13
- let(:right) { 3..4 }
14
-
15
- it 'returns false' do
16
- expect(apply).to be(false)
17
- end
18
- end
19
-
20
- context 'no overlap right before left' do
21
- # |---|
22
- # |---|
23
- let(:left) { 3..4 }
24
- let(:right) { 1..2 }
25
-
26
- it 'returns false' do
27
- expect(apply).to be(false)
28
- end
29
- end
30
-
31
- context 'left includes right' do
32
- # |----------------|
33
- # |---|
34
- let(:left) { 1..4 }
35
- let(:right) { 2..3 }
36
-
37
- it 'returns true' do
38
- expect(apply).to be(true)
39
- end
40
- end
41
-
42
- context 'right includes left' do
43
- # |---|
44
- # |----------------|
45
- let(:left) { 2..3 }
46
- let(:right) { 1..4 }
47
-
48
- it 'returns true' do
49
- expect(apply).to be(true)
50
- end
51
- end
52
-
53
- context 'right starts with left end' do
54
- # |----|
55
- # |----|
56
- let(:left) { 1..2 }
57
- let(:right) { 2..3 }
58
-
59
- it 'returns true' do
60
- expect(apply).to be(true)
61
- end
62
- end
63
-
64
- context 'left starts with right end' do
65
- # |----|
66
- # |----|
67
- let(:left) { 2..3 }
68
- let(:right) { 1..2 }
69
-
70
- it 'returns true' do
71
- expect(apply).to be(true)
72
- end
73
- end
74
-
75
- context 'left starts with right start' do
76
- # |----|
77
- # |---------|
78
- let(:left) { 1..2 }
79
- let(:right) { 1..3 }
80
-
81
- it 'returns true' do
82
- expect(apply).to be(true)
83
- end
84
- end
85
-
86
- context 'left starts with right start' do
87
- # |---------|
88
- # |----|
89
- let(:left) { 1..3 }
90
- let(:right) { 1..2 }
91
-
92
- it 'returns true' do
93
- expect(apply).to be(true)
94
- end
95
- end
96
-
97
- context 'left ends with right end' do
98
- # |----|
99
- # |---------|
100
- let(:left) { 2..3 }
101
- let(:right) { 1..3 }
102
-
103
- it 'returns true' do
104
- expect(apply).to be(true)
105
- end
106
- end
107
-
108
- context 'right ends with left end' do
109
- # |---------|
110
- # |----|
111
- let(:left) { 1..3 }
112
- let(:right) { 2..3 }
113
-
114
- it 'returns true' do
115
- expect(apply).to be(true)
116
- end
117
- end
118
-
119
- context 'left end intersects with right' do
120
- # |---------|
121
- # |----------|
122
- let(:left) { 1..3 }
123
- let(:right) { 2..4 }
124
-
125
- it 'returns true' do
126
- expect(apply).to be(true)
127
- end
128
- end
129
-
130
- context 'right end intersects with left' do
131
- # |----------|
132
- # |---------|
133
- let(:left) { 2..4 }
134
- let(:right) { 1..2 }
135
-
136
- it 'returns true' do
137
- expect(apply).to be(true)
138
- end
139
- end
140
- end
141
- end
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Registry do
4
- let(:mutator) { class_double(Mutant::Mutator) }
5
- let(:object) { described_class.new }
6
-
7
- describe '#lookup' do
8
- subject { object.lookup(type) }
9
-
10
- def register
11
- object.register(type, mutator)
12
- end
13
-
14
- context 'on known type' do
15
- let(:type) { :true }
16
-
17
- it 'returns registered' do
18
- register
19
- expect(subject).to be(mutator)
20
- end
21
- end
22
-
23
- context 'on unknown type' do
24
- let(:type) { :unknown }
25
-
26
- it 'returns genericm mutator' do
27
- expect(subject).to be(Mutant::Mutator::Node::Generic)
28
- end
29
- end
30
- end
31
-
32
- describe '#register' do
33
- subject { object.register(type, mutator) }
34
-
35
- def lookup
36
- subject.lookup(type)
37
- end
38
-
39
- context 'on registered type' do
40
- let(:type) { :true }
41
-
42
- it_behaves_like 'a command method'
43
-
44
- it 'allows to lookup the mutator' do
45
- subject
46
- expect(lookup).to be(mutator)
47
- end
48
-
49
- context 'when registering twice' do
50
- it 'fails upon registration' do
51
- object.register(type, mutator)
52
-
53
- expect { subject }
54
- .to raise_error(
55
- described_class::RegistryError,
56
- 'Duplicate type registration: :true'
57
- )
58
- end
59
- end
60
- end
61
-
62
- context 'when registering an invalid node type' do
63
- let(:type) { :invalid }
64
-
65
- it 'raises error' do
66
- expect { subject }
67
- .to raise_error(
68
- described_class::RegistryError,
69
- 'Invalid type registration: :invalid'
70
- )
71
- end
72
- end
73
- end
74
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Reporter::CLI::Printer::Config do
4
- setup_shared_context
5
-
6
- let(:reportable) { config }
7
-
8
- describe '.call' do
9
- it_reports(<<~'REPORT')
10
- Matcher: #<Mutant::Matcher::Config empty>
11
- Integration: null
12
- Jobs: 1
13
- Includes: []
14
- Requires: []
15
- REPORT
16
- end
17
- end
@@ -1,85 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Reporter::CLI::Printer::EnvProgress do
4
- setup_shared_context
5
-
6
- let(:reportable) { env_result }
7
-
8
- describe '.call' do
9
- context 'without progress' do
10
- with(:subject_a_result) { { mutation_results: [] } }
11
-
12
- it_reports <<~'STR'
13
- Mutant environment:
14
- Matcher: #<Mutant::Matcher::Config empty>
15
- Integration: null
16
- Jobs: 1
17
- Includes: []
18
- Requires: []
19
- Subjects: 1
20
- Total-Tests: 1
21
- Selected-Tests: 1
22
- Tests/Subject: 1.00 avg
23
- Mutations: 2
24
- Results: 0
25
- Kills: 0
26
- Alive: 0
27
- Runtime: 4.00s
28
- Killtime: 0.00s
29
- Overhead: Inf%
30
- Mutations/s: 0.00
31
- Coverage: 100.00%
32
- STR
33
- end
34
-
35
- context 'on full coverage' do
36
- it_reports <<~'STR'
37
- Mutant environment:
38
- Matcher: #<Mutant::Matcher::Config empty>
39
- Integration: null
40
- Jobs: 1
41
- Includes: []
42
- Requires: []
43
- Subjects: 1
44
- Total-Tests: 1
45
- Selected-Tests: 1
46
- Tests/Subject: 1.00 avg
47
- Mutations: 2
48
- Results: 2
49
- Kills: 2
50
- Alive: 0
51
- Runtime: 4.00s
52
- Killtime: 2.00s
53
- Overhead: 100.00%
54
- Mutations/s: 0.50
55
- Coverage: 100.00%
56
- STR
57
- end
58
-
59
- context 'on partial coverage' do
60
- with(:mutation_a_test_result) { { passed: true } }
61
-
62
- it_reports <<~'STR'
63
- Mutant environment:
64
- Matcher: #<Mutant::Matcher::Config empty>
65
- Integration: null
66
- Jobs: 1
67
- Includes: []
68
- Requires: []
69
- Subjects: 1
70
- Total-Tests: 1
71
- Selected-Tests: 1
72
- Tests/Subject: 1.00 avg
73
- Mutations: 2
74
- Results: 2
75
- Kills: 1
76
- Alive: 1
77
- Runtime: 4.00s
78
- Killtime: 2.00s
79
- Overhead: 100.00%
80
- Mutations/s: 0.50
81
- Coverage: 50.00%
82
- STR
83
- end
84
- end
85
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Reporter::CLI::Printer::EnvResult do
4
- setup_shared_context
5
-
6
- with(:mutation_a_test_result) { { passed: true } }
7
-
8
- let(:reportable) { env_result }
9
-
10
- describe '.call' do
11
- it_reports <<~'STR'
12
- subject-a
13
- - test-a
14
- evil:subject-a:d27d2
15
- @@ -1 +1 @@
16
- -true
17
- +false
18
- -----------------------
19
- - 1 @ runtime: 1.0
20
- - test-a
21
- Test Output:
22
- mutation a test result output
23
- -----------------------
24
- Mutant environment:
25
- Matcher: #<Mutant::Matcher::Config empty>
26
- Integration: null
27
- Jobs: 1
28
- Includes: []
29
- Requires: []
30
- Subjects: 1
31
- Total-Tests: 1
32
- Selected-Tests: 1
33
- Tests/Subject: 1.00 avg
34
- Mutations: 2
35
- Results: 2
36
- Kills: 1
37
- Alive: 1
38
- Runtime: 4.00s
39
- Killtime: 2.00s
40
- Overhead: 100.00%
41
- Mutations/s: 0.50
42
- Coverage: 50.00%
43
- STR
44
- end
45
- end
@@ -1,132 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Reporter::CLI::Printer::IsolationResult do
4
- setup_shared_context
5
-
6
- describe '.call' do
7
- context 'on sucessful isolation' do
8
- let(:reportable) do
9
- Mutant::Isolation::Result::Success.new(mutation_a_test_result)
10
- end
11
-
12
- it_reports <<~'STR'
13
- - 1 @ runtime: 1.0
14
- - test-a
15
- Test Output:
16
- mutation a test result output
17
- STR
18
- end
19
-
20
- context 'on exception isolation error' do
21
- let(:exception) do
22
- Class.new(RuntimeError) do
23
- def inspect
24
- '<TestException>'
25
- end
26
-
27
- def backtrace
28
- %w[first last]
29
- end
30
- end.new('foo')
31
- end
32
-
33
- let(:reportable) do
34
- Mutant::Isolation::Result::Exception.new(exception)
35
- end
36
-
37
- it_reports <<~'STR'
38
- Killing the mutation resulted in an integration error.
39
- This is the case when the tests selected for the current mutation
40
- did not produce a test result, but instead an exception was raised.
41
-
42
- This may point to the following problems:
43
- * Bug in mutant
44
- * Bug in the ruby interpreter
45
- * Bug in your test suite
46
- * Bug in your test suite under concurrency
47
-
48
- The following exception was raised:
49
-
50
- ```
51
- <TestException>
52
- first
53
- last
54
- ```
55
- STR
56
- end
57
-
58
- context 'on fork isolation error' do
59
- let(:reportable) do
60
- Mutant::Isolation::Fork::ForkError.new
61
- end
62
-
63
- it_reports <<~'STR'
64
- Forking the child process to isolate the mutation in failed.
65
- This meant that either the RubyVM or your OS was under too much
66
- pressure to add another child process.
67
-
68
- Possible solutions are:
69
- * Reduce concurrency
70
- * Reduce locks
71
- STR
72
- end
73
-
74
- context 'on child isolation error' do
75
- let(:reportable) do
76
- Mutant::Isolation::Fork::ChildError.new(
77
- instance_double(
78
- Process::Status,
79
- 'unsuccessful status'
80
- ),
81
- 'log message'
82
- )
83
- end
84
-
85
- it_reports <<~'STR'
86
- Killfork exited nonzero. Its result (if any) was ignored.
87
- Process status:
88
- #<InstanceDouble(Process::Status) "unsuccessful status">
89
- Log messages (combined stderr and stdout):
90
- log message
91
- STR
92
- end
93
-
94
- context 'on child isolation error' do
95
- let(:fork_error) do
96
- Mutant::Isolation::Fork::ForkError.new
97
- end
98
-
99
- let(:child_error) do
100
- Mutant::Isolation::Fork::ChildError.new(
101
- instance_double(
102
- Process::Status,
103
- 'unsuccessful status'
104
- ),
105
- 'log message'
106
- )
107
- end
108
-
109
- let(:reportable) do
110
- Mutant::Isolation::Result::ErrorChain.new(
111
- fork_error,
112
- child_error
113
- )
114
- end
115
-
116
- it_reports <<~'STR'
117
- Forking the child process to isolate the mutation in failed.
118
- This meant that either the RubyVM or your OS was under too much
119
- pressure to add another child process.
120
-
121
- Possible solutions are:
122
- * Reduce concurrency
123
- * Reduce locks
124
- Killfork exited nonzero. Its result (if any) was ignored.
125
- Process status:
126
- #<InstanceDouble(Process::Status) "unsuccessful status">
127
- Log messages (combined stderr and stdout):
128
- log message
129
- STR
130
- end
131
- end
132
- end