mutest 0.0.9 → 0.0.10
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 +5 -5
- data/.circleci/config.yml +38 -0
- data/{config/rubocop.yml → .rubocop.yml} +80 -183
- data/CHANGELOG.md +8 -0
- data/Gemfile +2 -3
- data/Gemfile.lock +41 -52
- data/README.md +16 -0
- data/Rakefile +1 -1
- data/lib/mutest.rb +5 -4
- data/lib/mutest/actor.rb +7 -6
- data/lib/mutest/actor/env.rb +3 -3
- data/lib/mutest/actor/mailbox.rb +5 -4
- data/lib/mutest/actor/receiver.rb +6 -5
- data/lib/mutest/actor/sender.rb +5 -4
- data/lib/mutest/ast.rb +4 -3
- data/lib/mutest/ast/meta.rb +3 -3
- data/lib/mutest/ast/meta/const.rb +7 -5
- data/lib/mutest/ast/meta/optarg.rb +6 -5
- data/lib/mutest/ast/meta/resbody.rb +6 -5
- data/lib/mutest/ast/meta/restarg.rb +6 -5
- data/lib/mutest/ast/meta/send.rb +8 -20
- data/lib/mutest/ast/meta/symbol.rb +6 -5
- data/lib/mutest/ast/named_children.rb +5 -5
- data/lib/mutest/ast/node_predicates.rb +4 -4
- data/lib/mutest/ast/nodes.rb +3 -3
- data/lib/mutest/ast/regexp.rb +3 -3
- data/lib/mutest/ast/regexp/transformer.rb +19 -11
- data/lib/mutest/ast/regexp/transformer/alternative.rb +6 -6
- data/lib/mutest/ast/regexp/transformer/character_set.rb +7 -7
- data/lib/mutest/ast/regexp/transformer/direct.rb +7 -7
- data/lib/mutest/ast/regexp/transformer/options_group.rb +7 -7
- data/lib/mutest/ast/regexp/transformer/quantifier.rb +11 -13
- data/lib/mutest/ast/regexp/transformer/recursive.rb +7 -7
- data/lib/mutest/ast/regexp/transformer/root.rb +6 -6
- data/lib/mutest/ast/regexp/transformer/text.rb +7 -7
- data/lib/mutest/ast/sexp.rb +3 -3
- data/lib/mutest/ast/types.rb +8 -6
- data/lib/mutest/cli.rb +5 -3
- data/lib/mutest/color.rb +4 -3
- data/lib/mutest/config.rb +4 -3
- data/lib/mutest/context.rb +4 -3
- data/lib/mutest/diff.rb +5 -3
- data/lib/mutest/env.rb +5 -5
- data/lib/mutest/env/bootstrap.rb +7 -5
- data/lib/mutest/expression.rb +7 -5
- data/lib/mutest/expression/method.rb +4 -4
- data/lib/mutest/expression/methods.rb +4 -4
- data/lib/mutest/expression/namespace.rb +9 -8
- data/lib/mutest/expression/parser.rb +9 -8
- data/lib/mutest/integration.rb +5 -3
- data/lib/mutest/integration/null.rb +3 -3
- data/lib/mutest/isolation.rb +2 -2
- data/lib/mutest/isolation/fork.rb +4 -4
- data/lib/mutest/isolation/none.rb +4 -4
- data/lib/mutest/loader.rb +2 -2
- data/lib/mutest/matcher.rb +4 -3
- data/lib/mutest/matcher/chain.rb +3 -3
- data/lib/mutest/matcher/compiler.rb +7 -5
- data/lib/mutest/matcher/config.rb +5 -4
- data/lib/mutest/matcher/filter.rb +3 -3
- data/lib/mutest/matcher/method.rb +13 -13
- data/lib/mutest/matcher/method/instance.rb +6 -6
- data/lib/mutest/matcher/method/singleton.rb +5 -5
- data/lib/mutest/matcher/methods.rb +7 -6
- data/lib/mutest/matcher/namespace.rb +3 -3
- data/lib/mutest/matcher/null.rb +3 -3
- data/lib/mutest/matcher/scope.rb +3 -3
- data/lib/mutest/matcher/static.rb +3 -3
- data/lib/mutest/meta.rb +4 -4
- data/lib/mutest/meta/example.rb +5 -4
- data/lib/mutest/meta/example/dsl.rb +12 -11
- data/lib/mutest/meta/example/verification.rb +7 -6
- data/lib/mutest/mutation.rb +7 -6
- data/lib/mutest/mutator.rb +6 -6
- data/lib/mutest/mutator/node.rb +19 -7
- data/lib/mutest/mutator/node/and_asgn.rb +4 -4
- data/lib/mutest/mutator/node/argument.rb +6 -5
- data/lib/mutest/mutator/node/arguments.rb +18 -5
- data/lib/mutest/mutator/node/begin.rb +4 -4
- data/lib/mutest/mutator/node/binary.rb +4 -4
- data/lib/mutest/mutator/node/block.rb +6 -5
- data/lib/mutest/mutator/node/block_pass.rb +4 -4
- data/lib/mutest/mutator/node/break.rb +4 -4
- data/lib/mutest/mutator/node/case.rb +6 -4
- data/lib/mutest/mutator/node/class.rb +4 -4
- data/lib/mutest/mutator/node/conditional_loop.rb +4 -4
- data/lib/mutest/mutator/node/const.rb +4 -4
- data/lib/mutest/mutator/node/define.rb +6 -6
- data/lib/mutest/mutator/node/defined.rb +4 -4
- data/lib/mutest/mutator/node/dstr.rb +4 -4
- data/lib/mutest/mutator/node/dsym.rb +4 -4
- data/lib/mutest/mutator/node/generic.rb +5 -4
- data/lib/mutest/mutator/node/if.rb +6 -4
- data/lib/mutest/mutator/node/index.rb +128 -0
- data/lib/mutest/mutator/node/kwbegin.rb +4 -4
- data/lib/mutest/mutator/node/literal.rb +4 -4
- data/lib/mutest/mutator/node/literal/array.rb +8 -6
- data/lib/mutest/mutator/node/literal/boolean.rb +5 -5
- data/lib/mutest/mutator/node/literal/fixnum.rb +5 -5
- data/lib/mutest/mutator/node/literal/float.rb +5 -5
- data/lib/mutest/mutator/node/literal/hash.rb +6 -6
- data/lib/mutest/mutator/node/literal/nil.rb +5 -5
- data/lib/mutest/mutator/node/literal/range.rb +5 -5
- data/lib/mutest/mutator/node/literal/regex.rb +5 -5
- data/lib/mutest/mutator/node/literal/string.rb +5 -5
- data/lib/mutest/mutator/node/literal/symbol.rb +5 -5
- data/lib/mutest/mutator/node/masgn.rb +4 -4
- data/lib/mutest/mutator/node/match_current_line.rb +4 -4
- data/lib/mutest/mutator/node/mlhs.rb +4 -4
- data/lib/mutest/mutator/node/named_value/access.rb +6 -6
- data/lib/mutest/mutator/node/named_value/constant_assignment.rb +6 -5
- data/lib/mutest/mutator/node/named_value/variable_assignment.rb +5 -5
- data/lib/mutest/mutator/node/next.rb +4 -4
- data/lib/mutest/mutator/node/nthref.rb +4 -4
- data/lib/mutest/mutator/node/op_asgn.rb +4 -4
- data/lib/mutest/mutator/node/or_asgn.rb +5 -4
- data/lib/mutest/mutator/node/procarg_zero.rb +45 -0
- data/lib/mutest/mutator/node/regexp.rb +6 -6
- data/lib/mutest/mutator/node/regexp/alternation_meta.rb +5 -5
- data/lib/mutest/mutator/node/regexp/capture_group.rb +5 -5
- data/lib/mutest/mutator/node/regexp/character_type.rb +5 -5
- data/lib/mutest/mutator/node/regexp/end_of_line_anchor.rb +5 -5
- data/lib/mutest/mutator/node/regexp/end_of_string_or_before_end_of_line_anchor.rb +5 -5
- data/lib/mutest/mutator/node/regexp/one_or_more.rb +5 -5
- data/lib/mutest/mutator/node/regexp/zero_or_more.rb +5 -5
- data/lib/mutest/mutator/node/regopt.rb +4 -4
- data/lib/mutest/mutator/node/resbody.rb +6 -4
- data/lib/mutest/mutator/node/rescue.rb +6 -4
- data/lib/mutest/mutator/node/return.rb +5 -4
- data/lib/mutest/mutator/node/send.rb +6 -34
- data/lib/mutest/mutator/node/send/attribute_assignment.rb +5 -5
- data/lib/mutest/mutator/node/send/binary.rb +5 -5
- data/lib/mutest/mutator/node/send/conditional.rb +5 -5
- data/lib/mutest/mutator/node/splat.rb +4 -4
- data/lib/mutest/mutator/node/super.rb +4 -4
- data/lib/mutest/mutator/node/when.rb +4 -4
- data/lib/mutest/mutator/node/yield.rb +4 -4
- data/lib/mutest/mutator/node/zsuper.rb +4 -4
- data/lib/mutest/mutator/util.rb +3 -3
- data/lib/mutest/mutator/util/array.rb +6 -6
- data/lib/mutest/mutator/util/symbol.rb +4 -4
- data/lib/mutest/parallel.rb +16 -12
- data/lib/mutest/parallel/master.rb +4 -4
- data/lib/mutest/parallel/source.rb +6 -5
- data/lib/mutest/parallel/worker.rb +6 -5
- data/lib/mutest/parser.rb +4 -3
- data/lib/mutest/registry.rb +6 -5
- data/lib/mutest/reporter.rb +2 -2
- data/lib/mutest/reporter/cli.rb +3 -3
- data/lib/mutest/reporter/cli/format.rb +9 -8
- data/lib/mutest/reporter/cli/printer.rb +8 -8
- data/lib/mutest/reporter/cli/printer/config.rb +5 -5
- data/lib/mutest/reporter/cli/printer/env_progress.rb +16 -16
- data/lib/mutest/reporter/cli/printer/env_result.rb +5 -5
- data/lib/mutest/reporter/cli/printer/mutation_progress_result.rb +5 -5
- data/lib/mutest/reporter/cli/printer/mutation_result.rb +5 -5
- data/lib/mutest/reporter/cli/printer/status.rb +6 -5
- data/lib/mutest/reporter/cli/printer/status_progressive.rb +5 -5
- data/lib/mutest/reporter/cli/printer/subject_progress.rb +5 -5
- data/lib/mutest/reporter/cli/printer/subject_result.rb +5 -5
- data/lib/mutest/reporter/cli/printer/test_result.rb +5 -5
- data/lib/mutest/reporter/cli/tput.rb +6 -5
- data/lib/mutest/reporter/null.rb +3 -3
- data/lib/mutest/reporter/sequence.rb +3 -3
- data/lib/mutest/repository.rb +9 -7
- data/lib/mutest/require_highjack.rb +2 -2
- data/lib/mutest/requirer.rb +2 -2
- data/lib/mutest/result.rb +18 -12
- data/lib/mutest/runner.rb +6 -3
- data/lib/mutest/runner/sink.rb +3 -3
- data/lib/mutest/scope.rb +2 -2
- data/lib/mutest/selector.rb +4 -3
- data/lib/mutest/selector/expression.rb +3 -3
- data/lib/mutest/source_file.rb +6 -5
- data/lib/mutest/subject.rb +5 -3
- data/lib/mutest/subject/method.rb +3 -3
- data/lib/mutest/subject/method/instance.rb +5 -5
- data/lib/mutest/subject/method/singleton.rb +4 -4
- data/lib/mutest/test.rb +4 -3
- data/lib/mutest/util.rb +3 -3
- data/lib/mutest/version.rb +2 -2
- data/lib/mutest/warning_filter.rb +3 -3
- data/lib/mutest/zombifier.rb +5 -4
- data/meta/block.rb +22 -3
- data/meta/case.rb +29 -1
- data/meta/index.rb +132 -0
- data/meta/indexasgn.rb +42 -0
- data/meta/lambda.rb +17 -0
- data/meta/send.rb +5 -139
- data/mutest-rspec.gemspec +1 -1
- data/mutest.gemspec +11 -12
- data/spec/integration/mutest/rspec_spec.rb +1 -1
- data/spec/shared/framework_integration_behavior.rb +1 -1
- data/spec/shared/idempotent_method_behavior.rb +2 -1
- data/spec/spec_helper.rb +5 -5
- data/spec/support/compress_helper.rb +2 -1
- data/spec/support/corpus.rb +12 -8
- data/spec/support/fake_actor.rb +19 -14
- data/spec/support/file_system.rb +10 -7
- data/spec/support/ice_nine_config.rb +3 -3
- data/spec/support/ruby_vm.rb +10 -11
- data/spec/support/shared_context.rb +1 -1
- data/spec/support/test_app.rb +1 -1
- data/spec/support/warning.rb +8 -7
- data/spec/support/xspec.rb +18 -17
- data/spec/unit/mutest/actor/binding_spec.rb +1 -0
- data/spec/unit/mutest/ast/meta/optarg_spec.rb +1 -0
- data/spec/unit/mutest/ast/meta/send/proc_predicate_spec.rb +1 -1
- data/spec/unit/mutest/ast/meta/send/receiver_possible_top_level_const_predicate_spec.rb +1 -1
- data/spec/unit/mutest/ast/meta/send_spec.rb +14 -18
- data/spec/unit/mutest/ast/regexp_spec.rb +4 -3
- data/spec/unit/mutest/ast_spec.rb +1 -1
- data/spec/unit/mutest/cli_spec.rb +15 -15
- data/spec/unit/mutest/env/bootstrap_spec.rb +1 -1
- data/spec/unit/mutest/integration_spec.rb +1 -0
- data/spec/unit/mutest/isolation/none_spec.rb +1 -1
- data/spec/unit/mutest/matcher/config_spec.rb +1 -0
- data/spec/unit/mutest/mutator/node_spec.rb +1 -1
- data/spec/unit/mutest/parallel/master_spec.rb +3 -3
- data/spec/unit/mutest/reporter/cli/printer_spec.rb +2 -0
- data/spec/unit/mutest/reporter/cli/tput_spec.rb +2 -0
- data/spec/unit/mutest/reporter/cli_spec.rb +2 -0
- data/spec/unit/mutest/repository/diff_spec.rb +1 -1
- data/spec/unit/mutest/runner_spec.rb +1 -1
- data/spec/unit/mutest/subject_spec.rb +1 -1
- data/spec/unit/mutest/warning_filter_spec.rb +2 -3
- data/spec/unit/mutest/zombifier_spec.rb +1 -1
- data/test_app/Gemfile.rspec3.8 +7 -0
- metadata +67 -68
- data/.buildkite/hooks/pre-command +0 -3
- data/.buildkite/pipeline.yml +0 -38
- data/.gitmodules +0 -3
- data/circle.yml +0 -10
- data/config/triage.yml +0 -2
- data/config/yardstick.yml +0 -2
- data/lib/mutest/mutator/node/send/index.rb +0 -47
@@ -15,7 +15,7 @@ module Mutest
|
|
15
15
|
)
|
16
16
|
private_constant(*constants(false))
|
17
17
|
|
18
|
-
REGEXP = /\A#{SCOPE_NAME_PATTERN}#{SCOPE_SYMBOL_PATTERN}\z
|
18
|
+
REGEXP = /\A#{SCOPE_NAME_PATTERN}#{SCOPE_SYMBOL_PATTERN}\z/.freeze
|
19
19
|
|
20
20
|
# Syntax of expression
|
21
21
|
#
|
@@ -53,6 +53,6 @@ module Mutest
|
|
53
53
|
def scope
|
54
54
|
Object.const_get(scope_name)
|
55
55
|
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -2,12 +2,13 @@ module Mutest
|
|
2
2
|
class Expression
|
3
3
|
# Abstract base class for expressions matching namespaces
|
4
4
|
class Namespace < self
|
5
|
-
include
|
5
|
+
include Anima.new(:scope_name)
|
6
|
+
include AbstractType
|
6
7
|
private(*anima.attribute_names)
|
7
8
|
|
8
9
|
# Recursive namespace expression
|
9
10
|
class Recursive < self
|
10
|
-
REGEXP = /\A#{SCOPE_NAME_PATTERN}?\*\z
|
11
|
+
REGEXP = /\A#{SCOPE_NAME_PATTERN}?\*\z/.freeze
|
11
12
|
|
12
13
|
# Initialize object
|
13
14
|
#
|
@@ -48,14 +49,14 @@ module Mutest
|
|
48
49
|
0
|
49
50
|
end
|
50
51
|
end
|
51
|
-
end
|
52
|
+
end
|
52
53
|
|
53
54
|
# Exact namespace expression
|
54
55
|
class Exact < self
|
55
56
|
MATCHER = Matcher::Scope
|
56
57
|
private_constant(*constants(false))
|
57
58
|
|
58
|
-
REGEXP = /\A#{SCOPE_NAME_PATTERN}\z
|
59
|
+
REGEXP = /\A#{SCOPE_NAME_PATTERN}\z/.freeze
|
59
60
|
|
60
61
|
# Matcher matcher on expression
|
61
62
|
#
|
@@ -69,7 +70,7 @@ module Mutest
|
|
69
70
|
# @return [String]
|
70
71
|
alias_method :syntax, :scope_name
|
71
72
|
public :syntax
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -5,7 +5,7 @@ module Mutest
|
|
5
5
|
|
6
6
|
class ParserError < RuntimeError
|
7
7
|
include AbstractType
|
8
|
-
end
|
8
|
+
end
|
9
9
|
|
10
10
|
# Error raised on invalid expressions
|
11
11
|
class InvalidExpressionError < ParserError; end
|
@@ -23,7 +23,7 @@ module Mutest
|
|
23
23
|
# @raise [ParserError]
|
24
24
|
# otherwise
|
25
25
|
def call(input)
|
26
|
-
try_parse(input) or
|
26
|
+
try_parse(input) or raise InvalidExpressionError, "Expression: #{input.inspect} is not valid"
|
27
27
|
end
|
28
28
|
|
29
29
|
# Try to parse input into expression
|
@@ -38,10 +38,11 @@ module Mutest
|
|
38
38
|
def try_parse(input)
|
39
39
|
expressions = expressions(input)
|
40
40
|
case expressions.length
|
41
|
-
when 0
|
42
|
-
|
41
|
+
when 0 # rubocop:disable Lint/EmptyWhen
|
42
|
+
when 1
|
43
|
+
Util.one(expressions)
|
43
44
|
else
|
44
|
-
|
45
|
+
raise AmbiguousExpressionError, "Ambiguous expression: #{input.inspect}"
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
@@ -59,6 +60,6 @@ module Mutest
|
|
59
60
|
aggregate << expression if expression
|
60
61
|
end
|
61
62
|
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/mutest/integration.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
module Mutest
|
2
2
|
# Abstract base class mutest test framework integrations
|
3
3
|
class Integration
|
4
|
-
include
|
4
|
+
include Concord.new(:config)
|
5
|
+
include Adamantium::Flat
|
6
|
+
include AbstractType
|
5
7
|
|
6
8
|
# Setup integration
|
7
9
|
#
|
@@ -47,5 +49,5 @@ module Mutest
|
|
47
49
|
def expression_parser
|
48
50
|
config.expression_parser
|
49
51
|
end
|
50
|
-
end
|
51
|
-
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/mutest/isolation.rb
CHANGED
@@ -22,7 +22,7 @@ module Mutest
|
|
22
22
|
io.pipe(binmode: true) do |pipes|
|
23
23
|
parent(*pipes, &block)
|
24
24
|
end
|
25
|
-
rescue => exception
|
25
|
+
rescue StandardError => exception
|
26
26
|
raise Error, exception
|
27
27
|
end
|
28
28
|
|
@@ -67,6 +67,6 @@ module Mutest
|
|
67
67
|
yield
|
68
68
|
end
|
69
69
|
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/mutest/loader.rb
CHANGED
data/lib/mutest/matcher.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
module Mutest
|
2
2
|
# Abstract matcher to find subjects to mutate
|
3
3
|
class Matcher
|
4
|
-
include
|
4
|
+
include AbstractType
|
5
|
+
include Adamantium::Flat
|
5
6
|
|
6
7
|
# Call matcher
|
7
8
|
#
|
@@ -10,5 +11,5 @@ module Mutest
|
|
10
11
|
# @return [Enumerable<Subject>]
|
11
12
|
#
|
12
13
|
abstract_method :call
|
13
|
-
end
|
14
|
-
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/mutest/matcher/chain.rb
CHANGED
@@ -2,7 +2,9 @@ module Mutest
|
|
2
2
|
class Matcher
|
3
3
|
# Compiler for complex matchers
|
4
4
|
class Compiler
|
5
|
-
include
|
5
|
+
include Procto.call(:result)
|
6
|
+
include AST::Sexp
|
7
|
+
include Concord.new(:config)
|
6
8
|
|
7
9
|
# Generated matcher
|
8
10
|
#
|
@@ -29,7 +31,7 @@ module Mutest
|
|
29
31
|
def call(subject)
|
30
32
|
expression.prefix?(subject.expression)
|
31
33
|
end
|
32
|
-
end
|
34
|
+
end
|
33
35
|
|
34
36
|
private
|
35
37
|
|
@@ -50,6 +52,6 @@ module Mutest
|
|
50
52
|
def filtered_subjects
|
51
53
|
Morpher::Evaluator::Predicate::Boolean::And.new(config.subject_filters)
|
52
54
|
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -2,11 +2,12 @@ module Mutest
|
|
2
2
|
class Matcher
|
3
3
|
# Subject matcher configuration
|
4
4
|
class Config
|
5
|
-
include
|
5
|
+
include Anima.new(
|
6
6
|
:ignore_expressions,
|
7
7
|
:match_expressions,
|
8
8
|
:subject_filters
|
9
9
|
)
|
10
|
+
include Adamantium
|
10
11
|
|
11
12
|
INSPECT_FORMAT = "#<#{self} %s>".freeze
|
12
13
|
ATTRIBUTE_DELIMITER = ' '.freeze
|
@@ -74,6 +75,6 @@ module Mutest
|
|
74
75
|
.join(ENUM_DELIMITER)
|
75
76
|
)
|
76
77
|
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -2,13 +2,13 @@ module Mutest
|
|
2
2
|
class Matcher
|
3
3
|
# Abstract base class for method matchers
|
4
4
|
class Method < self
|
5
|
-
include
|
6
|
-
|
7
|
-
|
5
|
+
include Concord::Public.new(:scope, :target_method, :evaluator)
|
6
|
+
include Adamantium::Flat
|
7
|
+
include AbstractType
|
8
8
|
|
9
9
|
# Methods within rbx kernel directory are precompiled and their source
|
10
10
|
# cannot be accessed via reading source location. Same for methods created by eval.
|
11
|
-
BLACKLIST = %r{\A(kernel/|\(eval\)\z)}
|
11
|
+
BLACKLIST = %r{\A(kernel/|\(eval\)\z)}.freeze
|
12
12
|
|
13
13
|
SOURCE_LOCATION_WARNING_FORMAT =
|
14
14
|
'%s does not have a valid source location, unable to emit subject'.freeze
|
@@ -31,11 +31,11 @@ module Mutest
|
|
31
31
|
# logic would be implemented directly on the Matcher::Method
|
32
32
|
# instance
|
33
33
|
class Evaluator
|
34
|
-
include
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
34
|
+
include AST::NodePredicates
|
35
|
+
include Procto.call
|
36
|
+
include Concord.new(:scope, :target_method, :env)
|
37
|
+
include Adamantium
|
38
|
+
include AbstractType
|
39
39
|
|
40
40
|
# Matched subjects
|
41
41
|
#
|
@@ -128,9 +128,9 @@ module Mutest
|
|
128
128
|
AST.find_last_path(ast, &method(:match?))
|
129
129
|
end
|
130
130
|
memoize :matched_node_path
|
131
|
-
end
|
131
|
+
end
|
132
132
|
|
133
133
|
private_constant(*constants(false))
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -53,11 +53,11 @@ module Mutest
|
|
53
53
|
.unmemoized_instance_method(method_name)
|
54
54
|
.source_location
|
55
55
|
end
|
56
|
-
end
|
57
|
-
end
|
56
|
+
end
|
57
|
+
end
|
58
58
|
|
59
59
|
private_constant(*constants(false))
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -79,10 +79,10 @@ module Mutest
|
|
79
79
|
name = node.children.fetch(NAME_INDEX)
|
80
80
|
name.to_s.eql?(context.unqualified_name)
|
81
81
|
end
|
82
|
-
end
|
82
|
+
end
|
83
83
|
|
84
84
|
private_constant(*constants(false))
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -2,7 +2,8 @@ module Mutest
|
|
2
2
|
class Matcher
|
3
3
|
# Abstract base class for matcher that returns method subjects from scope
|
4
4
|
class Methods < self
|
5
|
-
include
|
5
|
+
include Concord.new(:scope)
|
6
|
+
include AbstractType
|
6
7
|
|
7
8
|
CANDIDATE_NAMES = IceNine.deep_freeze(%i[
|
8
9
|
public_instance_methods
|
@@ -80,7 +81,7 @@ module Mutest
|
|
80
81
|
scope.singleton_class
|
81
82
|
end
|
82
83
|
memoize :candidate_scope, freezer: :noop
|
83
|
-
end
|
84
|
+
end
|
84
85
|
|
85
86
|
# Matcher for instance methods
|
86
87
|
class Instance < self
|
@@ -103,7 +104,7 @@ module Mutest
|
|
103
104
|
def candidate_scope
|
104
105
|
scope
|
105
106
|
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
data/lib/mutest/matcher/null.rb
CHANGED
data/lib/mutest/matcher/scope.rb
CHANGED
data/lib/mutest/meta.rb
CHANGED
@@ -14,7 +14,7 @@ module Mutest
|
|
14
14
|
#
|
15
15
|
# @return [undefined]
|
16
16
|
def self.add(type, &block)
|
17
|
-
file = caller.first.split(':in', 2).first
|
17
|
+
file = caller(1..1).first.split(':in', 2).first
|
18
18
|
ALL << DSL.call(file, type, block)
|
19
19
|
end
|
20
20
|
|
@@ -28,6 +28,6 @@ module Mutest
|
|
28
28
|
class << self
|
29
29
|
undef_method :add
|
30
30
|
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|