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.
- checksums.yaml +4 -4
- data/lib/mutant.rb +2 -4
- data/lib/mutant/bootstrap.rb +14 -1
- data/lib/mutant/cli.rb +6 -0
- data/lib/mutant/isolation.rb +1 -1
- data/lib/mutant/isolation/fork.rb +2 -2
- data/lib/mutant/isolation/none.rb +1 -1
- data/lib/mutant/matcher/config.rb +2 -0
- data/lib/mutant/meta/example.rb +16 -4
- data/lib/mutant/meta/example/dsl.rb +33 -16
- data/lib/mutant/meta/example/verification.rb +70 -28
- data/lib/mutant/minitest/coverage.rb +53 -0
- data/lib/mutant/mutator/node.rb +2 -2
- data/lib/mutant/mutator/node/block_pass.rb +29 -0
- data/lib/mutant/mutator/node/{dstr.rb → dynamic_literal.rb} +7 -5
- data/lib/mutant/mutator/node/index.rb +4 -4
- data/lib/mutant/mutator/node/literal/range.rb +4 -1
- data/lib/mutant/mutator/node/noop.rb +1 -1
- data/lib/mutant/mutator/node/op_asgn.rb +15 -1
- data/lib/mutant/mutator/node/send.rb +25 -1
- data/lib/mutant/mutator/node/send/attribute_assignment.rb +1 -0
- data/lib/mutant/reporter/cli/printer.rb +2 -2
- data/lib/mutant/reporter/cli/printer/isolation_result.rb +9 -3
- data/lib/mutant/reporter/cli/printer/mutation_result.rb +1 -1
- data/lib/mutant/subject/method/instance.rb +41 -2
- data/lib/mutant/version.rb +1 -1
- metadata +59 -347
- data/.github/workflows/ci.yml +0 -121
- data/.gitignore +0 -38
- data/.rspec +0 -5
- data/.rubocop.yml +0 -7
- data/Changelog.md +0 -81
- data/Gemfile +0 -7
- data/Gemfile.lock +0 -167
- data/Gemfile.shared +0 -10
- data/README.md +0 -178
- data/Rakefile +0 -5
- data/config/devtools.yml +0 -2
- data/config/reek.yml +0 -139
- data/config/rubocop.yml +0 -205
- data/config/yardstick.yml +0 -2
- data/docs/commercial-support.md +0 -14
- data/docs/concurrency.md +0 -39
- data/docs/incremental.md +0 -76
- data/docs/known-problems.md +0 -30
- data/docs/limitations.md +0 -50
- data/docs/mutant-minitest.md +0 -149
- data/docs/mutant-rspec.md +0 -130
- data/docs/nomenclature.md +0 -82
- data/docs/reading-reports.md +0 -74
- data/lib/mutant/color.rb +0 -40
- data/lib/mutant/diff.rb +0 -97
- data/lib/mutant/mutator/node/dsym.rb +0 -22
- data/meta/and.rb +0 -13
- data/meta/and_asgn.rb +0 -14
- data/meta/array.rb +0 -27
- data/meta/begin.rb +0 -20
- data/meta/block.rb +0 -199
- data/meta/block_pass.rb +0 -8
- data/meta/blockarg.rb +0 -10
- data/meta/break.rb +0 -9
- data/meta/case.rb +0 -217
- data/meta/casgn.rb +0 -25
- data/meta/cbase.rb +0 -8
- data/meta/class.rb +0 -12
- data/meta/const.rb +0 -17
- data/meta/csend.rb +0 -10
- data/meta/cvar.rb +0 -7
- data/meta/cvasgn.rb +0 -9
- data/meta/date.rb +0 -59
- data/meta/def.rb +0 -196
- data/meta/defined.rb +0 -9
- data/meta/dstr.rb +0 -13
- data/meta/dsym.rb +0 -14
- data/meta/ensure.rb +0 -8
- data/meta/false.rb +0 -7
- data/meta/file.rb +0 -5
- data/meta/float.rb +0 -37
- data/meta/gvar.rb +0 -7
- data/meta/gvasgn.rb +0 -9
- data/meta/hash.rb +0 -20
- data/meta/if.rb +0 -72
- data/meta/index.rb +0 -133
- data/meta/indexasgn.rb +0 -31
- data/meta/int.rb +0 -18
- data/meta/ivar.rb +0 -8
- data/meta/ivasgn.rb +0 -22
- data/meta/kwarg.rb +0 -10
- data/meta/kwbegin.rb +0 -8
- data/meta/kwoptarg.rb +0 -13
- data/meta/lambda.rb +0 -23
- data/meta/line.rb +0 -5
- data/meta/lvar.rb +0 -16
- data/meta/lvasgn.rb +0 -24
- data/meta/masgn.rb +0 -7
- data/meta/match_current_line.rb +0 -14
- data/meta/next.rb +0 -10
- data/meta/nil.rb +0 -5
- data/meta/nthref.rb +0 -14
- data/meta/op_assgn.rb +0 -17
- data/meta/or.rb +0 -13
- data/meta/or_asgn.rb +0 -50
- data/meta/range.rb +0 -39
- data/meta/redo.rb +0 -5
- data/meta/regexp.rb +0 -80
- data/meta/regopt.rb +0 -10
- data/meta/rescue.rb +0 -84
- data/meta/return.rb +0 -16
- data/meta/sclass.rb +0 -12
- data/meta/self.rb +0 -7
- data/meta/send.rb +0 -600
- data/meta/str.rb +0 -7
- data/meta/super.rb +0 -27
- data/meta/sym.rb +0 -8
- data/meta/true.rb +0 -7
- data/meta/until.rb +0 -16
- data/meta/while.rb +0 -24
- data/meta/yield.rb +0 -9
- data/mutant-minitest.gemspec +0 -22
- data/mutant-rspec.gemspec +0 -22
- data/mutant.gemspec +0 -41
- data/mutant.sh +0 -12
- data/mutant.yml +0 -6
- data/spec/integration/mutant/corpus_spec.rb +0 -15
- data/spec/integration/mutant/isolation/fork_spec.rb +0 -28
- data/spec/integration/mutant/minitest_spec.rb +0 -11
- data/spec/integration/mutant/null_spec.rb +0 -16
- data/spec/integration/mutant/rspec_spec.rb +0 -15
- data/spec/integration/mutant/test_mutator_handles_types_spec.rb +0 -9
- data/spec/integrations.yml +0 -63
- data/spec/shared/base_behavior.rb +0 -45
- data/spec/shared/framework_integration_behavior.rb +0 -70
- data/spec/shared/method_matcher_behavior.rb +0 -47
- data/spec/spec_helper.rb +0 -75
- data/spec/support/corpus.rb +0 -318
- data/spec/support/file_system.rb +0 -62
- data/spec/support/ice_nine_config.rb +0 -10
- data/spec/support/ruby_vm.rb +0 -84
- data/spec/support/shared_context.rb +0 -169
- data/spec/support/test_app.rb +0 -7
- data/spec/support/warnings.yml +0 -6
- data/spec/support/xspec.rb +0 -183
- data/spec/unit/mutant/ast/find_metaclass_containing_spec.rb +0 -64
- data/spec/unit/mutant/ast/meta/optarg_spec.rb +0 -24
- data/spec/unit/mutant/ast/meta/send/proc_predicate_spec.rb +0 -30
- data/spec/unit/mutant/ast/meta/send/receiver_possible_top_level_const_predicate_spec.rb +0 -39
- data/spec/unit/mutant/ast/meta/send_spec.rb +0 -42
- data/spec/unit/mutant/ast/named_children_spec.rb +0 -89
- data/spec/unit/mutant/ast/sexp_spec.rb +0 -38
- data/spec/unit/mutant/ast_spec.rb +0 -57
- data/spec/unit/mutant/bootstrap_spec.rb +0 -216
- data/spec/unit/mutant/cli_spec.rb +0 -305
- data/spec/unit/mutant/clock_monotonic_spec.rb +0 -52
- data/spec/unit/mutant/config_spec.rb +0 -126
- data/spec/unit/mutant/context_spec.rb +0 -111
- data/spec/unit/mutant/diff_spec.rb +0 -189
- data/spec/unit/mutant/env_spec.rb +0 -229
- data/spec/unit/mutant/expression/method_spec.rb +0 -62
- data/spec/unit/mutant/expression/methods_spec.rb +0 -66
- data/spec/unit/mutant/expression/namespace/exact_spec.rb +0 -28
- data/spec/unit/mutant/expression/namespace/recursive_spec.rb +0 -66
- data/spec/unit/mutant/expression/parser_spec.rb +0 -65
- data/spec/unit/mutant/expression_spec.rb +0 -45
- data/spec/unit/mutant/integration/rspec_spec.rb +0 -201
- data/spec/unit/mutant/integration_spec.rb +0 -150
- data/spec/unit/mutant/isolation/fork_spec.rb +0 -309
- data/spec/unit/mutant/isolation/none_spec.rb +0 -23
- data/spec/unit/mutant/isolation/result_spec.rb +0 -73
- data/spec/unit/mutant/license_spec.rb +0 -305
- data/spec/unit/mutant/loader_spec.rb +0 -79
- data/spec/unit/mutant/matcher/chain_spec.rb +0 -26
- data/spec/unit/mutant/matcher/compiler_spec.rb +0 -0
- data/spec/unit/mutant/matcher/config_spec.rb +0 -47
- data/spec/unit/mutant/matcher/filter_spec.rb +0 -22
- data/spec/unit/mutant/matcher/method/instance_spec.rb +0 -164
- data/spec/unit/mutant/matcher/method/metaclass_spec.rb +0 -108
- data/spec/unit/mutant/matcher/method/singleton_spec.rb +0 -90
- data/spec/unit/mutant/matcher/methods/instance_spec.rb +0 -54
- data/spec/unit/mutant/matcher/methods/metaclass_spec.rb +0 -62
- data/spec/unit/mutant/matcher/methods/singleton_spec.rb +0 -51
- data/spec/unit/mutant/matcher/namespace_spec.rb +0 -39
- data/spec/unit/mutant/matcher/null_spec.rb +0 -12
- data/spec/unit/mutant/matcher/scope_spec.rb +0 -45
- data/spec/unit/mutant/matcher/static_spec.rb +0 -13
- data/spec/unit/mutant/matcher_spec.rb +0 -102
- data/spec/unit/mutant/meta/example/dsl_spec.rb +0 -108
- data/spec/unit/mutant/meta/example/verification_spec.rb +0 -154
- data/spec/unit/mutant/meta/example_spec.rb +0 -34
- data/spec/unit/mutant/mutation_spec.rb +0 -140
- data/spec/unit/mutant/mutator/node_spec.rb +0 -47
- data/spec/unit/mutant/mutator_spec.rb +0 -21
- data/spec/unit/mutant/parallel/driver_spec.rb +0 -126
- data/spec/unit/mutant/parallel/source/array_spec.rb +0 -57
- data/spec/unit/mutant/parallel/worker_spec.rb +0 -206
- data/spec/unit/mutant/parallel_spec.rb +0 -115
- data/spec/unit/mutant/parser_spec.rb +0 -26
- data/spec/unit/mutant/range_spec.rb +0 -141
- data/spec/unit/mutant/registry_spec.rb +0 -74
- data/spec/unit/mutant/reporter/cli/printer/config_spec.rb +0 -17
- data/spec/unit/mutant/reporter/cli/printer/env_progress_spec.rb +0 -85
- data/spec/unit/mutant/reporter/cli/printer/env_result_spec.rb +0 -45
- data/spec/unit/mutant/reporter/cli/printer/isolation_result_spec.rb +0 -132
- data/spec/unit/mutant/reporter/cli/printer/mutation_progress_result_spec.rb +0 -25
- data/spec/unit/mutant/reporter/cli/printer/mutation_result_spec.rb +0 -153
- data/spec/unit/mutant/reporter/cli/printer/status_progressive_spec.rb +0 -45
- data/spec/unit/mutant/reporter/cli/printer/subject_progress_spec.rb +0 -36
- data/spec/unit/mutant/reporter/cli/printer/subject_result_spec.rb +0 -44
- data/spec/unit/mutant/reporter/cli/printer/test_result_spec.rb +0 -16
- data/spec/unit/mutant/reporter/cli/printer_spec.rb +0 -163
- data/spec/unit/mutant/reporter/cli_spec.rb +0 -137
- data/spec/unit/mutant/reporter/null_spec.rb +0 -14
- data/spec/unit/mutant/reporter/sequence_spec.rb +0 -31
- data/spec/unit/mutant/repository/diff/ranges_spec.rb +0 -180
- data/spec/unit/mutant/repository/diff_spec.rb +0 -122
- data/spec/unit/mutant/repository/subject_filter_spec.rb +0 -30
- data/spec/unit/mutant/require_highjack_spec.rb +0 -73
- data/spec/unit/mutant/result/class_methods_spec.rb +0 -51
- data/spec/unit/mutant/result/env_spec.rb +0 -161
- data/spec/unit/mutant/result/mutation_spec.rb +0 -70
- data/spec/unit/mutant/result/subject_spec.rb +0 -111
- data/spec/unit/mutant/result/test_spec.rb +0 -14
- data/spec/unit/mutant/result_spec.rb +0 -33
- data/spec/unit/mutant/runner/sink_spec.rb +0 -174
- data/spec/unit/mutant/runner_spec.rb +0 -121
- data/spec/unit/mutant/selector/expression_spec.rb +0 -62
- data/spec/unit/mutant/selector/null_spec.rb +0 -17
- data/spec/unit/mutant/subject/method/instance_spec.rb +0 -181
- data/spec/unit/mutant/subject/method/metaclass_spec.rb +0 -63
- data/spec/unit/mutant/subject/method/singleton_spec.rb +0 -61
- data/spec/unit/mutant/subject_spec.rb +0 -93
- data/spec/unit/mutant/transform/array_spec.rb +0 -92
- data/spec/unit/mutant/transform/bool_spec.rb +0 -63
- data/spec/unit/mutant/transform/error_spec.rb +0 -132
- data/spec/unit/mutant/transform/exception_spec.rb +0 -44
- data/spec/unit/mutant/transform/hash_spec.rb +0 -236
- data/spec/unit/mutant/transform/index_spec.rb +0 -92
- data/spec/unit/mutant/transform/named_spec.rb +0 -49
- data/spec/unit/mutant/transform/primitive_spec.rb +0 -56
- data/spec/unit/mutant/transform/sequence_spec.rb +0 -98
- data/spec/unit/mutant/util/one_spec.rb +0 -22
- data/spec/unit/mutant/warnings_spec.rb +0 -89
- data/spec/unit/mutant/world_spec.rb +0 -63
- data/spec/unit/mutant/zombifier_spec.rb +0 -122
- data/test_app/.rspec +0 -1
- data/test_app/Gemfile.minitest +0 -4
- data/test_app/Gemfile.rspec3.8 +0 -7
- data/test_app/lib/test_app.rb +0 -110
- data/test_app/lib/test_app/literal.rb +0 -35
- data/test_app/lib/test_app/metaclasses.rb +0 -108
- data/test_app/spec/spec_helper.rb +0 -9
- data/test_app/spec/unit/test_app/literal_spec.rb +0 -20
- data/test_app/test/unit/test_app/literal_test.rb +0 -16
@@ -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,2 +1,2 @@
|
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
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe Mutant::Reporter::CLI::Printer::MutationProgressResult do
|
4
|
-
setup_shared_context
|
5
|
-
|
6
|
-
let(:reportable) { mutation_a_result }
|
7
|
-
|
8
|
-
before do
|
9
|
-
allow(output).to receive(:tty?).and_return(true)
|
10
|
-
end
|
11
|
-
|
12
|
-
describe '.run' do
|
13
|
-
context 'on killed mutant' do
|
14
|
-
with(:mutation_a_test_result) { { passed: true } }
|
15
|
-
|
16
|
-
it_reports Mutant::Color::RED.format('F')
|
17
|
-
end
|
18
|
-
|
19
|
-
context 'on alive mutant' do
|
20
|
-
with(:mutation_a_test_result) { { passed: false } }
|
21
|
-
|
22
|
-
it_reports Mutant::Color::GREEN.format('.')
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,153 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe Mutant::Reporter::CLI::Printer::MutationResult do
|
4
|
-
setup_shared_context
|
5
|
-
|
6
|
-
let(:reportable) { mutation_a_result }
|
7
|
-
|
8
|
-
describe '.call' do
|
9
|
-
context 'isolation problem' do
|
10
|
-
let(:status) do
|
11
|
-
instance_double(Process::Status)
|
12
|
-
end
|
13
|
-
|
14
|
-
let(:mutation_a_isolation_result) do
|
15
|
-
Mutant::Isolation::Fork::ChildError.new(status, 'log message')
|
16
|
-
end
|
17
|
-
|
18
|
-
it_reports(<<~'REPORT')
|
19
|
-
evil:subject-a:d27d2
|
20
|
-
@@ -1,2 +1,2 @@
|
21
|
-
-true
|
22
|
-
+false
|
23
|
-
-----------------------
|
24
|
-
Killfork exited nonzero. Its result (if any) was ignored.
|
25
|
-
Process status:
|
26
|
-
#<InstanceDouble(Process::Status) (anonymous)>
|
27
|
-
Log messages (combined stderr and stdout):
|
28
|
-
log message
|
29
|
-
-----------------------
|
30
|
-
REPORT
|
31
|
-
end
|
32
|
-
|
33
|
-
context 'unsucessful result' do
|
34
|
-
with(:mutation_a_test_result) { { passed: true } }
|
35
|
-
|
36
|
-
context 'on evil mutation' do
|
37
|
-
context 'with a diff' do
|
38
|
-
context 'on a tty' do
|
39
|
-
before do
|
40
|
-
allow(output).to receive(:tty?).and_return(true)
|
41
|
-
end
|
42
|
-
|
43
|
-
it_reports(
|
44
|
-
[
|
45
|
-
[Mutant::Color::NONE, "evil:subject-a:d27d2\n"],
|
46
|
-
[Mutant::Color::NONE, "@@ -1,2 +1,2 @@\n"],
|
47
|
-
[Mutant::Color::RED, "-true\n"],
|
48
|
-
[Mutant::Color::GREEN, "+false\n"],
|
49
|
-
[Mutant::Color::NONE, "-----------------------\n"],
|
50
|
-
[Mutant::Color::NONE, "- 1 @ runtime: 1.0\n"],
|
51
|
-
[Mutant::Color::NONE, " - test-a\n"],
|
52
|
-
[Mutant::Color::NONE, "Test Output:\n"],
|
53
|
-
[Mutant::Color::NONE, "mutation a test result output\n"],
|
54
|
-
[Mutant::Color::NONE, "-----------------------\n"]
|
55
|
-
].map { |color, text| color.format(text) }.join
|
56
|
-
)
|
57
|
-
end
|
58
|
-
|
59
|
-
context 'on non tty' do
|
60
|
-
it_reports(<<~'STR')
|
61
|
-
evil:subject-a:d27d2
|
62
|
-
@@ -1,2 +1,2 @@
|
63
|
-
-true
|
64
|
-
+false
|
65
|
-
-----------------------
|
66
|
-
- 1 @ runtime: 1.0
|
67
|
-
- test-a
|
68
|
-
Test Output:
|
69
|
-
mutation a test result output
|
70
|
-
-----------------------
|
71
|
-
STR
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
context 'without a diff' do
|
76
|
-
# This is intentionally invalid AST mutant might produce
|
77
|
-
let(:subject_a_node) { s(:lvar, :super) }
|
78
|
-
|
79
|
-
# Unparses exactly the same way as above node
|
80
|
-
let(:mutation_a_node) { s(:zsuper) }
|
81
|
-
|
82
|
-
it_reports(<<~REPORT)
|
83
|
-
evil:subject-a:a5bc7
|
84
|
-
--- Internal failure ---
|
85
|
-
BUG: A generted mutation did not result in exactly one diff hunk!
|
86
|
-
This is an invariant violation by the mutation generation engine.
|
87
|
-
Please report a reproduction to https://github.com/mbj/mutant
|
88
|
-
Original unparsed source:
|
89
|
-
super
|
90
|
-
Original AST:
|
91
|
-
s(:lvar, :super)
|
92
|
-
Mutated unparsed source:
|
93
|
-
super
|
94
|
-
Mutated AST:
|
95
|
-
s(:zsuper)
|
96
|
-
-----------------------
|
97
|
-
- 1 @ runtime: 1.0
|
98
|
-
- test-a
|
99
|
-
Test Output:
|
100
|
-
mutation a test result output
|
101
|
-
-----------------------
|
102
|
-
REPORT
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
context 'on neutral mutation' do
|
107
|
-
with(:mutation_a_test_result) { { passed: false } }
|
108
|
-
|
109
|
-
let(:mutation_a) do
|
110
|
-
Mutant::Mutation::Neutral.new(subject_a, s(:true))
|
111
|
-
end
|
112
|
-
|
113
|
-
it_reports(<<~REPORT)
|
114
|
-
neutral:subject-a:d5318
|
115
|
-
--- Neutral failure ---
|
116
|
-
Original code was inserted unmutated. And the test did NOT PASS.
|
117
|
-
Your tests do not pass initially or you found a bug in mutant / unparser.
|
118
|
-
Subject AST:
|
119
|
-
s(:true)
|
120
|
-
Unparsed Source:
|
121
|
-
true
|
122
|
-
-----------------------
|
123
|
-
- 1 @ runtime: 1.0
|
124
|
-
- test-a
|
125
|
-
Test Output:
|
126
|
-
mutation a test result output
|
127
|
-
-----------------------
|
128
|
-
REPORT
|
129
|
-
end
|
130
|
-
|
131
|
-
context 'on noop mutation' do
|
132
|
-
with(:mutation_a_test_result) { { passed: false } }
|
133
|
-
|
134
|
-
let(:mutation_a) do
|
135
|
-
Mutant::Mutation::Noop.new(subject_a, s(:true))
|
136
|
-
end
|
137
|
-
|
138
|
-
it_reports(<<~REPORT)
|
139
|
-
noop:subject-a:d5318
|
140
|
-
---- Noop failure -----
|
141
|
-
No code was inserted. And the test did NOT PASS.
|
142
|
-
This is typically a problem of your specs not passing unmutated.
|
143
|
-
-----------------------
|
144
|
-
- 1 @ runtime: 1.0
|
145
|
-
- test-a
|
146
|
-
Test Output:
|
147
|
-
mutation a test result output
|
148
|
-
-----------------------
|
149
|
-
REPORT
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|