mutest 0.0.6 → 0.0.7

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.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/.buildkite/hooks/pre-command +1 -1
  3. data/.buildkite/pipeline.yml +9 -22
  4. data/.gitmodules +3 -0
  5. data/CHANGELOG.md +14 -1
  6. data/Gemfile +11 -6
  7. data/Gemfile.lock +27 -101
  8. data/README.md +42 -2
  9. data/Rakefile +2 -8
  10. data/circle.yml +4 -1
  11. data/lib/mutest.rb +1 -1
  12. data/lib/mutest/ast/meta/send.rb +6 -0
  13. data/lib/mutest/ast/named_children.rb +1 -1
  14. data/lib/mutest/ast/nodes.rb +0 -2
  15. data/lib/mutest/ast/regexp.rb +4 -4
  16. data/lib/mutest/ast/regexp/transformer.rb +4 -4
  17. data/lib/mutest/ast/regexp/transformer/character_set.rb +1 -1
  18. data/lib/mutest/ast/regexp/transformer/direct.rb +1 -1
  19. data/lib/mutest/ast/regexp/transformer/quantifier.rb +3 -3
  20. data/lib/mutest/ast/regexp/transformer/recursive.rb +1 -1
  21. data/lib/mutest/ast/regexp/transformer/text.rb +1 -1
  22. data/lib/mutest/ast/types.rb +0 -1
  23. data/lib/mutest/cli.rb +1 -1
  24. data/lib/mutest/context.rb +1 -1
  25. data/lib/mutest/matcher/config.rb +0 -2
  26. data/lib/mutest/matcher/method.rb +1 -3
  27. data/lib/mutest/matcher/method/instance.rb +1 -1
  28. data/lib/mutest/matcher/methods.rb +1 -1
  29. data/lib/mutest/mutator.rb +0 -2
  30. data/lib/mutest/mutator/node/block_pass.rb +29 -0
  31. data/lib/mutest/mutator/node/generic.rb +1 -0
  32. data/lib/mutest/mutator/node/literal/boolean.rb +0 -1
  33. data/lib/mutest/mutator/node/literal/range.rb +1 -1
  34. data/lib/mutest/mutator/node/literal/regex.rb +1 -1
  35. data/lib/mutest/mutator/node/literal/string.rb +3 -0
  36. data/lib/mutest/mutator/node/literal/symbol.rb +0 -2
  37. data/lib/mutest/mutator/node/send.rb +35 -6
  38. data/lib/mutest/mutator/node/splat.rb +3 -1
  39. data/lib/mutest/parallel/worker.rb +1 -1
  40. data/lib/mutest/reporter/cli.rb +0 -2
  41. data/lib/mutest/reporter/cli/format.rb +1 -1
  42. data/lib/mutest/reporter/cli/printer.rb +2 -2
  43. data/lib/mutest/reporter/cli/printer/mutation_result.rb +0 -2
  44. data/lib/mutest/version.rb +1 -1
  45. data/meta/and.rb +0 -2
  46. data/meta/array.rb +0 -3
  47. data/meta/begin.rb +0 -3
  48. data/meta/block.rb +0 -1
  49. data/meta/block_pass.rb +30 -1
  50. data/meta/break.rb +0 -1
  51. data/meta/case.rb +0 -6
  52. data/meta/casgn.rb +0 -3
  53. data/meta/cvasgn.rb +0 -1
  54. data/meta/def.rb +0 -7
  55. data/meta/dstr.rb +2 -0
  56. data/meta/dsym.rb +2 -0
  57. data/meta/ensure.rb +0 -1
  58. data/meta/false.rb +0 -1
  59. data/meta/gvasgn.rb +0 -1
  60. data/meta/hash.rb +0 -4
  61. data/meta/if.rb +0 -5
  62. data/meta/ivasgn.rb +0 -1
  63. data/meta/kwbegin.rb +0 -1
  64. data/meta/lvasgn.rb +0 -1
  65. data/meta/match_current_line.rb +0 -1
  66. data/meta/next.rb +0 -1
  67. data/meta/or.rb +0 -2
  68. data/meta/regexp.rb +0 -1
  69. data/meta/rescue.rb +0 -6
  70. data/meta/send.rb +60 -16
  71. data/meta/splat.rb +25 -0
  72. data/meta/str.rb +1 -0
  73. data/meta/true.rb +0 -1
  74. data/meta/until.rb +0 -1
  75. data/meta/while.rb +0 -2
  76. data/meta/yield.rb +0 -1
  77. data/mutest-rspec.gemspec +1 -1
  78. data/mutest.gemspec +0 -4
  79. data/spec/integration/mutest/rspec_spec.rb +1 -1
  80. data/spec/integrations.yml +1 -1
  81. data/spec/shared/command_method_behavior.rb +5 -0
  82. data/spec/shared/idempotent_method_behavior.rb +10 -0
  83. data/spec/spec_helper.rb +21 -1
  84. data/spec/support/xspec.rb +1 -1
  85. data/spec/unit/mutest/actor/sender_spec.rb +1 -1
  86. data/spec/unit/mutest/ast/meta/send_spec.rb +23 -11
  87. data/spec/unit/mutest/cli_spec.rb +13 -13
  88. data/spec/unit/mutest/context_spec.rb +2 -2
  89. data/spec/unit/mutest/diff_spec.rb +9 -9
  90. data/spec/unit/mutest/integration/null_spec.rb +1 -1
  91. data/spec/unit/mutest/integration_spec.rb +1 -1
  92. data/spec/unit/mutest/matcher/method/instance_spec.rb +5 -5
  93. data/spec/unit/mutest/matcher/method/singleton_spec.rb +5 -5
  94. data/spec/unit/mutest/meta/example_spec.rb +3 -3
  95. data/spec/unit/mutest/mutation_spec.rb +5 -5
  96. data/spec/unit/mutest/mutator/node_spec.rb +6 -9
  97. data/spec/unit/mutest/parallel/driver_spec.rb +1 -1
  98. data/spec/unit/mutest/reporter/null_spec.rb +1 -1
  99. data/spec/unit/mutest/reporter/sequence_spec.rb +1 -1
  100. data/spec/unit/mutest/result_spec.rb +1 -1
  101. data/spec/unit/mutest/runner/sink_spec.rb +1 -1
  102. data/spec/unit/mutest/subject/method/instance/memoized_spec.rb +1 -1
  103. data/spec/unit/mutest/subject/method/instance_spec.rb +3 -3
  104. data/spec/unit/mutest/subject/method/singleton_spec.rb +3 -3
  105. data/spec/unit/mutest/subject_spec.rb +2 -2
  106. data/test_app/Gemfile.rspec3.6 +7 -0
  107. metadata +9 -57
  108. data/build/Dockerfile +0 -71
  109. data/build/docker-bootstrap.sh +0 -85
  110. data/build/docker-exec +0 -29
  111. data/build/make-docker +0 -3
  112. data/build/ruby_matrix +0 -1
  113. data/build/run +0 -5
  114. data/build/strict-mode.sh +0 -16
  115. data/config/devtools.yml +0 -2
  116. data/config/flay.yml +0 -3
  117. data/config/flog.yml +0 -2
  118. data/config/reek.yml +0 -137
  119. data/lib/mutest/mutator/node/noop.rb +0 -19
@@ -0,0 +1,25 @@
1
+ Mutest::Meta::Example.add :splat do
2
+ source 'foo(*bar)'
3
+
4
+ singleton_mutations
5
+ mutation 'foo'
6
+ mutation 'foo(nil)'
7
+ mutation 'foo(bar)'
8
+ mutation 'foo(self)'
9
+ mutation 'foo(*self)'
10
+ end
11
+
12
+ Mutest::Meta::Example.add :splat do
13
+ source 'a = *bar'
14
+
15
+ singleton_mutations
16
+ mutation 'a__mutest__ = *bar'
17
+ mutation 'a = nil'
18
+ mutation 'a = self'
19
+ mutation 'a = []'
20
+ mutation 'a = [nil]'
21
+ mutation 'a = [self]'
22
+ mutation 'a = [*self]'
23
+ mutation 'a = [bar]'
24
+ mutation s(:lvasgn, :a, s(:splat, s(:send, nil, :bar)))
25
+ end
@@ -2,4 +2,5 @@ Mutest::Meta::Example.add :str do
2
2
  source '"foo"'
3
3
 
4
4
  singleton_mutations
5
+ mutation '"foo__mutest__"'
5
6
  end
@@ -1,6 +1,5 @@
1
1
  Mutest::Meta::Example.add :true do
2
2
  source 'true'
3
3
 
4
- mutation 'nil'
5
4
  mutation 'false'
6
5
  end
@@ -6,7 +6,6 @@ Mutest::Meta::Example.add :until do
6
6
  mutation 'until true; foo; end'
7
7
  mutation 'until true; end'
8
8
  mutation 'until false; foo; bar; end'
9
- mutation 'until nil; foo; bar; end'
10
9
  mutation 'until true; foo; nil; end'
11
10
  mutation 'until true; foo; self; end'
12
11
  mutation 'until true; nil; bar; end'
@@ -8,7 +8,6 @@ Mutest::Meta::Example.add :while do
8
8
  mutation 'while true; foo; end'
9
9
  mutation 'while true; end'
10
10
  mutation 'while false; foo; bar; end'
11
- mutation 'while nil; foo; bar; end'
12
11
  mutation 'while true; foo; nil; end'
13
12
  mutation 'while true; nil; bar; end'
14
13
  mutation 'while true; raise; end'
@@ -20,5 +19,4 @@ Mutest::Meta::Example.add :while do
20
19
  singleton_mutations
21
20
  mutation 'while true; raise; end'
22
21
  mutation 'while false; end'
23
- mutation 'while nil; end'
24
22
  end
@@ -3,6 +3,5 @@ Mutest::Meta::Example.add :yield do
3
3
 
4
4
  singleton_mutations
5
5
  mutation 'yield false'
6
- mutation 'yield nil'
7
6
  mutation 'yield'
8
7
  end
@@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
16
16
  gem.extra_rdoc_files = %w[LICENSE]
17
17
 
18
18
  gem.add_runtime_dependency('mutest', "~> #{gem.version}")
19
- gem.add_runtime_dependency('rspec-core', '>= 3.4.0', '< 3.6.0')
19
+ gem.add_runtime_dependency('rspec-core', '>= 3.4.0', '< 3.7.0')
20
20
 
21
21
  gem.add_development_dependency('bundler', '~> 1.3', '>= 1.3.5')
22
22
  end
@@ -39,8 +39,4 @@ Gem::Specification.new do |gem|
39
39
  gem.add_runtime_dependency('anima', '~> 0.3.0')
40
40
  gem.add_runtime_dependency('concord', '~> 0.1.5')
41
41
  gem.add_runtime_dependency('regexp_parser', '~> 0.4.1')
42
-
43
- gem.add_development_dependency('rubocop-rspec', '~> 1.10.0')
44
- gem.add_development_dependency('devtools', '~> 0.1.16')
45
- gem.add_development_dependency('bundler', '~> 1.10')
46
42
  end
@@ -1,7 +1,7 @@
1
1
  RSpec.describe 'rspec integration', mutest: false do
2
2
  let(:base_cmd) { 'bundle exec mutest -I lib --require test_app --use rspec' }
3
3
 
4
- %w[3.4 3.5].each do |version|
4
+ %w[3.4 3.5 3.6].each do |version|
5
5
  context "RSpec #{version}" do
6
6
  let(:gemfile) { "Gemfile.rspec#{version}" }
7
7
 
@@ -2,7 +2,7 @@
2
2
  - name: rubyspec
3
3
  namespace: Rubyspec
4
4
  repo_uri: 'https://github.com/ruby/rubyspec.git'
5
- repo_ref: 'origin/master'
5
+ repo_ref: 'e6665ae^' # TODO: ignore bad_syntax.rb
6
6
  mutation_coverage: false
7
7
  mutation_generation: true
8
8
  expected_errors:
@@ -0,0 +1,5 @@
1
+ RSpec.shared_examples_for 'a command method' do
2
+ it 'returns self' do
3
+ expect(subject).to equal(object)
4
+ end
5
+ end
@@ -0,0 +1,10 @@
1
+ RSpec.shared_examples_for 'an idempotent method' do
2
+ it 'is idempotent' do
3
+ first = subject
4
+ fail 'RSpec not configured for threadsafety' unless RSpec.configuration.threadsafe?
5
+ mutex = __memoized.instance_variable_get(:@mutex)
6
+ memoized = __memoized.instance_variable_get(:@memoized)
7
+ mutex.synchronize { memoized.delete(:subject) }
8
+ expect(subject).to equal(first)
9
+ end
10
+ end
@@ -22,10 +22,19 @@ require 'tempfile'
22
22
  require 'concord'
23
23
  require 'anima'
24
24
  require 'adamantium'
25
- require 'devtools/spec_helper'
26
25
  require 'unparser/cli'
27
26
  require 'mutest'
28
27
  require 'mutest/meta'
28
+ require 'rspec/its'
29
+ require 'timeout'
30
+
31
+ module MutestSpec
32
+ SPECS_PATH = Pathname.new(__dir__).expand_path.freeze
33
+ PROJECT_ROOT = SPECS_PATH.parent.freeze
34
+ UNIT_TEST_TIMOUT = 10.0
35
+ end # MutestSpec
36
+
37
+ Dir.glob(MutestSpec::SPECS_PATH.join('{shared,support}/**/*.rb')).each(&method(:require))
29
38
 
30
39
  $LOAD_PATH << File.join(TestApp.root, 'lib')
31
40
 
@@ -63,6 +72,17 @@ RSpec.configure do |config|
63
72
  config.include(ParserHelper)
64
73
  config.include(Mutest::AST::Sexp)
65
74
 
75
+ # Define metadata for all tests which live under spec/unit
76
+ config.define_derived_metadata(file_path: %r{\bspec/unit/}) do |metadata|
77
+ # Set the type of these tests as 'unit'
78
+ metadata[:type] = :unit
79
+ end
80
+
81
+ # Set a modest timeout to kill slow tests when running `mutest`.
82
+ config.around(:each, type: :unit) do |example|
83
+ Timeout.timeout(MutestSpec::UNIT_TEST_TIMOUT, &example)
84
+ end
85
+
66
86
  config.after(:suite) do
67
87
  $stderr = STDERR
68
88
  MutestSpec::Warning.assert_no_warnings
@@ -15,7 +15,7 @@ module XSpec
15
15
 
16
16
  # Parse events into reaction
17
17
  #
18
- # @param [Array{Symbol,Object}, Hash{Symbol,Object}]
18
+ # @param [Array<Symbol,Object>, Hash{Symbol,Object}]
19
19
  #
20
20
  # @return [MessageReaction]
21
21
  def self.parse(events)
@@ -17,6 +17,6 @@ RSpec.describe Mutest::Actor::Sender do
17
17
  expect(condition_variable).to receive(:signal).ordered
18
18
  end
19
19
 
20
- it_should_behave_like 'a command method'
20
+ it_behaves_like 'a command method'
21
21
  end
22
22
  end
@@ -5,21 +5,33 @@ RSpec.describe Mutest::AST::Meta::Send do
5
5
  Parser::CurrentRuby.parse(source)
6
6
  end
7
7
 
8
- let(:method_call) { parse('foo.bar(baz)') }
9
- let(:attribute_read) { parse('foo.bar') }
10
- let(:index_assignment) { parse('foo[0] = bar') }
11
- let(:attribute_assignment) { parse('foo.bar = baz') }
12
- let(:binary_method_operator) { parse('foo == bar') }
8
+ let(:method_call) { parse('foo.bar(baz)') }
9
+ let(:attribute_read) { parse('foo.bar') }
10
+ let(:index_assignment) { parse('foo[0] = bar') }
11
+ let(:attribute_assignment) { parse('foo.bar = baz') }
12
+ let(:binary_method_operator) { parse('foo == bar') }
13
+ let(:method_method_call) { parse('foo.method(:bar)') }
14
+ let(:public_method_call) { parse("foo.public_method('bar')") }
13
15
 
14
16
  class Expectation
15
- include Adamantium, Anima.new(:name, :assignment, :attribute_assignment, :index_assignment, :binary_method_operator)
17
+ include Adamantium,
18
+ Anima.new(
19
+ :name,
20
+ :assignment,
21
+ :attribute_assignment,
22
+ :index_assignment,
23
+ :binary_method_operator,
24
+ :method_object_selector
25
+ )
16
26
 
17
27
  ALL = [
18
- [:method_call, false, false, false, false],
19
- [:attribute_read, false, false, false, false],
20
- [:index_assignment, true, false, true, false],
21
- [:attribute_assignment, true, true, false, false],
22
- [:binary_method_operator, false, false, false, true]
28
+ [:method_call, false, false, false, false, false],
29
+ [:attribute_read, false, false, false, false, false],
30
+ [:index_assignment, true, false, true, false, false],
31
+ [:attribute_assignment, true, true, false, false, false],
32
+ [:binary_method_operator, false, false, false, true, false],
33
+ [:method_method_call, false, false, false, false, true],
34
+ [:public_method_call, false, false, false, false, true]
23
35
  ].map do |values|
24
36
  new(Hash[anima.attribute_names.zip(values)])
25
37
  end.freeze
@@ -85,7 +85,7 @@ RSpec.describe Mutest::CLI do
85
85
 
86
86
  let(:expected_message) { 'invalid option: --invalid' }
87
87
 
88
- it_should_behave_like 'an invalid cli run'
88
+ it_behaves_like 'an invalid cli run'
89
89
  end
90
90
 
91
91
  context 'with unknown option' do
@@ -93,7 +93,7 @@ RSpec.describe Mutest::CLI do
93
93
 
94
94
  let(:expected_message) { 'invalid option: --invalid' }
95
95
 
96
- it_should_behave_like 'an invalid cli run'
96
+ it_behaves_like 'an invalid cli run'
97
97
  end
98
98
 
99
99
  context 'with include help flag' do
@@ -104,7 +104,7 @@ RSpec.describe Mutest::CLI do
104
104
  expect(Kernel).to receive(:exit)
105
105
  end
106
106
 
107
- it_should_behave_like 'a cli parser'
107
+ it_behaves_like 'a cli parser'
108
108
 
109
109
  let(:expected_message) do
110
110
  strip_indent(<<-MESSAGE)
@@ -129,7 +129,7 @@ Options:
129
129
  context 'with include flag' do
130
130
  let(:flags) { %w[--include foo] }
131
131
 
132
- it_should_behave_like 'a cli parser'
132
+ it_behaves_like 'a cli parser'
133
133
 
134
134
  it 'configures includes' do
135
135
  expect(subject.config.includes).to eql(%w[foo])
@@ -147,7 +147,7 @@ Options:
147
147
  .and_call_original
148
148
  end
149
149
 
150
- it_should_behave_like 'a cli parser'
150
+ it_behaves_like 'a cli parser'
151
151
  end
152
152
 
153
153
  context 'when specifying the default null integration explicitely' do
@@ -160,7 +160,7 @@ Options:
160
160
  .and_call_original
161
161
  end
162
162
 
163
- it_should_behave_like 'a cli parser'
163
+ it_behaves_like 'a cli parser'
164
164
  end
165
165
 
166
166
  context 'when integration does NOT exist' do
@@ -183,13 +183,13 @@ Options:
183
183
  expect($stdout).to receive(:puts).with("mutest-#{Mutest::VERSION}")
184
184
  end
185
185
 
186
- it_should_behave_like 'a cli parser'
186
+ it_behaves_like 'a cli parser'
187
187
  end
188
188
 
189
189
  context 'with jobs flag' do
190
190
  let(:flags) { %w[--jobs 0] }
191
191
 
192
- it_should_behave_like 'a cli parser'
192
+ it_behaves_like 'a cli parser'
193
193
 
194
194
  it 'configures expected coverage' do
195
195
  expect(subject.config.jobs).to be(0)
@@ -199,7 +199,7 @@ Options:
199
199
  context 'with require flags' do
200
200
  let(:flags) { %w[--require foo --require bar] }
201
201
 
202
- it_should_behave_like 'a cli parser'
202
+ it_behaves_like 'a cli parser'
203
203
 
204
204
  it 'configures requires' do
205
205
  expect(subject.config.requires).to eql(%w[foo bar])
@@ -223,7 +223,7 @@ Options:
223
223
  )
224
224
  end
225
225
 
226
- it_should_behave_like 'a cli parser'
226
+ it_behaves_like 'a cli parser'
227
227
  end
228
228
 
229
229
  context 'with subject-ignore flag' do
@@ -233,13 +233,13 @@ Options:
233
233
  default_matcher_config.with(ignore_expressions: [parse_expression('Foo::Bar')])
234
234
  end
235
235
 
236
- it_should_behave_like 'a cli parser'
236
+ it_behaves_like 'a cli parser'
237
237
  end
238
238
 
239
239
  context 'with fail-fast flag' do
240
240
  let(:flags) { %w[--fail-fast] }
241
241
 
242
- it_should_behave_like 'a cli parser'
242
+ it_behaves_like 'a cli parser'
243
243
 
244
244
  it 'sets the fail fast option' do
245
245
  expect(subject.config.fail_fast).to be(true)
@@ -249,7 +249,7 @@ Options:
249
249
  context 'with zombie flag' do
250
250
  let(:flags) { %w[--zombie] }
251
251
 
252
- it_should_behave_like 'a cli parser'
252
+ it_behaves_like 'a cli parser'
253
253
 
254
254
  it 'sets the zombie option' do
255
255
  expect(subject.config.zombie).to be(true)
@@ -77,7 +77,7 @@ RSpec.describe Mutest::Context do
77
77
  is_expected.to eql('TestApp')
78
78
  end
79
79
 
80
- it_should_behave_like 'an idempotent method'
80
+ it_behaves_like 'an idempotent method'
81
81
  end
82
82
 
83
83
  context 'with scoped constant name' do
@@ -85,7 +85,7 @@ RSpec.describe Mutest::Context do
85
85
  is_expected.to eql('Literal')
86
86
  end
87
87
 
88
- it_should_behave_like 'an idempotent method'
88
+ it_behaves_like 'an idempotent method'
89
89
  end
90
90
  end
91
91
 
@@ -30,7 +30,7 @@ RSpec.describe Mutest::Diff do
30
30
 
31
31
  it { is_expected.to eql(expectation) }
32
32
 
33
- it_should_behave_like 'an idempotent method'
33
+ it_behaves_like 'an idempotent method'
34
34
  end
35
35
 
36
36
  context 'when there is no diff' do
@@ -39,7 +39,7 @@ RSpec.describe Mutest::Diff do
39
39
 
40
40
  it { is_expected.to be(nil) }
41
41
 
42
- it_should_behave_like 'an idempotent method'
42
+ it_behaves_like 'an idempotent method'
43
43
  end
44
44
  end
45
45
 
@@ -65,7 +65,7 @@ RSpec.describe Mutest::Diff do
65
65
 
66
66
  it { is_expected.to eql(expectation) }
67
67
 
68
- it_should_behave_like 'an idempotent method'
68
+ it_behaves_like 'an idempotent method'
69
69
  end
70
70
 
71
71
  context 'when there is a diff at begin of hunk' do
@@ -83,7 +83,7 @@ RSpec.describe Mutest::Diff do
83
83
 
84
84
  it { is_expected.to eql(expectation) }
85
85
 
86
- it_should_behave_like 'an idempotent method'
86
+ it_behaves_like 'an idempotent method'
87
87
  end
88
88
 
89
89
  context 'when there is a diff NOT at begin of hunk' do
@@ -101,7 +101,7 @@ RSpec.describe Mutest::Diff do
101
101
 
102
102
  it { is_expected.to eql(expectation) }
103
103
 
104
- it_should_behave_like 'an idempotent method'
104
+ it_behaves_like 'an idempotent method'
105
105
  end
106
106
 
107
107
  context 'when the diff has a long context at begin' do
@@ -124,7 +124,7 @@ RSpec.describe Mutest::Diff do
124
124
 
125
125
  it { is_expected.to eql(expectation) }
126
126
 
127
- it_should_behave_like 'an idempotent method'
127
+ it_behaves_like 'an idempotent method'
128
128
  end
129
129
 
130
130
  context 'when the diff has a long context at end, deleting' do
@@ -147,7 +147,7 @@ RSpec.describe Mutest::Diff do
147
147
 
148
148
  it { is_expected.to eql(expectation) }
149
149
 
150
- it_should_behave_like 'an idempotent method'
150
+ it_behaves_like 'an idempotent method'
151
151
  end
152
152
 
153
153
  context 'when the diff has a long context at end, inserting' do
@@ -170,7 +170,7 @@ RSpec.describe Mutest::Diff do
170
170
 
171
171
  it { is_expected.to eql(expectation) }
172
172
 
173
- it_should_behave_like 'an idempotent method'
173
+ it_behaves_like 'an idempotent method'
174
174
  end
175
175
 
176
176
  context 'when there is no diff' do
@@ -179,7 +179,7 @@ RSpec.describe Mutest::Diff do
179
179
 
180
180
  it { is_expected.to be(nil) }
181
181
 
182
- it_should_behave_like 'an idempotent method'
182
+ it_behaves_like 'an idempotent method'
183
183
  end
184
184
  end
185
185
  end
@@ -6,7 +6,7 @@ RSpec.describe Mutest::Integration::Null do
6
6
 
7
7
  it { is_expected.to eql([]) }
8
8
 
9
- it_should_behave_like 'an idempotent method'
9
+ it_behaves_like 'an idempotent method'
10
10
  end
11
11
 
12
12
  describe '#call' do