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
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mutant
|
4
|
+
class Mutator
|
5
|
+
class Node
|
6
|
+
# Namespace for singleton class mutations (class << some_obj)
|
7
|
+
class Sclass < self
|
8
|
+
handle :sclass
|
9
|
+
|
10
|
+
children :expr, :body
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def dispatch
|
15
|
+
emit_body_mutations if body
|
16
|
+
end
|
17
|
+
end # Class
|
18
|
+
end # Node
|
19
|
+
end # Mutator
|
20
|
+
end # Mutant
|
@@ -36,8 +36,8 @@ module Mutant
|
|
36
36
|
:== => %i[eql? equal?],
|
37
37
|
:>= => %i[> == eql? equal?],
|
38
38
|
:<= => %i[< == eql? equal?],
|
39
|
-
:> => %i[==
|
40
|
-
:< => %i[==
|
39
|
+
:> => %i[== eql? equal?],
|
40
|
+
:< => %i[== eql? equal?]
|
41
41
|
)
|
42
42
|
|
43
43
|
RECEIVER_SELECTOR_REPLACEMENTS = IceNine.deep_freeze(
|
@@ -48,9 +48,6 @@ module Mutant
|
|
48
48
|
|
49
49
|
private
|
50
50
|
|
51
|
-
# Emit mutations
|
52
|
-
#
|
53
|
-
# @return [undefined]
|
54
51
|
def dispatch
|
55
52
|
emit_singletons
|
56
53
|
|
@@ -63,23 +60,14 @@ module Mutant
|
|
63
60
|
end
|
64
61
|
end
|
65
62
|
|
66
|
-
# AST metadata for node
|
67
|
-
#
|
68
|
-
# @return [AST::Meta::Send]
|
69
63
|
def meta
|
70
64
|
AST::Meta::Send.new(node)
|
71
65
|
end
|
72
66
|
memoize :meta
|
73
67
|
|
74
|
-
# Arguments being send
|
75
|
-
#
|
76
|
-
# @return [Enumerable<Parser::AST::Node>]
|
77
68
|
alias_method :arguments, :remaining_children
|
78
69
|
private :arguments
|
79
70
|
|
80
|
-
# Perform normal, non special case dispatch
|
81
|
-
#
|
82
|
-
# @return [undefined]
|
83
71
|
def normal_dispatch
|
84
72
|
emit_naked_receiver
|
85
73
|
emit_selector_replacement
|
@@ -90,10 +78,9 @@ module Mutant
|
|
90
78
|
mutate_arguments
|
91
79
|
end
|
92
80
|
|
93
|
-
# Emit mutations which only correspond to one selector
|
94
|
-
#
|
95
|
-
# @return [undefined]
|
96
81
|
def emit_selector_specific_mutations
|
82
|
+
emit_array_mutation
|
83
|
+
emit_static_send
|
97
84
|
emit_const_get_mutation
|
98
85
|
emit_integer_mutation
|
99
86
|
emit_dig_mutation
|
@@ -101,9 +88,28 @@ module Mutant
|
|
101
88
|
emit_lambda_mutation
|
102
89
|
end
|
103
90
|
|
104
|
-
|
105
|
-
|
106
|
-
|
91
|
+
def emit_array_mutation
|
92
|
+
return unless selector.equal?(:Array) && possible_kernel_method?
|
93
|
+
|
94
|
+
emit(s(:array, *arguments))
|
95
|
+
end
|
96
|
+
|
97
|
+
def emit_static_send
|
98
|
+
return unless %i[__send__ send public_send].include?(selector)
|
99
|
+
|
100
|
+
dynamic_selector, *actual_arguments = *arguments
|
101
|
+
|
102
|
+
return unless n_sym?(dynamic_selector)
|
103
|
+
|
104
|
+
method_name = AST::Meta::Symbol.new(dynamic_selector).name
|
105
|
+
|
106
|
+
emit(s(node.type, receiver, method_name, *actual_arguments))
|
107
|
+
end
|
108
|
+
|
109
|
+
def possible_kernel_method?
|
110
|
+
receiver.nil? || receiver.eql?(s(:const, nil, :Kernel))
|
111
|
+
end
|
112
|
+
|
107
113
|
def emit_receiver_selector_mutations
|
108
114
|
return unless meta.receiver_possible_top_level_const?
|
109
115
|
|
@@ -113,9 +119,6 @@ module Mutant
|
|
113
119
|
.each(&method(:emit_selector))
|
114
120
|
end
|
115
121
|
|
116
|
-
# Emit mutation from `!!foo` to `foo`
|
117
|
-
#
|
118
|
-
# @return [undefined]
|
119
122
|
def emit_double_negation_mutation
|
120
123
|
return unless selector.equal?(:!) && n_send?(receiver)
|
121
124
|
|
@@ -123,19 +126,10 @@ module Mutant
|
|
123
126
|
emit(negated.receiver) if negated.selector.equal?(:!)
|
124
127
|
end
|
125
128
|
|
126
|
-
# Emit mutation from proc definition to lambda
|
127
|
-
#
|
128
|
-
# @return [undefined]
|
129
129
|
def emit_lambda_mutation
|
130
130
|
emit(s(:send, nil, :lambda)) if meta.proc?
|
131
131
|
end
|
132
132
|
|
133
|
-
# Emit mutation for `#dig`
|
134
|
-
#
|
135
|
-
# - Mutates `foo.dig(a, b)` to `foo.fetch(a).dig(b)`
|
136
|
-
# - Mutates `foo.dig(a)` to `foo.fetch(a)`
|
137
|
-
#
|
138
|
-
# @return [undefined]
|
139
133
|
def emit_dig_mutation
|
140
134
|
return if !selector.equal?(:dig) || arguments.none?
|
141
135
|
|
@@ -148,41 +142,26 @@ module Mutant
|
|
148
142
|
emit(s(:send, fetch_mutation, :dig, *tail))
|
149
143
|
end
|
150
144
|
|
151
|
-
# Emit mutation from `to_i` to `Integer(...)`
|
152
|
-
#
|
153
|
-
# @return [undefined]
|
154
145
|
def emit_integer_mutation
|
155
146
|
return unless selector.equal?(:to_i)
|
156
147
|
|
157
148
|
emit(s(:send, nil, :Integer, receiver))
|
158
149
|
end
|
159
150
|
|
160
|
-
# Emit mutation from `const_get` to const literal
|
161
|
-
#
|
162
|
-
# @return [undefined]
|
163
151
|
def emit_const_get_mutation
|
164
152
|
return unless selector.equal?(:const_get) && n_sym?(arguments.first)
|
165
153
|
|
166
154
|
emit(s(:const, receiver, AST::Meta::Symbol.new(arguments.first).name))
|
167
155
|
end
|
168
156
|
|
169
|
-
# Emit selector replacement
|
170
|
-
#
|
171
|
-
# @return [undefined]
|
172
157
|
def emit_selector_replacement
|
173
158
|
SELECTOR_REPLACEMENTS.fetch(selector, EMPTY_ARRAY).each(&method(:emit_selector))
|
174
159
|
end
|
175
160
|
|
176
|
-
# Emit naked receiver mutation
|
177
|
-
#
|
178
|
-
# @return [undefined]
|
179
161
|
def emit_naked_receiver
|
180
162
|
emit(receiver) if receiver
|
181
163
|
end
|
182
164
|
|
183
|
-
# Mutate arguments
|
184
|
-
#
|
185
|
-
# @return [undefined]
|
186
165
|
def mutate_arguments
|
187
166
|
emit_type(receiver, selector)
|
188
167
|
remaining_children_with_index.each do |_node, index|
|
@@ -191,25 +170,14 @@ module Mutant
|
|
191
170
|
end
|
192
171
|
end
|
193
172
|
|
194
|
-
# Mutate argument
|
195
|
-
#
|
196
|
-
# @param [Integer] index
|
197
|
-
#
|
198
|
-
# @return [undefined]
|
199
173
|
def mutate_argument_index(index)
|
200
174
|
mutate_child(index) { |node| !n_begin?(node) }
|
201
175
|
end
|
202
176
|
|
203
|
-
# Emit argument propagation
|
204
|
-
#
|
205
|
-
# @return [undefined]
|
206
177
|
def emit_argument_propagation
|
207
178
|
emit_propagation(Mutant::Util.one(arguments)) if arguments.one?
|
208
179
|
end
|
209
180
|
|
210
|
-
# Emit receiver mutations
|
211
|
-
#
|
212
|
-
# @return [undefined]
|
213
181
|
def mutate_receiver
|
214
182
|
return unless receiver
|
215
183
|
emit_implicit_self
|
@@ -218,9 +186,6 @@ module Mutant
|
|
218
186
|
end
|
219
187
|
end
|
220
188
|
|
221
|
-
# Emit implicit self mutation
|
222
|
-
#
|
223
|
-
# @return [undefined]
|
224
189
|
def emit_implicit_self
|
225
190
|
emit_receiver(nil) if n_self?(receiver) && !(
|
226
191
|
KEYWORDS.include?(selector) ||
|
@@ -12,26 +12,17 @@ module Mutant
|
|
12
12
|
|
13
13
|
private
|
14
14
|
|
15
|
-
# Emit mutations
|
16
|
-
#
|
17
|
-
# @return [undefined]
|
18
15
|
def dispatch
|
19
16
|
normal_dispatch
|
20
17
|
emit_attribute_read
|
21
18
|
end
|
22
19
|
|
23
|
-
# Mutate arguments
|
24
|
-
#
|
25
|
-
# @return [undefined]
|
26
20
|
def mutate_arguments
|
27
21
|
remaining_children_indices.each do |index|
|
28
22
|
mutate_child(index)
|
29
23
|
end
|
30
24
|
end
|
31
25
|
|
32
|
-
# Emit attribute read
|
33
|
-
#
|
34
|
-
# @return [undefined]
|
35
26
|
def emit_attribute_read
|
36
27
|
emit_type(receiver, selector[ATTRIBUTE_RANGE].to_sym)
|
37
28
|
end
|
@@ -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(left)
|
20
17
|
emit_left_mutations
|
@@ -24,9 +21,6 @@ module Mutant
|
|
24
21
|
emit_not_equality_mutations
|
25
22
|
end
|
26
23
|
|
27
|
-
# Emit mutations for `!=`
|
28
|
-
#
|
29
|
-
# @return [undefined]
|
30
24
|
def emit_not_equality_mutations
|
31
25
|
return unless operator.equal?(:'!=')
|
32
26
|
|
@@ -34,11 +28,6 @@ module Mutant
|
|
34
28
|
emit_not_equality_mutation(:equal?)
|
35
29
|
end
|
36
30
|
|
37
|
-
# Emit negated method sends with specified operator
|
38
|
-
#
|
39
|
-
# @param new_operator [Symbol] selector to be negated
|
40
|
-
#
|
41
|
-
# @return [undefined]
|
42
31
|
def emit_not_equality_mutation(new_operator)
|
43
32
|
emit(n_not(s(:send, left, new_operator, right)))
|
44
33
|
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
|
if body
|
19
16
|
mutate_body
|
@@ -23,9 +20,6 @@ module Mutant
|
|
23
20
|
mutate_conditions
|
24
21
|
end
|
25
22
|
|
26
|
-
# Emit condition mutations
|
27
|
-
#
|
28
|
-
# @return [undefined]
|
29
23
|
def mutate_conditions
|
30
24
|
conditions = children.length - 1
|
31
25
|
children[0..-2].each_index do |index|
|
@@ -34,27 +28,14 @@ module Mutant
|
|
34
28
|
end
|
35
29
|
end
|
36
30
|
|
37
|
-
# Emit body mutations
|
38
|
-
#
|
39
|
-
# @return [undefined]
|
40
31
|
def mutate_body
|
41
32
|
mutate_child(body_index)
|
42
33
|
end
|
43
34
|
|
44
|
-
# Body node
|
45
|
-
#
|
46
|
-
# @return [Parser::AST::Node]
|
47
|
-
# if body is present
|
48
|
-
#
|
49
|
-
# @return [nil]
|
50
|
-
# otherwise
|
51
35
|
def body
|
52
36
|
children.fetch(body_index)
|
53
37
|
end
|
54
38
|
|
55
|
-
# Index of body node
|
56
|
-
#
|
57
|
-
# @return [Integer]
|
58
39
|
def body_index
|
59
40
|
children.length - 1
|
60
41
|
end
|
@@ -12,9 +12,6 @@ module Mutant
|
|
12
12
|
|
13
13
|
private
|
14
14
|
|
15
|
-
# Emit element presence mutations
|
16
|
-
#
|
17
|
-
# @return [undefined]
|
18
15
|
def dispatch
|
19
16
|
input.each_index do |index|
|
20
17
|
dup = dup_input
|
@@ -30,9 +27,6 @@ module Mutant
|
|
30
27
|
|
31
28
|
private
|
32
29
|
|
33
|
-
# Emit mutations
|
34
|
-
#
|
35
|
-
# @return [undefined]
|
36
30
|
def dispatch
|
37
31
|
input.each_with_index do |element, index|
|
38
32
|
Mutator.mutate(element).each do |mutation|
|
data/lib/mutant/parallel.rb
CHANGED
@@ -36,24 +36,11 @@ module Mutant
|
|
36
36
|
)
|
37
37
|
end
|
38
38
|
|
39
|
-
# Start threads
|
40
|
-
#
|
41
|
-
# @param [Config] config
|
42
|
-
# @param [Worker] worker
|
43
|
-
#
|
44
|
-
# @return [Array<Thread>]
|
45
39
|
def self.threads(config, worker)
|
46
40
|
Array.new(config.jobs) { config.thread.new(&worker.method(:call)) }
|
47
41
|
end
|
48
42
|
private_class_method :threads
|
49
43
|
|
50
|
-
# Create shared variable
|
51
|
-
#
|
52
|
-
# @param [Class] klass
|
53
|
-
# @param [Config] config
|
54
|
-
#
|
55
|
-
# @return [Variable]
|
56
|
-
#
|
57
44
|
# ignore :reek:LongParameterList
|
58
45
|
def self.shared(klass, config, **attributes)
|
59
46
|
klass.new(
|
@@ -27,22 +27,12 @@ module Mutant
|
|
27
27
|
|
28
28
|
private
|
29
29
|
|
30
|
-
# Possibly finalize the exeuction
|
31
|
-
#
|
32
|
-
# @param [Status]
|
33
|
-
#
|
34
|
-
# @return [Status]
|
35
30
|
def finalize(status)
|
36
31
|
status.tap do
|
37
32
|
threads.each(&:join) if status.done?
|
38
33
|
end
|
39
34
|
end
|
40
35
|
|
41
|
-
# Get status
|
42
|
-
#
|
43
|
-
# @return [Status]
|
44
|
-
#
|
45
|
-
# ignore :reek:NestedIterators
|
46
36
|
def status
|
47
37
|
var_active_jobs.with do |active_jobs|
|
48
38
|
var_sink.with do |sink|
|