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.
- checksums.yaml +4 -4
- data/lib/mutant.rb +5 -2
- data/lib/mutant/ast.rb +0 -9
- data/lib/mutant/ast/find_metaclass_containing.rb +48 -0
- data/lib/mutant/ast/meta/send.rb +0 -6
- data/lib/mutant/bootstrap.rb +14 -37
- data/lib/mutant/cli.rb +11 -49
- data/lib/mutant/config.rb +0 -8
- data/lib/mutant/context.rb +0 -3
- data/lib/mutant/env.rb +0 -6
- data/lib/mutant/expression/method.rb +6 -6
- data/lib/mutant/expression/methods.rb +6 -6
- data/lib/mutant/expression/parser.rb +0 -6
- data/lib/mutant/integration.rb +0 -18
- data/lib/mutant/isolation.rb +1 -1
- data/lib/mutant/isolation/fork.rb +2 -24
- data/lib/mutant/isolation/none.rb +1 -1
- data/lib/mutant/license.rb +11 -0
- data/lib/mutant/matcher.rb +0 -14
- data/lib/mutant/matcher/config.rb +2 -11
- data/lib/mutant/matcher/method.rb +0 -31
- data/lib/mutant/matcher/method/instance.rb +0 -8
- data/lib/mutant/matcher/method/metaclass.rb +86 -0
- data/lib/mutant/matcher/method/singleton.rb +0 -25
- data/lib/mutant/matcher/methods.rb +17 -28
- data/lib/mutant/matcher/namespace.rb +0 -10
- data/lib/mutant/matcher/scope.rb +2 -4
- data/lib/mutant/meta/example/dsl.rb +0 -21
- data/lib/mutant/meta/example/verification.rb +0 -20
- data/lib/mutant/minitest/coverage.rb +53 -0
- data/lib/mutant/mutation.rb +0 -3
- data/lib/mutant/mutator.rb +1 -29
- data/lib/mutant/mutator/node.rb +1 -66
- data/lib/mutant/mutator/node/and_asgn.rb +0 -3
- data/lib/mutant/mutator/node/argument.rb +0 -15
- data/lib/mutant/mutator/node/arguments.rb +0 -20
- data/lib/mutant/mutator/node/begin.rb +0 -3
- data/lib/mutant/mutator/node/binary.rb +0 -23
- data/lib/mutant/mutator/node/block.rb +0 -15
- data/lib/mutant/mutator/node/block_pass.rb +29 -0
- data/lib/mutant/mutator/node/break.rb +0 -3
- data/lib/mutant/mutator/node/case.rb +0 -9
- data/lib/mutant/mutator/node/class.rb +0 -3
- data/lib/mutant/mutator/node/conditional_loop.rb +0 -3
- data/lib/mutant/mutator/node/const.rb +0 -3
- data/lib/mutant/mutator/node/define.rb +0 -11
- data/lib/mutant/mutator/node/defined.rb +0 -3
- data/lib/mutant/mutator/node/dstr.rb +0 -3
- data/lib/mutant/mutator/node/dsym.rb +0 -3
- data/lib/mutant/mutator/node/generic.rb +0 -3
- data/lib/mutant/mutator/node/if.rb +0 -12
- data/lib/mutant/mutator/node/index.rb +0 -27
- data/lib/mutant/mutator/node/kwbegin.rb +0 -3
- data/lib/mutant/mutator/node/literal.rb +0 -3
- data/lib/mutant/mutator/node/literal/array.rb +0 -6
- data/lib/mutant/mutator/node/literal/boolean.rb +0 -4
- data/lib/mutant/mutator/node/literal/float.rb +0 -9
- data/lib/mutant/mutator/node/literal/hash.rb +0 -9
- data/lib/mutant/mutator/node/literal/integer.rb +0 -9
- data/lib/mutant/mutator/node/literal/nil.rb +0 -3
- data/lib/mutant/mutator/node/literal/range.rb +4 -7
- data/lib/mutant/mutator/node/literal/regex.rb +0 -6
- data/lib/mutant/mutator/node/literal/string.rb +0 -3
- data/lib/mutant/mutator/node/literal/symbol.rb +0 -3
- data/lib/mutant/mutator/node/masgn.rb +0 -3
- data/lib/mutant/mutator/node/match_current_line.rb +0 -3
- data/lib/mutant/mutator/node/mlhs.rb +0 -3
- data/lib/mutant/mutator/node/named_value/access.rb +2 -14
- data/lib/mutant/mutator/node/named_value/constant_assignment.rb +0 -9
- data/lib/mutant/mutator/node/named_value/variable_assignment.rb +0 -6
- data/lib/mutant/mutator/node/next.rb +0 -3
- data/lib/mutant/mutator/node/noop.rb +1 -4
- data/lib/mutant/mutator/node/nthref.rb +0 -3
- data/lib/mutant/mutator/node/op_asgn.rb +0 -3
- data/lib/mutant/mutator/node/or_asgn.rb +0 -3
- data/lib/mutant/mutator/node/procarg_zero.rb +0 -3
- data/lib/mutant/mutator/node/regopt.rb +0 -6
- data/lib/mutant/mutator/node/resbody.rb +0 -6
- data/lib/mutant/mutator/node/rescue.rb +2 -19
- data/lib/mutant/mutator/node/return.rb +0 -3
- data/lib/mutant/mutator/node/sclass.rb +20 -0
- data/lib/mutant/mutator/node/send.rb +26 -61
- data/lib/mutant/mutator/node/send/attribute_assignment.rb +0 -9
- data/lib/mutant/mutator/node/send/binary.rb +0 -11
- data/lib/mutant/mutator/node/send/conditional.rb +0 -3
- data/lib/mutant/mutator/node/splat.rb +0 -3
- data/lib/mutant/mutator/node/super.rb +0 -3
- data/lib/mutant/mutator/node/when.rb +0 -19
- data/lib/mutant/mutator/node/yield.rb +0 -3
- data/lib/mutant/mutator/node/zsuper.rb +0 -3
- data/lib/mutant/mutator/util/array.rb +0 -6
- data/lib/mutant/mutator/util/symbol.rb +0 -3
- data/lib/mutant/parallel.rb +0 -13
- data/lib/mutant/parallel/driver.rb +0 -10
- data/lib/mutant/parallel/worker.rb +0 -22
- data/lib/mutant/reporter/cli.rb +0 -5
- data/lib/mutant/reporter/cli/format.rb +0 -9
- data/lib/mutant/reporter/cli/printer.rb +2 -42
- data/lib/mutant/reporter/cli/printer/env_progress.rb +0 -15
- data/lib/mutant/reporter/cli/printer/isolation_result.rb +9 -21
- data/lib/mutant/reporter/cli/printer/mutation_progress_result.rb +0 -5
- data/lib/mutant/reporter/cli/printer/mutation_result.rb +1 -22
- data/lib/mutant/reporter/cli/printer/status_progressive.rb +0 -8
- data/lib/mutant/reporter/cli/printer/subject_progress.rb +0 -9
- data/lib/mutant/repository/diff.rb +1 -13
- data/lib/mutant/repository/diff/ranges.rb +0 -11
- data/lib/mutant/result.rb +0 -3
- data/lib/mutant/runner.rb +0 -18
- data/lib/mutant/runner/sink.rb +0 -5
- data/lib/mutant/subject.rb +0 -8
- data/lib/mutant/subject/method.rb +0 -3
- data/lib/mutant/subject/method/instance.rb +40 -6
- data/lib/mutant/subject/method/metaclass.rb +30 -0
- data/lib/mutant/transform.rb +0 -92
- data/lib/mutant/version.rb +1 -1
- data/lib/mutant/warnings.rb +0 -6
- data/lib/mutant/zombifier.rb +2 -34
- metadata +61 -333
- data/.github/workflows/ci.yml +0 -121
- data/.gitignore +0 -38
- data/.rspec +0 -5
- data/.rubocop.yml +0 -7
- data/Changelog.md +0 -75
- data/Gemfile +0 -7
- data/Gemfile.lock +0 -167
- data/Gemfile.shared +0 -10
- data/README.md +0 -138
- data/Rakefile +0 -5
- data/config/devtools.yml +0 -2
- data/config/reek.yml +0 -138
- 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 -43
- data/lib/mutant/diff.rb +0 -114
- data/meta/and.rb +0 -15
- data/meta/and_asgn.rb +0 -14
- data/meta/array.rb +0 -30
- data/meta/begin.rb +0 -23
- data/meta/block.rb +0 -202
- data/meta/block_pass.rb +0 -8
- data/meta/blockarg.rb +0 -10
- data/meta/break.rb +0 -10
- data/meta/case.rb +0 -223
- data/meta/casgn.rb +0 -28
- 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 -10
- data/meta/date.rb +0 -59
- data/meta/def.rb +0 -203
- data/meta/defined.rb +0 -9
- data/meta/dstr.rb +0 -13
- data/meta/dsym.rb +0 -14
- data/meta/ensure.rb +0 -9
- data/meta/false.rb +0 -8
- data/meta/file.rb +0 -5
- data/meta/float.rb +0 -37
- data/meta/gvar.rb +0 -7
- data/meta/gvasgn.rb +0 -10
- data/meta/hash.rb +0 -24
- data/meta/if.rb +0 -77
- 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 -23
- data/meta/kwarg.rb +0 -10
- data/meta/kwbegin.rb +0 -9
- 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 -25
- data/meta/masgn.rb +0 -7
- data/meta/match_current_line.rb +0 -15
- data/meta/next.rb +0 -11
- data/meta/nil.rb +0 -5
- data/meta/nthref.rb +0 -14
- data/meta/op_assgn.rb +0 -17
- data/meta/or.rb +0 -15
- data/meta/or_asgn.rb +0 -50
- data/meta/range.rb +0 -39
- data/meta/redo.rb +0 -5
- data/meta/regexp.rb +0 -81
- data/meta/regopt.rb +0 -10
- data/meta/rescue.rb +0 -90
- data/meta/return.rb +0 -16
- data/meta/self.rb +0 -7
- data/meta/send.rb +0 -604
- data/meta/str.rb +0 -7
- data/meta/super.rb +0 -27
- data/meta/sym.rb +0 -8
- data/meta/true.rb +0 -8
- data/meta/until.rb +0 -17
- data/meta/while.rb +0 -26
- data/meta/yield.rb +0 -10
- data/mutant-minitest.gemspec +0 -22
- data/mutant-rspec.gemspec +0 -22
- data/mutant.gemspec +0 -41
- 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/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 -61
- 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 -293
- 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/singleton_spec.rb +0 -90
- data/spec/unit/mutant/matcher/methods/instance_spec.rb +0 -54
- data/spec/unit/mutant/matcher/methods/singleton_spec.rb +0 -51
- data/spec/unit/mutant/matcher/namespace_spec.rb +0 -37
- data/spec/unit/mutant/matcher/null_spec.rb +0 -12
- data/spec/unit/mutant/matcher/scope_spec.rb +0 -35
- 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 -52
- 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/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 -109
- data/test_app/lib/test_app/literal.rb +0 -35
- 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,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
|
@@ -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
|