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
@@ -39,20 +39,12 @@ module Mutant
|
|
39
39
|
|
40
40
|
private
|
41
41
|
|
42
|
-
# Next job, if any
|
43
|
-
#
|
44
|
-
# @return [Job, nil]
|
45
42
|
def next_job
|
46
43
|
var_source.with do |source|
|
47
44
|
source.next if source.next?
|
48
45
|
end
|
49
46
|
end
|
50
47
|
|
51
|
-
# Add result
|
52
|
-
#
|
53
|
-
# @param [Object] result
|
54
|
-
#
|
55
|
-
# @return [Boolean]
|
56
48
|
def add_result(result)
|
57
49
|
var_sink.with do |sink|
|
58
50
|
sink.result(result)
|
@@ -60,32 +52,18 @@ module Mutant
|
|
60
52
|
end
|
61
53
|
end
|
62
54
|
|
63
|
-
# Register job to be started
|
64
|
-
#
|
65
|
-
# @param [Job] job
|
66
|
-
#
|
67
|
-
# @return [undefined]
|
68
55
|
def job_start(job)
|
69
56
|
var_active_jobs.with do |active_jobs|
|
70
57
|
active_jobs << job
|
71
58
|
end
|
72
59
|
end
|
73
60
|
|
74
|
-
# Register job to be done
|
75
|
-
#
|
76
|
-
# @param [Job] job
|
77
|
-
# @param [Object] result
|
78
|
-
#
|
79
|
-
# @return [undefined]
|
80
61
|
def job_done(job)
|
81
62
|
var_active_jobs.with do |active_jobs|
|
82
63
|
active_jobs.delete(job)
|
83
64
|
end
|
84
65
|
end
|
85
66
|
|
86
|
-
# Finalize worker
|
87
|
-
#
|
88
|
-
# @return [undefined]
|
89
67
|
def finalize
|
90
68
|
var_final.put(nil) if var_running.modify(&:pred).zero?
|
91
69
|
end
|
data/lib/mutant/reporter/cli.rb
CHANGED
@@ -49,12 +49,6 @@ module Mutant
|
|
49
49
|
|
50
50
|
private
|
51
51
|
|
52
|
-
# Format object with printer
|
53
|
-
#
|
54
|
-
# @param [Class:Printer] printer
|
55
|
-
# @param [Object] object
|
56
|
-
#
|
57
|
-
# @return [String]
|
58
52
|
def format(printer, object)
|
59
53
|
buffer = new_buffer
|
60
54
|
printer.call(Output.new(tty, buffer), object)
|
@@ -84,9 +78,6 @@ module Mutant
|
|
84
78
|
|
85
79
|
private
|
86
80
|
|
87
|
-
# New buffer
|
88
|
-
#
|
89
|
-
# @return [StringIO]
|
90
81
|
def new_buffer
|
91
82
|
StringIO.new
|
92
83
|
end
|
@@ -44,81 +44,41 @@ module Mutant
|
|
44
44
|
|
45
45
|
private
|
46
46
|
|
47
|
-
# Status color
|
48
|
-
#
|
49
|
-
# @return [Color]
|
50
47
|
def status_color
|
51
|
-
success? ? Color::GREEN : Color::RED
|
48
|
+
success? ? Unparser::Color::GREEN : Unparser::Color::RED
|
52
49
|
end
|
53
50
|
|
54
|
-
# Visit a collection of objects
|
55
|
-
#
|
56
|
-
# @return [Class::Printer] printer
|
57
|
-
# @return [Enumerable<Object>] collection
|
58
|
-
#
|
59
|
-
# @return [undefined]
|
60
51
|
def visit_collection(printer, collection)
|
61
52
|
collection.each do |object|
|
62
53
|
visit(printer, object)
|
63
54
|
end
|
64
55
|
end
|
65
56
|
|
66
|
-
# Visit object
|
67
|
-
#
|
68
|
-
# @param [Class::Printer] printer
|
69
|
-
# @param [Object] object
|
70
|
-
#
|
71
|
-
# @return [undefined]
|
72
57
|
def visit(printer, object)
|
73
58
|
printer.call(output, object)
|
74
59
|
end
|
75
60
|
|
76
|
-
# Print an info line to output
|
77
|
-
#
|
78
|
-
# @return [undefined]
|
79
61
|
def info(string, *arguments)
|
80
62
|
puts(string % arguments)
|
81
63
|
end
|
82
64
|
|
83
|
-
# Print a status line to output
|
84
|
-
#
|
85
|
-
# @return [undefined]
|
86
65
|
def status(string, *arguments)
|
87
66
|
puts(colorize(status_color, string % arguments))
|
88
67
|
end
|
89
68
|
|
90
|
-
# Print a line to output
|
91
|
-
#
|
92
|
-
# @return [undefined]
|
93
69
|
def puts(string)
|
94
70
|
output.puts(string)
|
95
71
|
end
|
96
72
|
|
97
|
-
# Colorize message
|
98
|
-
#
|
99
|
-
# @param [Color] color
|
100
|
-
# @param [String] message
|
101
|
-
#
|
102
|
-
# @return [String]
|
103
|
-
# if color is enabled
|
104
|
-
# unmodified message otherwise
|
105
73
|
def colorize(color, message)
|
106
|
-
color = Color::NONE unless tty?
|
74
|
+
color = Unparser::Color::NONE unless tty?
|
107
75
|
color.format(message)
|
108
76
|
end
|
109
77
|
|
110
|
-
# Test if output is a tty
|
111
|
-
#
|
112
|
-
# @return [Boolean]
|
113
78
|
def tty?
|
114
79
|
output.tty?
|
115
80
|
end
|
116
81
|
|
117
|
-
# Test if output can be colored
|
118
|
-
#
|
119
|
-
# @return [Boolean]
|
120
|
-
#
|
121
|
-
# @api private
|
122
82
|
alias_method :color?, :tty?
|
123
83
|
end # Printer
|
124
84
|
end # CLI
|
@@ -40,29 +40,14 @@ module Mutant
|
|
40
40
|
|
41
41
|
private
|
42
42
|
|
43
|
-
# Mutations processed per second
|
44
|
-
#
|
45
|
-
# @return [Float]
|
46
|
-
#
|
47
|
-
# @api private
|
48
43
|
def mutations_per_second
|
49
44
|
amount_mutation_results / runtime
|
50
45
|
end
|
51
46
|
|
52
|
-
# Coverage in percent
|
53
|
-
#
|
54
|
-
# @return [Float]
|
55
|
-
#
|
56
|
-
# @api private
|
57
47
|
def coverage_percent
|
58
48
|
coverage * 100
|
59
49
|
end
|
60
50
|
|
61
|
-
# Overhead in percent
|
62
|
-
#
|
63
|
-
# @return [Float]
|
64
|
-
#
|
65
|
-
# @api private
|
66
51
|
def overhead_percent
|
67
52
|
(overhead / killtime) * 100
|
68
53
|
end
|
@@ -28,7 +28,7 @@ module Mutant
|
|
28
28
|
* Bug in your test suite
|
29
29
|
* Bug in your test suite under concurrency
|
30
30
|
|
31
|
-
The following exception was raised:
|
31
|
+
The following exception was raised while reading the killfork result:
|
32
32
|
|
33
33
|
```
|
34
34
|
%s
|
@@ -60,45 +60,36 @@ module Mutant
|
|
60
60
|
#
|
61
61
|
# @return [undefined]
|
62
62
|
def run
|
63
|
-
__send__(MAP.fetch(object.class))
|
64
63
|
print_log_messages
|
64
|
+
__send__(MAP.fetch(object.class))
|
65
65
|
end
|
66
66
|
|
67
67
|
private
|
68
68
|
|
69
|
-
# Visit successful isolation result
|
70
|
-
#
|
71
|
-
# @return [undefined]
|
72
69
|
def visit_success
|
73
70
|
visit(TestResult, object.value)
|
74
71
|
end
|
75
72
|
|
76
|
-
# Print log messages
|
77
|
-
#
|
78
|
-
# @return [undefined]
|
79
73
|
def print_log_messages
|
80
74
|
log = object.log
|
81
75
|
|
82
|
-
|
76
|
+
return if log.empty?
|
77
|
+
|
78
|
+
puts('Log messages (combined stderr and stdout):')
|
79
|
+
|
80
|
+
log.each_line do |line|
|
81
|
+
puts('[killfork] %<line>s' % { line: line })
|
82
|
+
end
|
83
83
|
end
|
84
84
|
|
85
|
-
# Visit child error isolation result
|
86
|
-
#
|
87
|
-
# @return [undefined]
|
88
85
|
def visit_child_error
|
89
86
|
puts(CHILD_ERROR_MESSAGE % object.value.inspect)
|
90
87
|
end
|
91
88
|
|
92
|
-
# Visit fork error isolation result
|
93
|
-
#
|
94
|
-
# @return [undefined]
|
95
89
|
def visit_fork_error
|
96
90
|
puts(FORK_ERROR_MESSAGE)
|
97
91
|
end
|
98
92
|
|
99
|
-
# Visit exception isolation result
|
100
|
-
#
|
101
|
-
# @return [undefined]
|
102
93
|
def visit_exception
|
103
94
|
exception = object.value
|
104
95
|
|
@@ -110,9 +101,6 @@ module Mutant
|
|
110
101
|
)
|
111
102
|
end
|
112
103
|
|
113
|
-
# Visit chain
|
114
|
-
#
|
115
|
-
# @return [undefined]
|
116
104
|
def visit_chain
|
117
105
|
printer = self.class
|
118
106
|
|
@@ -59,9 +59,6 @@ module Mutant
|
|
59
59
|
|
60
60
|
private
|
61
61
|
|
62
|
-
# Print mutation details
|
63
|
-
#
|
64
|
-
# @return [undefined]
|
65
62
|
def print_details
|
66
63
|
__send__(MAP.fetch(mutation.class))
|
67
64
|
|
@@ -69,11 +66,8 @@ module Mutant
|
|
69
66
|
visit_isolation_result
|
70
67
|
end
|
71
68
|
|
72
|
-
# Evil mutation details
|
73
|
-
#
|
74
|
-
# @return [String]
|
75
69
|
def evil_details
|
76
|
-
diff = Diff.build(mutation.original_source, mutation.source)
|
70
|
+
diff = Unparser::Diff.build(mutation.original_source, mutation.source)
|
77
71
|
diff = color? ? diff.colorized_diff : diff.diff
|
78
72
|
if diff
|
79
73
|
output.write(diff)
|
@@ -82,9 +76,6 @@ module Mutant
|
|
82
76
|
end
|
83
77
|
end
|
84
78
|
|
85
|
-
# Print no diff message
|
86
|
-
#
|
87
|
-
# @return [undefined]
|
88
79
|
def print_no_diff_message
|
89
80
|
info(
|
90
81
|
NO_DIFF_MESSAGE,
|
@@ -95,30 +86,18 @@ module Mutant
|
|
95
86
|
)
|
96
87
|
end
|
97
88
|
|
98
|
-
# Noop details
|
99
|
-
#
|
100
|
-
# @return [String]
|
101
89
|
def noop_details
|
102
90
|
info(NOOP_MESSAGE)
|
103
91
|
end
|
104
92
|
|
105
|
-
# Neutral details
|
106
|
-
#
|
107
|
-
# @return [String]
|
108
93
|
def neutral_details
|
109
94
|
info(NEUTRAL_MESSAGE, original_node.inspect, mutation.source)
|
110
95
|
end
|
111
96
|
|
112
|
-
# Visit failed test results
|
113
|
-
#
|
114
|
-
# @return [undefined]
|
115
97
|
def visit_isolation_result
|
116
98
|
visit(IsolationResult, isolation_result)
|
117
99
|
end
|
118
100
|
|
119
|
-
# Original node
|
120
|
-
#
|
121
|
-
# @return [Parser::AST::Node]
|
122
101
|
def original_node
|
123
102
|
mutation.subject.node
|
124
103
|
end
|
@@ -35,18 +35,10 @@ module Mutant
|
|
35
35
|
|
36
36
|
private
|
37
37
|
|
38
|
-
# Object being printed
|
39
|
-
#
|
40
|
-
# @return [Result::Env]
|
41
38
|
def object
|
42
39
|
super().payload
|
43
40
|
end
|
44
41
|
|
45
|
-
# Mutations processed per second
|
46
|
-
#
|
47
|
-
# @return [Float]
|
48
|
-
#
|
49
|
-
# @api private
|
50
42
|
def mutations_per_second
|
51
43
|
amount_mutation_results / runtime
|
52
44
|
end
|
@@ -32,9 +32,6 @@ module Mutant
|
|
32
32
|
|
33
33
|
private
|
34
34
|
|
35
|
-
# Print stats
|
36
|
-
#
|
37
|
-
# @return [undefined]
|
38
35
|
def print_stats
|
39
36
|
status(
|
40
37
|
FORMAT,
|
@@ -47,16 +44,10 @@ module Mutant
|
|
47
44
|
)
|
48
45
|
end
|
49
46
|
|
50
|
-
# Print progress bar finish
|
51
|
-
#
|
52
|
-
# @return [undefined]
|
53
47
|
def print_progress_bar_finish
|
54
48
|
puts(nil) unless amount_mutation_results.zero?
|
55
49
|
end
|
56
50
|
|
57
|
-
# Print mutation results
|
58
|
-
#
|
59
|
-
# @return [undefined]
|
60
51
|
def print_mutation_results
|
61
52
|
visit_collection(MutationProgressResult, object.mutation_results)
|
62
53
|
end
|
@@ -29,10 +29,6 @@ module Mutant
|
|
29
29
|
|
30
30
|
private
|
31
31
|
|
32
|
-
# Touched paths
|
33
|
-
#
|
34
|
-
# @return [Hash{Pathname => Path}]
|
35
|
-
#
|
36
32
|
# rubocop:disable Metrics/MethodLength
|
37
33
|
def touched_paths
|
38
34
|
pathname = world.pathname
|
@@ -49,13 +45,8 @@ module Mutant
|
|
49
45
|
.to_h
|
50
46
|
end
|
51
47
|
memoize :touched_paths
|
48
|
+
# rubocop:enable Metrics/MethodLength
|
52
49
|
|
53
|
-
# Parse path
|
54
|
-
#
|
55
|
-
# @param [Pathname] work_dir
|
56
|
-
# @param [String] line
|
57
|
-
#
|
58
|
-
# @return [Path]
|
59
50
|
def parse_line(work_dir, line)
|
60
51
|
match = FORMAT.match(line) or fail Error, "Invalid git diff-index line: #{line}"
|
61
52
|
|
@@ -88,9 +79,6 @@ module Mutant
|
|
88
79
|
|
89
80
|
private
|
90
81
|
|
91
|
-
# Ranges of hunks in the diff
|
92
|
-
#
|
93
|
-
# @return [Array<Range<Integer>>]
|
94
82
|
def diff_ranges
|
95
83
|
world
|
96
84
|
.capture_stdout(%W[git diff --unified=0 #{to} -- #{path}])
|
@@ -18,11 +18,6 @@ module Mutant
|
|
18
18
|
diff.lines.flat_map(&method(:parse_ranges)).to_set
|
19
19
|
end
|
20
20
|
|
21
|
-
# Parse ranges from line
|
22
|
-
#
|
23
|
-
# @param [String] line
|
24
|
-
#
|
25
|
-
# @return [Array<Range<Integer>>]
|
26
21
|
def self.parse_ranges(line)
|
27
22
|
match = REGEXP.match(line) or return EMPTY_ARRAY
|
28
23
|
|
@@ -34,12 +29,6 @@ module Mutant
|
|
34
29
|
end
|
35
30
|
private_class_method :parse_ranges
|
36
31
|
|
37
|
-
# Construct a range from start point and offset
|
38
|
-
#
|
39
|
-
# @param [String] start
|
40
|
-
# @param [String, nil] offset
|
41
|
-
#
|
42
|
-
# @return [Range<Integer>]
|
43
32
|
def self.mk_range(start, offset)
|
44
33
|
start = Integer(start)
|
45
34
|
|