mutant 0.5.23 → 0.5.24

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +10 -0
  3. data/config/flay.yml +1 -1
  4. data/config/reek.yml +19 -19
  5. data/lib/mutant.rb +12 -39
  6. data/lib/mutant/ast.rb +5 -0
  7. data/lib/mutant/ast/meta.rb +131 -0
  8. data/lib/mutant/ast/named_children.rb +98 -0
  9. data/lib/mutant/ast/node_predicates.rb +19 -0
  10. data/lib/mutant/ast/nodes.rb +21 -0
  11. data/lib/mutant/ast/sexp.rb +34 -0
  12. data/lib/mutant/ast/types.rb +48 -0
  13. data/lib/mutant/cache.rb +3 -2
  14. data/lib/mutant/cli.rb +11 -151
  15. data/lib/mutant/config.rb +22 -2
  16. data/lib/mutant/context/scope.rb +11 -21
  17. data/lib/mutant/delegator.rb +2 -0
  18. data/lib/mutant/diff.rb +7 -3
  19. data/lib/mutant/env.rb +49 -0
  20. data/lib/mutant/expression.rb +36 -8
  21. data/lib/mutant/expression/methods.rb +62 -0
  22. data/lib/mutant/expression/namespace.rb +41 -28
  23. data/lib/mutant/{strategy.rb → integration.rb} +12 -31
  24. data/lib/mutant/isolation.rb +1 -1
  25. data/lib/mutant/matcher.rb +1 -21
  26. data/lib/mutant/matcher/builder.rb +142 -0
  27. data/lib/mutant/matcher/method.rb +3 -7
  28. data/lib/mutant/matcher/method/instance.rb +6 -5
  29. data/lib/mutant/matcher/method/singleton.rb +2 -7
  30. data/lib/mutant/matcher/methods.rb +11 -14
  31. data/lib/mutant/matcher/namespace.rb +31 -39
  32. data/lib/mutant/matcher/scope.rb +13 -2
  33. data/lib/mutant/meta.rb +0 -1
  34. data/lib/mutant/meta/example/dsl.rb +5 -1
  35. data/lib/mutant/mutator/node.rb +16 -44
  36. data/lib/mutant/mutator/node/or_asgn.rb +1 -1
  37. data/lib/mutant/mutator/node/send.rb +5 -60
  38. data/lib/mutant/mutator/node/super.rb +2 -5
  39. data/lib/mutant/mutator/registry.rb +1 -1
  40. data/lib/mutant/reporter.rb +10 -0
  41. data/lib/mutant/reporter/cli.rb +13 -0
  42. data/lib/mutant/reporter/cli/printer.rb +2 -0
  43. data/lib/mutant/reporter/cli/progress/config.rb +1 -1
  44. data/lib/mutant/reporter/cli/progress/noop.rb +2 -0
  45. data/lib/mutant/reporter/cli/registry.rb +2 -0
  46. data/lib/mutant/reporter/null.rb +12 -0
  47. data/lib/mutant/reporter/trace.rb +4 -0
  48. data/lib/mutant/require_highjack.rb +2 -2
  49. data/lib/mutant/rspec.rb +0 -0
  50. data/lib/mutant/runner.rb +2 -0
  51. data/lib/mutant/runner/config.rb +8 -8
  52. data/lib/mutant/runner/killer.rb +5 -0
  53. data/lib/mutant/runner/subject.rb +1 -1
  54. data/lib/mutant/subject.rb +8 -8
  55. data/lib/mutant/subject/method.rb +3 -2
  56. data/lib/mutant/subject/method/instance.rb +1 -1
  57. data/lib/mutant/test.rb +7 -65
  58. data/lib/mutant/test/report.rb +59 -0
  59. data/lib/mutant/version.rb +1 -1
  60. data/lib/mutant/warning_filter.rb +2 -0
  61. data/lib/mutant/zombifier.rb +3 -0
  62. data/lib/mutant/zombifier/file.rb +1 -1
  63. data/meta/or_asgn.rb +11 -0
  64. data/meta/send.rb +1 -1
  65. data/mutant-rspec.gemspec +1 -1
  66. data/mutant.gemspec +1 -1
  67. data/spec/integration/mutant/corpus_spec.rb +2 -0
  68. data/spec/integration/mutant/test_mutator_handles_types_spec.rb +2 -2
  69. data/spec/spec_helper.rb +4 -3
  70. data/spec/unit/mutant/cli_new_spec.rb +11 -11
  71. data/spec/unit/mutant/expression/methods_spec.rb +43 -0
  72. data/spec/unit/mutant/expression/namespace/flat_spec.rb +1 -1
  73. data/spec/unit/mutant/expression/namespace/recursive_spec.rb +19 -5
  74. data/spec/unit/mutant/{strategy_spec.rb → integration_spec.rb} +1 -1
  75. data/spec/unit/mutant/isolation_spec.rb +3 -1
  76. data/spec/unit/mutant/matcher/method/instance_spec.rb +5 -5
  77. data/spec/unit/mutant/matcher/method/singleton_spec.rb +8 -8
  78. data/spec/unit/mutant/matcher/methods/instance_spec.rb +5 -8
  79. data/spec/unit/mutant/matcher/methods/singleton_spec.rb +5 -5
  80. data/spec/unit/mutant/matcher/namespace_spec.rb +18 -23
  81. data/spec/unit/mutant/mutation_spec.rb +1 -1
  82. data/spec/unit/mutant/runner/config_spec.rb +4 -5
  83. data/spec/unit/mutant/runner/mutation_spec.rb +21 -21
  84. data/spec/unit/mutant/runner/subject_spec.rb +6 -6
  85. data/spec/unit/mutant/subject/method/instance_spec.rb +0 -4
  86. data/spec/unit/mutant/subject/method/singleton_spec.rb +0 -1
  87. data/spec/unit/mutant/subject_spec.rb +3 -3
  88. metadata +20 -6
  89. data/lib/mutant/node_helpers.rb +0 -52
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mutant::Expression::Methods do
4
+
5
+ let(:object) { described_class.parse(input) }
6
+ let(:cache) { Mutant::Cache.new }
7
+ let(:instance_methods) { 'TestApp::Literal#' }
8
+ let(:singleton_methods) { 'TestApp::Literal.' }
9
+
10
+ describe '#match_length' do
11
+ let(:input) { instance_methods }
12
+
13
+ subject { object.match_length(other) }
14
+
15
+ context 'when other is an equivalent expression' do
16
+ let(:other) { described_class.parse(object.syntax) }
17
+
18
+ it { should be(object.syntax.length) }
19
+ end
20
+
21
+ context 'when other is an unequivalent expression' do
22
+ let(:other) { described_class.parse('Foo*') }
23
+
24
+ it { should be(0) }
25
+ end
26
+ end
27
+
28
+ describe '#matcher' do
29
+ subject { object.matcher(cache) }
30
+
31
+ context 'with an instance method' do
32
+ let(:input) { instance_methods }
33
+
34
+ it { should eql(Mutant::Matcher::Methods::Instance.new(cache, TestApp::Literal)) }
35
+ end
36
+
37
+ context 'with a singleton method' do
38
+ let(:input) { singleton_methods }
39
+
40
+ it { should eql(Mutant::Matcher::Methods::Singleton.new(cache, TestApp::Literal)) }
41
+ end
42
+ end
43
+ end
@@ -9,7 +9,7 @@ describe Mutant::Expression::Namespace::Exact do
9
9
  describe '#matcher' do
10
10
  subject { object.matcher(cache) }
11
11
 
12
- it { should eql(Mutant::Matcher::Namespace::Scope.new(cache, TestApp::Literal)) }
12
+ it { should eql(Mutant::Matcher::Scope.new(cache, TestApp::Literal)) }
13
13
  end
14
14
 
15
15
  describe '#match_length' do
@@ -3,12 +3,12 @@ require 'spec_helper'
3
3
  describe Mutant::Expression::Namespace::Recursive do
4
4
 
5
5
  let(:object) { described_class.parse(input) }
6
- let(:cache) { Mutant::Cache.new }
7
- let(:input) { 'TestApp::Literal*' }
6
+ let(:cache) { Mutant::Cache.new }
7
+ let(:input) { 'TestApp::Literal*' }
8
8
 
9
9
  describe '#matcher' do
10
10
  subject { object.matcher(cache) }
11
- it { should eql(Mutant::Matcher::Namespace.new(cache, 'TestApp::Literal')) }
11
+ it { should eql(Mutant::Matcher::Namespace.new(cache, object)) }
12
12
  end
13
13
 
14
14
  describe '#match_length' do
@@ -33,9 +33,23 @@ describe Mutant::Expression::Namespace::Recursive do
33
33
  end
34
34
 
35
35
  context 'when other expression describes a longer prefix' do
36
- let(:other) { described_class.parse('TestApp::Literal::Deep') }
36
+ context 'on constants' do
37
+ let(:other) { described_class.parse('TestApp::Literal::Deep') }
37
38
 
38
- it { should be(input[0..-2].length) }
39
+ it { should be(input[0..-2].length) }
40
+ end
41
+
42
+ context 'on singleton method' do
43
+ let(:other) { described_class.parse('TestApp::Literal.foo') }
44
+
45
+ it { should be(input[0..-2].length) }
46
+ end
47
+
48
+ context 'on instance method' do
49
+ let(:other) { described_class.parse('TestApp::Literal#foo') }
50
+
51
+ it { should be(input[0..-2].length) }
52
+ end
39
53
  end
40
54
  end
41
55
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Mutant::Strategy do
3
+ describe Mutant::Integration do
4
4
 
5
5
  let(:class_under_test) do
6
6
  Class.new(described_class)
@@ -5,7 +5,9 @@ describe Mutant::Isolation do
5
5
  let(:object) { described_class }
6
6
 
7
7
  it 'isolates global effects from process' do
8
- expect { object.call { ::Foo = 1 } }.not_to change { defined?(Foo) }.from(nil)
8
+ expect(defined?(::TestConstant)).to be(nil)
9
+ object.call { ::TestConstant = 1 }
10
+ expect(defined?(::TestConstant)).to be(nil)
9
11
  end
10
12
 
11
13
  it 'return block value' do
@@ -3,12 +3,12 @@ require 'spec_helper'
3
3
  # rubocop:disable ClassAndModuleChildren
4
4
  describe Mutant::Matcher::Method::Instance do
5
5
 
6
- let(:cache) { Fixtures::AST_CACHE }
6
+ let(:env) { Fixtures::BOOT_ENV }
7
7
 
8
8
  describe '#each' do
9
9
  subject { object.each { |subject| yields << subject } }
10
10
 
11
- let(:object) { described_class.new(cache, scope, method) }
11
+ let(:object) { described_class.new(env, scope, method) }
12
12
  let(:method) { scope.instance_method(method_name) }
13
13
  let(:yields) { [] }
14
14
  let(:namespace) { self.class }
@@ -118,7 +118,7 @@ describe Mutant::Matcher::Method::Instance do
118
118
  describe '.build' do
119
119
  let(:object) { described_class }
120
120
 
121
- subject { object.build(cache, scope, method) }
121
+ subject { object.build(env, scope, method) }
122
122
 
123
123
  let(:scope) do
124
124
  Class.new do
@@ -141,13 +141,13 @@ describe Mutant::Matcher::Method::Instance do
141
141
  context 'with unmemoized method' do
142
142
  let(:method_name) { :bar }
143
143
 
144
- it { should eql(described_class.new(cache, scope, method)) }
144
+ it { should eql(described_class.new(env, scope, method)) }
145
145
  end
146
146
 
147
147
  context 'with memoized method' do
148
148
  let(:method_name) { :foo }
149
149
 
150
- it { should eql(described_class::Memoized.new(cache, scope, method)) }
150
+ it { should eql(described_class::Memoized.new(env, scope, method)) }
151
151
  end
152
152
  end
153
153
  end
@@ -4,14 +4,14 @@ require 'spec_helper'
4
4
  describe Mutant::Matcher::Method::Singleton, '#each' do
5
5
  subject { object.each { |subject| yields << subject } }
6
6
 
7
- let(:object) { described_class.new(cache, scope, method) }
8
- let(:method) { scope.method(method_name) }
9
- let(:cache) { Fixtures::AST_CACHE }
10
- let(:yields) { [] }
11
- let(:namespace) { self.class }
12
- let(:scope) { self.class::Foo }
13
- let(:type) { :defs }
14
- let(:method_arity) { 0 }
7
+ let(:object) { described_class.new(env, scope, method) }
8
+ let(:method) { scope.method(method_name) }
9
+ let(:env) { Fixtures::BOOT_ENV }
10
+ let(:yields) { [] }
11
+ let(:namespace) { self.class }
12
+ let(:scope) { self.class::Foo }
13
+ let(:type) { :defs }
14
+ let(:method_arity) { 0 }
15
15
 
16
16
  def name
17
17
  node.children[1]
@@ -1,8 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mutant::Matcher::Methods::Instance, '#each' do
4
- let(:object) { described_class.new(cache, Foo) }
5
- let(:cache) { Mutant::Cache.new }
4
+ let(:object) { described_class.new(env, Foo) }
5
+ let(:env) { Fixtures::BOOT_ENV }
6
6
 
7
7
  subject { object.each { |matcher| yields << matcher } }
8
8
 
@@ -46,12 +46,9 @@ describe Mutant::Matcher::Methods::Instance, '#each' do
46
46
 
47
47
  before do
48
48
  matcher = Mutant::Matcher::Method::Instance
49
- matcher.stub(:new)
50
- .with(cache, Foo, Foo.instance_method(:method_a)).and_return([subject_a])
51
- matcher.stub(:new)
52
- .with(cache, Foo, Foo.instance_method(:method_b)).and_return([subject_b])
53
- matcher.stub(:new)
54
- .with(cache, Foo, Foo.instance_method(:method_c)).and_return([subject_c])
49
+ allow(matcher).to receive(:new).with(env, Foo, Foo.instance_method(:method_a)).and_return([subject_a])
50
+ allow(matcher).to receive(:new).with(env, Foo, Foo.instance_method(:method_b)).and_return([subject_b])
51
+ allow(matcher).to receive(:new).with(env, Foo, Foo.instance_method(:method_c)).and_return([subject_c])
55
52
  end
56
53
 
57
54
  it 'should yield expected subjects' do
@@ -1,8 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mutant::Matcher::Methods::Singleton, '#each' do
4
- let(:object) { described_class.new(cache, Foo) }
5
- let(:cache) { Mutant::Cache.new }
4
+ let(:object) { described_class.new(env, Foo) }
5
+ let(:env) { Fixtures::BOOT_ENV }
6
6
 
7
7
  subject { object.each { |matcher| yields << matcher } }
8
8
 
@@ -41,11 +41,11 @@ describe Mutant::Matcher::Methods::Singleton, '#each' do
41
41
  before do
42
42
  matcher = Mutant::Matcher::Method::Singleton
43
43
  matcher.stub(:new)
44
- .with(cache, Foo, Foo.method(:method_a)).and_return([subject_a])
44
+ .with(env, Foo, Foo.method(:method_a)).and_return([subject_a])
45
45
  matcher.stub(:new)
46
- .with(cache, Foo, Foo.method(:method_b)).and_return([subject_b])
46
+ .with(env, Foo, Foo.method(:method_b)).and_return([subject_b])
47
47
  matcher.stub(:new)
48
- .with(cache, Foo, Foo.method(:method_c)).and_return([subject_c])
48
+ .with(env, Foo, Foo.method(:method_c)).and_return([subject_c])
49
49
  end
50
50
 
51
51
  it 'should yield expected subjects' do
@@ -1,29 +1,28 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mutant::Matcher::Namespace do
4
- let(:object) { described_class.new(cache, 'TestApp::Literal') }
5
- let(:yields) { [] }
6
-
7
- let(:cache) { Mutant::Cache.new }
4
+ let(:object) { described_class.new(env, Mutant::Expression.parse('TestApp*')) }
5
+ let(:yields) { [] }
6
+ let(:env) { Fixtures::BOOT_ENV }
8
7
 
9
8
  subject { object.each { |item| yields << item } }
10
9
 
11
10
  describe '#each' do
12
11
 
13
- let(:singleton_a) { double('SingletonA', name: 'TestApp::Literal') }
14
- let(:singleton_b) { double('SingletonB', name: 'TestApp::Foo') }
15
- let(:singleton_c) { double('SingletonC', name: 'TestApp::LiteralOther') }
16
- let(:subject_a) { double('SubjectA') }
17
- let(:subject_b) { double('SubjectB') }
12
+ let(:singleton_a) { double('SingletonA', name: 'TestApp::Literal') }
13
+ let(:singleton_b) { double('SingletonB', name: 'TestApp::Foo') }
14
+ let(:singleton_c) { double('SingletonC', name: 'TestAppOther') }
15
+ let(:subject_a) { double('SubjectA') }
16
+ let(:subject_b) { double('SubjectB') }
18
17
 
19
18
  before do
20
- Mutant::Matcher::Methods::Singleton.stub(:each)
21
- .with(cache, singleton_a)
22
- .and_yield(subject_a)
23
- Mutant::Matcher::Methods::Instance.stub(:each)
24
- .with(cache, singleton_a)
25
- .and_yield(subject_b)
26
- ObjectSpace.stub(each_object: [singleton_a, singleton_b, singleton_c])
19
+ allow(Mutant::Matcher::Methods::Singleton).to receive(:new).with(env, singleton_a).and_return([subject_a])
20
+ allow(Mutant::Matcher::Methods::Instance).to receive(:new).with(env, singleton_a).and_return([])
21
+
22
+ allow(Mutant::Matcher::Methods::Singleton).to receive(:new).with(env, singleton_b).and_return([subject_b])
23
+ allow(Mutant::Matcher::Methods::Instance).to receive(:new).with(env, singleton_b).and_return([])
24
+
25
+ allow(ObjectSpace).to receive(:each_object).with(Module).and_return([singleton_a, singleton_b, singleton_c])
27
26
  end
28
27
 
29
28
  context 'with no block' do
@@ -31,17 +30,13 @@ describe Mutant::Matcher::Namespace do
31
30
 
32
31
  it { should be_instance_of(to_enum.class) }
33
32
 
34
- if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
35
- skip 'FIX RBX rspec? BUG HERE'
36
- else
37
- it 'yields the expected values' do
38
- expect(subject.to_a).to eql(object.to_a)
39
- end
33
+ it 'yields the expected values' do
34
+ expect(subject.to_a).to eql(object.to_a)
40
35
  end
41
36
  end
42
37
 
43
38
  it 'should yield subjects' do
44
- expect { subject }.to change { yields }.from([]).to([subject_a, subject_b])
39
+ expect { subject }.to change { yields }.from([]).to([subject_b, subject_a])
45
40
  end
46
41
  end
47
42
  end
@@ -6,7 +6,7 @@ describe Mutant::Mutation do
6
6
  SYMBOL = 'test'.freeze
7
7
  end
8
8
 
9
- let(:object) { TestMutation.new(mutation_subject, Mutant::NodeHelpers::N_NIL) }
9
+ let(:object) { TestMutation.new(mutation_subject, Mutant::AST::Nodes::N_NIL) }
10
10
  let(:mutation_subject) { double('Subject', identification: 'subject', source: 'original') }
11
11
  let(:node) { double('Node') }
12
12
 
@@ -6,9 +6,8 @@ describe Mutant::Runner::Config do
6
6
  let(:config) do
7
7
  Mutant::Config.new(
8
8
  matcher: [subject_a, subject_b],
9
- cache: Mutant::Cache.new,
10
9
  debug: false,
11
- strategy: strategy,
10
+ integration: integration,
12
11
  reporter: reporter,
13
12
  fail_fast: fail_fast,
14
13
  expected_coverage: expected_coverage,
@@ -19,13 +18,13 @@ describe Mutant::Runner::Config do
19
18
  let(:fail_fast) { false }
20
19
  let(:expected_coverage) { 100.0 }
21
20
  let(:reporter) { Mutant::Reporter::Trace.new }
22
- let(:strategy) { double('Strategy') }
21
+ let(:integration) { double('Integration') }
23
22
  let(:subject_a) { double('Subject A') }
24
23
  let(:subject_b) { double('Subject B') }
25
24
 
26
25
  before do
27
- strategy.stub(:setup)
28
- strategy.stub(:teardown)
26
+ integration.stub(:setup)
27
+ integration.stub(:teardown)
29
28
  Mutant::Runner.stub(:run).with(config, subject_a).and_return(runner_a)
30
29
  Mutant::Runner.stub(:run).with(config, subject_b).and_return(runner_b)
31
30
  end
@@ -3,25 +3,25 @@ require 'spec_helper'
3
3
  describe Mutant::Runner::Mutation do
4
4
  let(:object) { described_class.new(config, mutation, tests) }
5
5
 
6
- let(:reporter) { double('Reporter') }
7
- let(:mutation) { double('Mutation', class: Mutant::Mutation) }
8
- let(:strategy) { double('Strategy') }
9
- let(:killer_a) { Mutant::Killer.new(test: test_a, mutation: mutation) }
10
- let(:killer_b) { Mutant::Killer.new(test: test_b, mutation: mutation) }
11
- let(:runner_a) { double('Runner A', success?: success_a, stop?: stop_a, mutation_dead?: dead_a) }
12
- let(:runner_b) { double('Runner B', success?: success_b, stop?: stop_b, mutation_dead?: dead_b) }
13
- let(:runners) { [runner_a, runner_b] }
14
- let(:killers) { [killer_a, killer_b] }
15
- let(:fail_fast) { false }
16
- let(:success_a) { true }
17
- let(:success_b) { true }
18
- let(:stop_a) { false }
19
- let(:stop_b) { false }
20
- let(:dead_a) { false }
21
- let(:dead_b) { false }
22
- let(:test_a) { double('test a') }
23
- let(:test_b) { double('test b') }
24
- let(:tests) { [test_a, test_b] }
6
+ let(:reporter) { double('Reporter') }
7
+ let(:mutation) { double('Mutation', class: Mutant::Mutation) }
8
+ let(:integration) { double('Integration') }
9
+ let(:killer_a) { Mutant::Killer.new(test: test_a, mutation: mutation) }
10
+ let(:killer_b) { Mutant::Killer.new(test: test_b, mutation: mutation) }
11
+ let(:runner_a) { double('Runner A', success?: success_a, stop?: stop_a, mutation_dead?: dead_a) }
12
+ let(:runner_b) { double('Runner B', success?: success_b, stop?: stop_b, mutation_dead?: dead_b) }
13
+ let(:runners) { [runner_a, runner_b] }
14
+ let(:killers) { [killer_a, killer_b] }
15
+ let(:fail_fast) { false }
16
+ let(:success_a) { true }
17
+ let(:success_b) { true }
18
+ let(:stop_a) { false }
19
+ let(:stop_b) { false }
20
+ let(:dead_a) { false }
21
+ let(:dead_b) { false }
22
+ let(:test_a) { double('test a') }
23
+ let(:test_b) { double('test b') }
24
+ let(:tests) { [test_a, test_b] }
25
25
 
26
26
  before do
27
27
  expect(Mutant::Runner).to receive(:run).with(config, killer_a).and_return(runner_a)
@@ -33,13 +33,13 @@ describe Mutant::Runner::Mutation do
33
33
  'Config',
34
34
  fail_fast: fail_fast,
35
35
  reporter: reporter,
36
- strategy: strategy
36
+ integration: integration
37
37
  )
38
38
  end
39
39
 
40
40
  before do
41
41
  reporter.stub(progress: reporter)
42
- strategy.stub(killers: killers)
42
+ integration.stub(killers: killers)
43
43
  end
44
44
 
45
45
  describe '#stop?' do
@@ -13,11 +13,11 @@ describe Mutant::Runner::Subject, '#success?' do
13
13
  )
14
14
  end
15
15
 
16
- let(:reporter) { Mutant::Reporter::Trace.new }
17
- let(:config) { double('Config', reporter: reporter, strategy: strategy) }
18
- let(:mutation_a) { double('Mutation A') }
19
- let(:mutation_b) { double('Mutation B') }
20
- let(:strategy) { double('Strategy') }
16
+ let(:reporter) { Mutant::Reporter::Trace.new }
17
+ let(:config) { double('Config', reporter: reporter, integration: integration) }
18
+ let(:mutation_a) { double('Mutation A') }
19
+ let(:mutation_b) { double('Mutation B') }
20
+ let(:integration) { double('Integration') }
21
21
 
22
22
  let(:runner_a) do
23
23
  double('Runner A', success?: success_a, stop?: stop_a)
@@ -30,7 +30,7 @@ describe Mutant::Runner::Subject, '#success?' do
30
30
  let(:tests) { [double('test a'), double('test b')] }
31
31
 
32
32
  before do
33
- expect(strategy).to receive(:tests).with(mutation_subject).and_return(tests)
33
+ expect(config).to receive(:tests).with(mutation_subject).and_return(tests)
34
34
  expect(Mutant::Runner).to receive(:run).with(config, mutation_a, tests).and_return(runner_a)
35
35
  expect(Mutant::Runner).to receive(:run).with(config, mutation_b, tests).and_return(runner_b)
36
36
  end
@@ -3,8 +3,6 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Mutant::Subject::Method::Instance do
6
- include Mutant::NodeHelpers
7
-
8
6
  let(:object) { described_class.new(context, node) }
9
7
  let(:context) { double }
10
8
 
@@ -73,8 +71,6 @@ describe Mutant::Subject::Method::Instance do
73
71
  end
74
72
 
75
73
  describe Mutant::Subject::Method::Instance::Memoized do
76
- include Mutant::NodeHelpers
77
-
78
74
  let(:object) { described_class.new(context, node) }
79
75
  let(:context) { double }
80
76
 
@@ -3,7 +3,6 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Mutant::Subject::Method::Singleton do
6
- include Mutant::NodeHelpers
7
6
 
8
7
  let(:object) { described_class.new(context, node) }
9
8
  let(:context) { double }