mutant 0.9.7 → 0.9.12
Sign up to get free protection for your applications and to get access to all the features.
- 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 +0 -36
- data/lib/mutant/cli.rb +5 -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 +0 -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 -74
- 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/registry.rb +2 -7
- 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 +0 -18
- 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/.circleci/config.yml +0 -53
- data/.gitignore +0 -38
- data/.rspec +0 -5
- data/.rubocop.yml +0 -7
- data/Changelog.md +0 -71
- data/Gemfile +0 -14
- data/Gemfile.lock +0 -167
- data/Gemfile.shared +0 -3
- 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 -47
- 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
@@ -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))
|
@@ -3,85 +3,11 @@
|
|
3
3
|
module Mutant
|
4
4
|
class Mutator
|
5
5
|
class Node
|
6
|
-
|
7
6
|
# Generic mutator
|
8
7
|
class Generic < self
|
9
8
|
|
10
|
-
unsupported_nodes = %i[
|
11
|
-
__FILE__
|
12
|
-
__LINE__
|
13
|
-
alias
|
14
|
-
arg_expr
|
15
|
-
array_pattern
|
16
|
-
array_pattern_with_tail
|
17
|
-
back_ref
|
18
|
-
blockarg
|
19
|
-
blockarg_expr
|
20
|
-
case_match
|
21
|
-
complex
|
22
|
-
const_pattern
|
23
|
-
def_e
|
24
|
-
defs_e
|
25
|
-
eflipflop
|
26
|
-
empty
|
27
|
-
empty_else
|
28
|
-
ensure
|
29
|
-
find_pattern
|
30
|
-
for
|
31
|
-
forward_arg
|
32
|
-
forward_args
|
33
|
-
forwarded_args
|
34
|
-
hash_pattern
|
35
|
-
ident
|
36
|
-
if_guard
|
37
|
-
iflipflop
|
38
|
-
in_match
|
39
|
-
in_pattern
|
40
|
-
kwnilarg
|
41
|
-
kwrestarg
|
42
|
-
kwsplat
|
43
|
-
match_alt
|
44
|
-
match_as
|
45
|
-
match_nil_pattern
|
46
|
-
match_rest
|
47
|
-
match_var
|
48
|
-
match_with_lvasgn
|
49
|
-
match_with_trailing_comma
|
50
|
-
module
|
51
|
-
mrasgn
|
52
|
-
numargs
|
53
|
-
numblock
|
54
|
-
objc_kwarg
|
55
|
-
objc_restarg
|
56
|
-
objc_varargs
|
57
|
-
pin
|
58
|
-
postexe
|
59
|
-
preexe
|
60
|
-
rasgn
|
61
|
-
rational
|
62
|
-
redo
|
63
|
-
restarg
|
64
|
-
restarg_expr
|
65
|
-
retry
|
66
|
-
root
|
67
|
-
sclass
|
68
|
-
shadowarg
|
69
|
-
undef
|
70
|
-
unless_guard
|
71
|
-
until_post
|
72
|
-
while_post
|
73
|
-
xstr
|
74
|
-
]
|
75
|
-
|
76
|
-
# These nodes still need a dedicated mutator,
|
77
|
-
# your contribution is that close!
|
78
|
-
handle(*unsupported_nodes)
|
79
|
-
|
80
9
|
private
|
81
10
|
|
82
|
-
# Emit mutations
|
83
|
-
#
|
84
|
-
# @return [undefined]
|
85
11
|
def dispatch
|
86
12
|
children.each_with_index do |child, index|
|
87
13
|
mutate_child(index) if child.instance_of?(::Parser::AST::Node)
|
@@ -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)
|