mutant 0.9.6 → 0.9.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +121 -0
- data/.rubocop.yml +203 -0
- data/Changelog.md +26 -0
- data/Gemfile +0 -7
- data/Gemfile.lock +27 -87
- data/Gemfile.shared +7 -0
- data/README.md +88 -27
- data/config/reek.yml +1 -0
- data/lib/mutant.rb +4 -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/fork.rb +0 -22
- 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/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/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 -67
- 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 +0 -3
- 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 +2 -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
- data/meta/and.rb +0 -2
- data/meta/array.rb +0 -3
- data/meta/begin.rb +0 -3
- data/meta/block.rb +0 -3
- data/meta/break.rb +0 -1
- data/meta/case.rb +0 -6
- data/meta/casgn.rb +0 -3
- data/meta/cvasgn.rb +0 -1
- data/meta/def.rb +0 -7
- data/meta/ensure.rb +0 -1
- data/meta/false.rb +0 -1
- data/meta/gvasgn.rb +0 -1
- data/meta/hash.rb +0 -4
- data/meta/if.rb +0 -5
- data/meta/ivasgn.rb +0 -1
- data/meta/kwbegin.rb +0 -1
- data/meta/lvasgn.rb +0 -1
- data/meta/match_current_line.rb +0 -1
- data/meta/next.rb +0 -1
- data/meta/or.rb +0 -2
- data/meta/range.rb +24 -0
- data/meta/regexp.rb +0 -1
- data/meta/rescue.rb +0 -6
- data/meta/sclass.rb +12 -0
- data/meta/send.rb +0 -4
- data/meta/true.rb +0 -1
- data/meta/until.rb +0 -1
- data/meta/while.rb +0 -2
- data/meta/yield.rb +0 -1
- data/mutant.gemspec +7 -4
- data/mutant.sh +12 -0
- data/spec/spec_helper.rb +37 -22
- data/spec/unit/mutant/ast/find_metaclass_containing_spec.rb +64 -0
- data/spec/unit/mutant/expression/methods_spec.rb +7 -2
- data/spec/unit/mutant/license_spec.rb +15 -3
- data/spec/unit/mutant/matcher/method/metaclass_spec.rb +108 -0
- data/spec/unit/mutant/matcher/methods/metaclass_spec.rb +62 -0
- data/spec/unit/mutant/matcher/namespace_spec.rb +3 -1
- data/spec/unit/mutant/matcher/scope_spec.rb +11 -1
- data/spec/unit/mutant/meta/example_spec.rb +3 -3
- data/spec/unit/mutant/mutator/node_spec.rb +1 -6
- data/spec/unit/mutant/registry_spec.rb +52 -25
- data/spec/unit/mutant/reporter/cli/printer/env_result_spec.rb +1 -1
- data/spec/unit/mutant/reporter/cli/printer/mutation_progress_result_spec.rb +2 -2
- data/spec/unit/mutant/reporter/cli/printer/mutation_result_spec.rb +12 -12
- data/spec/unit/mutant/reporter/cli/printer/subject_result_spec.rb +1 -1
- data/spec/unit/mutant/reporter/cli/printer_spec.rb +4 -4
- data/spec/unit/mutant/reporter/cli_spec.rb +1 -1
- data/spec/unit/mutant/subject/method/instance_spec.rb +117 -22
- data/spec/unit/mutant/subject/method/metaclass_spec.rb +63 -0
- data/test_app/Gemfile.minitest +2 -0
- data/test_app/lib/test_app.rb +5 -0
- data/test_app/lib/test_app/metaclasses.rb +108 -0
- metadata +74 -25
- data/.circleci/config.yml +0 -53
- data/config/rubocop.yml +0 -205
- data/lib/mutant/color.rb +0 -43
- data/lib/mutant/diff.rb +0 -114
- data/spec/shared/base_behavior.rb +0 -45
- data/spec/support/test_app.rb +0 -7
- data/spec/support/warnings.yml +0 -6
- data/spec/unit/mutant/diff_spec.rb +0 -189
@@ -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
|
|
@@ -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,78 +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
|
-
eflipflop
|
24
|
-
empty
|
25
|
-
ensure
|
26
|
-
for
|
27
|
-
forward_args
|
28
|
-
forwarded_args
|
29
|
-
hash_pattern
|
30
|
-
ident
|
31
|
-
if_guard
|
32
|
-
iflipflop
|
33
|
-
in_match
|
34
|
-
in_pattern
|
35
|
-
kwnilarg
|
36
|
-
kwrestarg
|
37
|
-
kwsplat
|
38
|
-
match_alt
|
39
|
-
match_as
|
40
|
-
match_nil_pattern
|
41
|
-
match_rest
|
42
|
-
match_var
|
43
|
-
match_with_lvasgn
|
44
|
-
match_with_trailing_comma
|
45
|
-
module
|
46
|
-
numargs
|
47
|
-
numblock
|
48
|
-
objc_kwarg
|
49
|
-
objc_restarg
|
50
|
-
objc_varargs
|
51
|
-
pin
|
52
|
-
postexe
|
53
|
-
preexe
|
54
|
-
rational
|
55
|
-
redo
|
56
|
-
restarg
|
57
|
-
restarg_expr
|
58
|
-
retry
|
59
|
-
root
|
60
|
-
sclass
|
61
|
-
shadowarg
|
62
|
-
undef
|
63
|
-
unless_guard
|
64
|
-
until_post
|
65
|
-
while_post
|
66
|
-
xstr
|
67
|
-
]
|
68
|
-
|
69
|
-
# These nodes still need a dedicated mutator,
|
70
|
-
# your contribution is that close!
|
71
|
-
handle(*unsupported_nodes)
|
72
|
-
|
73
9
|
private
|
74
10
|
|
75
|
-
# Emit mutations
|
76
|
-
#
|
77
|
-
# @return [undefined]
|
78
11
|
def dispatch
|
79
12
|
children.each_with_index do |child, index|
|
80
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)
|