mutant 0.9.7 → 0.9.12
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 +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)
|