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
@@ -14,24 +14,15 @@ module Mutant
|
|
14
14
|
|
15
15
|
private
|
16
16
|
|
17
|
-
# Emit mutations
|
18
|
-
#
|
19
|
-
# @return [undefined]
|
20
17
|
def dispatch
|
21
18
|
emit_name_mutation
|
22
19
|
end
|
23
20
|
|
24
|
-
# Emit name mutations
|
25
|
-
#
|
26
|
-
# @return [undefined]
|
27
21
|
def emit_name_mutation
|
28
22
|
return if skip?
|
29
23
|
emit_name(:"#{UNDERSCORE}#{name}")
|
30
24
|
end
|
31
25
|
|
32
|
-
# Test if argument mutation is skipped
|
33
|
-
#
|
34
|
-
# @return [Boolean]
|
35
26
|
def skip?
|
36
27
|
name.to_s.start_with?(UNDERSCORE)
|
37
28
|
end
|
@@ -50,18 +41,12 @@ module Mutant
|
|
50
41
|
|
51
42
|
private
|
52
43
|
|
53
|
-
# Emit mutations
|
54
|
-
#
|
55
|
-
# @return [undefined]
|
56
44
|
def dispatch
|
57
45
|
emit_name_mutation
|
58
46
|
emit_required_mutation
|
59
47
|
emit_default_mutations
|
60
48
|
end
|
61
49
|
|
62
|
-
# Emit required mutation
|
63
|
-
#
|
64
|
-
# @return [undefined]
|
65
50
|
def emit_required_mutation
|
66
51
|
emit(s(TYPE_MAP.fetch(node.type), name))
|
67
52
|
end
|
@@ -12,18 +12,12 @@ module Mutant
|
|
12
12
|
|
13
13
|
private
|
14
14
|
|
15
|
-
# Emit mutations
|
16
|
-
#
|
17
|
-
# @return [undefined]
|
18
15
|
def dispatch
|
19
16
|
emit_argument_presence
|
20
17
|
emit_argument_mutations
|
21
18
|
emit_mlhs_expansion
|
22
19
|
end
|
23
20
|
|
24
|
-
# Emit argument presence mutation
|
25
|
-
#
|
26
|
-
# @return [undefined]
|
27
21
|
def emit_argument_presence
|
28
22
|
emit_type
|
29
23
|
|
@@ -34,9 +28,6 @@ module Mutant
|
|
34
28
|
end
|
35
29
|
end
|
36
30
|
|
37
|
-
# Emit argument mutations
|
38
|
-
#
|
39
|
-
# @return [undefined]
|
40
31
|
def emit_argument_mutations
|
41
32
|
children.each_with_index do |child, index|
|
42
33
|
Mutator.mutate(child).each do |mutant|
|
@@ -46,18 +37,10 @@ module Mutant
|
|
46
37
|
end
|
47
38
|
end
|
48
39
|
|
49
|
-
# Test if child mutation is allowed
|
50
|
-
#
|
51
|
-
# @param [Parser::AST::Node]
|
52
|
-
#
|
53
|
-
# @return [Boolean]
|
54
40
|
def invalid_argument_replacement?(mutant, index)
|
55
41
|
n_arg?(mutant) && children[0...index].any?(&method(:n_optarg?))
|
56
42
|
end
|
57
43
|
|
58
|
-
# Emit mlhs expansions
|
59
|
-
#
|
60
|
-
# @return [undefined]
|
61
44
|
def emit_mlhs_expansion
|
62
45
|
mlhs_childs_with_index.each do |child, index|
|
63
46
|
dup_children = children.dup
|
@@ -67,9 +50,6 @@ module Mutant
|
|
67
50
|
end
|
68
51
|
end
|
69
52
|
|
70
|
-
# Multiple left hand side childs
|
71
|
-
#
|
72
|
-
# @return [Enumerable<Parser::AST::Node, Integer>]
|
73
53
|
def mlhs_childs_with_index
|
74
54
|
children.each_with_index.select do |child,|
|
75
55
|
n_mlhs?(child)
|
@@ -17,9 +17,6 @@ module Mutant
|
|
17
17
|
|
18
18
|
private
|
19
19
|
|
20
|
-
# Emit mutations
|
21
|
-
#
|
22
|
-
# @return [undefined]
|
23
20
|
def dispatch
|
24
21
|
emit_singletons
|
25
22
|
emit_promotions
|
@@ -29,35 +26,15 @@ module Mutant
|
|
29
26
|
emit_right_mutations
|
30
27
|
end
|
31
28
|
|
32
|
-
# Emit operator mutations
|
33
|
-
#
|
34
|
-
# @return [undefined]
|
35
29
|
def emit_operator_mutations
|
36
30
|
emit(s(INVERSE.fetch(node.type), left, right))
|
37
31
|
end
|
38
32
|
|
39
|
-
# Emit promotions
|
40
|
-
#
|
41
|
-
# @return [undefined]
|
42
33
|
def emit_promotions
|
43
34
|
emit(left)
|
44
35
|
emit(right)
|
45
36
|
end
|
46
37
|
|
47
|
-
# Emit left negation
|
48
|
-
#
|
49
|
-
# We do not emit right negation as the `and` and `or` nodes
|
50
|
-
# in ruby are also used for control flow.
|
51
|
-
#
|
52
|
-
# Irrespective of their syntax, aka `||` parses internally to `or`.
|
53
|
-
#
|
54
|
-
# `do_a or do_b`. Negating left makes sense, negating right
|
55
|
-
# only when the result is actually used.
|
56
|
-
#
|
57
|
-
# It *would* be possible to emit the right negation in case the use of the result is proved.
|
58
|
-
# Like parent is an assignment to an {l,i}var. Dunno if we ever get the time to do that.
|
59
|
-
#
|
60
|
-
# @return [undefined]
|
61
38
|
def emit_left_negation
|
62
39
|
emit(s(node.type, n_not(left), right))
|
63
40
|
end
|
@@ -11,9 +11,6 @@ module Mutant
|
|
11
11
|
|
12
12
|
private
|
13
13
|
|
14
|
-
# Emit mutations
|
15
|
-
#
|
16
|
-
# @return [undefined]
|
17
14
|
def dispatch
|
18
15
|
emit_singletons
|
19
16
|
emit(send) unless n_lambda?(send)
|
@@ -23,9 +20,6 @@ module Mutant
|
|
23
20
|
mutate_body
|
24
21
|
end
|
25
22
|
|
26
|
-
# Emit body mutations
|
27
|
-
#
|
28
|
-
# @return [undefined]
|
29
23
|
def mutate_body
|
30
24
|
emit_body(nil)
|
31
25
|
emit_body(N_RAISE)
|
@@ -37,18 +31,12 @@ module Mutant
|
|
37
31
|
mutate_body_receiver
|
38
32
|
end
|
39
33
|
|
40
|
-
# Test if body has control structures
|
41
|
-
#
|
42
|
-
# @return [Boolean]
|
43
34
|
def body_has_control?
|
44
35
|
AST.find_last_path(body) do |node|
|
45
36
|
n_break?(node) || n_next?(node)
|
46
37
|
end.any?
|
47
38
|
end
|
48
39
|
|
49
|
-
# Mutate method send in body scope of `send`
|
50
|
-
#
|
51
|
-
# @return [undefined]
|
52
40
|
def mutate_body_receiver
|
53
41
|
return if n_lambda?(send) || !n_send?(body)
|
54
42
|
|
@@ -57,9 +45,6 @@ module Mutant
|
|
57
45
|
emit(s(:send, send, body_meta.selector, *body_meta.arguments))
|
58
46
|
end
|
59
47
|
|
60
|
-
# Test for valid send mutations
|
61
|
-
#
|
62
|
-
# @return [true, false, nil]
|
63
48
|
def valid_send_mutation?(node)
|
64
49
|
return unless n_send?(node)
|
65
50
|
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mutant
|
4
|
+
class Mutator
|
5
|
+
class Node
|
6
|
+
class BlockPass < self
|
7
|
+
|
8
|
+
handle(:block_pass)
|
9
|
+
|
10
|
+
children :argument
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def dispatch
|
15
|
+
emit_argument_mutations
|
16
|
+
emit_symbol_to_proc_mutations
|
17
|
+
end
|
18
|
+
|
19
|
+
def emit_symbol_to_proc_mutations
|
20
|
+
return unless n_sym?(argument)
|
21
|
+
|
22
|
+
Send::SELECTOR_REPLACEMENTS.fetch(*argument, EMPTY_ARRAY).each do |method|
|
23
|
+
emit_argument(s(:sym, method))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end # Block
|
27
|
+
end # Node
|
28
|
+
end # Mutator
|
29
|
+
end # Mutant
|
@@ -13,9 +13,6 @@ module Mutant
|
|
13
13
|
|
14
14
|
private
|
15
15
|
|
16
|
-
# Emit mutations
|
17
|
-
#
|
18
|
-
# @return [undefined]
|
19
16
|
def dispatch
|
20
17
|
emit_singletons
|
21
18
|
emit_condition_mutations if condition
|
@@ -23,9 +20,6 @@ module Mutant
|
|
23
20
|
emit_else_mutations
|
24
21
|
end
|
25
22
|
|
26
|
-
# Emit when mutations
|
27
|
-
#
|
28
|
-
# @return [undefined]
|
29
23
|
def emit_when_mutations
|
30
24
|
indices = children.each_index.drop(1).take(children.length - 2)
|
31
25
|
one = indices.one?
|
@@ -35,9 +29,6 @@ module Mutant
|
|
35
29
|
end
|
36
30
|
end
|
37
31
|
|
38
|
-
# Emit else mutations
|
39
|
-
#
|
40
|
-
# @return [undefined]
|
41
32
|
def emit_else_mutations
|
42
33
|
else_branch = children.last
|
43
34
|
else_index = children.length - 1
|
@@ -8,9 +8,6 @@ module Mutant
|
|
8
8
|
|
9
9
|
private
|
10
10
|
|
11
|
-
# Emit mutations
|
12
|
-
#
|
13
|
-
# @return [undefined]
|
14
11
|
def dispatch
|
15
12
|
emit_arguments_mutations
|
16
13
|
emit_optarg_body_assignments
|
@@ -20,9 +17,6 @@ module Mutant
|
|
20
17
|
emit_body_mutations if body
|
21
18
|
end
|
22
19
|
|
23
|
-
# Emit mutations with optional arguments as assignments in method
|
24
|
-
#
|
25
|
-
# @return [undefined]
|
26
20
|
def emit_optarg_body_assignments
|
27
21
|
arguments.children.each do |argument|
|
28
22
|
next unless n_optarg?(argument) && AST::Meta::Optarg.new(argument).used?
|
@@ -31,11 +25,6 @@ module Mutant
|
|
31
25
|
end
|
32
26
|
end
|
33
27
|
|
34
|
-
# Emit valid body ASTs depending on instance body
|
35
|
-
#
|
36
|
-
# @param node [Parser::AST::Node]
|
37
|
-
#
|
38
|
-
# @return [undefined]
|
39
28
|
def emit_body_prepend(node)
|
40
29
|
if body
|
41
30
|
emit_body(s(:begin, node, body))
|
@@ -12,9 +12,6 @@ module Mutant
|
|
12
12
|
|
13
13
|
private
|
14
14
|
|
15
|
-
# Emit mutations
|
16
|
-
#
|
17
|
-
# @return [undefined]
|
18
15
|
def dispatch
|
19
16
|
emit_singletons
|
20
17
|
mutate_condition
|
@@ -22,9 +19,6 @@ module Mutant
|
|
22
19
|
mutate_else_branch
|
23
20
|
end
|
24
21
|
|
25
|
-
# Emit condition mutations
|
26
|
-
#
|
27
|
-
# @return [undefined]
|
28
22
|
def mutate_condition
|
29
23
|
emit_condition_mutations do |node|
|
30
24
|
!n_self?(node)
|
@@ -34,9 +28,6 @@ module Mutant
|
|
34
28
|
emit_type(N_FALSE, if_branch, else_branch)
|
35
29
|
end
|
36
30
|
|
37
|
-
# Emit if branch mutations
|
38
|
-
#
|
39
|
-
# @return [undefined]
|
40
31
|
def mutate_if_branch
|
41
32
|
emit_type(condition, else_branch, nil) if else_branch
|
42
33
|
return unless if_branch
|
@@ -45,9 +36,6 @@ module Mutant
|
|
45
36
|
emit_type(condition, if_branch, nil)
|
46
37
|
end
|
47
38
|
|
48
|
-
# Emit else branch mutations
|
49
|
-
#
|
50
|
-
# @return [undefined]
|
51
39
|
def mutate_else_branch
|
52
40
|
return unless else_branch
|
53
41
|
emit(else_branch)
|
@@ -14,9 +14,6 @@ module Mutant
|
|
14
14
|
|
15
15
|
private
|
16
16
|
|
17
|
-
# Emit mutations
|
18
|
-
#
|
19
|
-
# @return [undefined]
|
20
17
|
def dispatch
|
21
18
|
emit_singletons
|
22
19
|
emit_receiver_mutations { |node| !n_nil?(node) }
|
@@ -26,9 +23,6 @@ module Mutant
|
|
26
23
|
mutate_indices
|
27
24
|
end
|
28
25
|
|
29
|
-
# Emit send forms
|
30
|
-
#
|
31
|
-
# @return [undefined]
|
32
26
|
def emit_send_forms
|
33
27
|
return if left_assignment?
|
34
28
|
|
@@ -37,9 +31,6 @@ module Mutant
|
|
37
31
|
end
|
38
32
|
end
|
39
33
|
|
40
|
-
# Emit mutation `foo[n..-1]` -> `foo.drop(n)`
|
41
|
-
#
|
42
|
-
# @return [undefined]
|
43
34
|
def emit_drop_mutation
|
44
35
|
return unless indices.one? && n_irange?(Mutant::Util.one(indices))
|
45
36
|
|
@@ -50,9 +41,6 @@ module Mutant
|
|
50
41
|
emit(s(:send, receiver, :drop, start))
|
51
42
|
end
|
52
43
|
|
53
|
-
# Mutate indices
|
54
|
-
#
|
55
|
-
# @return [undefined]
|
56
44
|
def mutate_indices
|
57
45
|
children_indices(index_range).each do |index|
|
58
46
|
emit_propagation(children.fetch(index)) unless left_assignment?
|
@@ -61,9 +49,6 @@ module Mutant
|
|
61
49
|
end
|
62
50
|
end
|
63
51
|
|
64
|
-
# The index nodes
|
65
|
-
#
|
66
|
-
# @return [Enumerable<Parser::AST::Node>]
|
67
52
|
def indices
|
68
53
|
children[index_range]
|
69
54
|
end
|
@@ -74,9 +59,6 @@ module Mutant
|
|
74
59
|
|
75
60
|
private
|
76
61
|
|
77
|
-
# The range index children can be found
|
78
|
-
#
|
79
|
-
# @return [Range]
|
80
62
|
def index_range
|
81
63
|
NO_VALUE_RANGE
|
82
64
|
end
|
@@ -92,9 +74,6 @@ module Mutant
|
|
92
74
|
|
93
75
|
private
|
94
76
|
|
95
|
-
# Emit mutations
|
96
|
-
#
|
97
|
-
# @return [undefined]
|
98
77
|
def dispatch
|
99
78
|
super()
|
100
79
|
|
@@ -105,16 +84,10 @@ module Mutant
|
|
105
84
|
mutate_child(children.length.pred)
|
106
85
|
end
|
107
86
|
|
108
|
-
# Emit index read
|
109
|
-
#
|
110
|
-
# @return [undefined]
|
111
87
|
def emit_index_read
|
112
88
|
emit(s(:index, receiver, *children[index_range]))
|
113
89
|
end
|
114
90
|
|
115
|
-
# Index indices
|
116
|
-
#
|
117
|
-
# @return [Range<Integer>]
|
118
91
|
def index_range
|
119
92
|
if left_assignment?
|
120
93
|
NO_VALUE_RANGE
|