Skip to content

Commit

Permalink
RefuteKindOf: also replace is_a? as well
Browse files Browse the repository at this point in the history
  • Loading branch information
amomchilov committed Jan 11, 2024
1 parent 6b91ee1 commit b0677a1
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 2 deletions.
1 change: 1 addition & 0 deletions config/default.yml
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,7 @@ Minitest/RefuteKindOf:
StyleGuide: 'https://github.com/rubocop/minitest-style-guide#refute-kind-of'
Enabled: 'pending'
VersionAdded: '0.10'
VersionChanged: '0.35.0'

Minitest/RefuteMatch:
Description: 'This cop enforces the test to use `refute_match` instead of using `refute(matcher.match(object))`.'
Expand Down
2 changes: 1 addition & 1 deletion docs/modules/ROOT/pages/cops_minitest.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -1514,7 +1514,7 @@ refute_instance_of(Class, object, 'message')
| Yes
| Yes
| 0.10
| -
| 0.35.0
|===
Enforces the use of `refute_kind_of(Class, object)`
Expand Down
6 changes: 5 additions & 1 deletion lib/rubocop/cop/minitest/refute_kind_of.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,18 @@ module Minitest
# refute(object.kind_of?(Class))
# refute(object.kind_of?(Class), 'message')
#
# # bad
# refute(object.is_of?(Class))
# refute(object.is_of?(Class), 'message')
#
# # good
# refute_kind_of(Class, object)
# refute_kind_of(Class, object, 'message')
#
class RefuteKindOf < Base
extend MinitestCopRule

define_rule :refute, target_method: :kind_of?, inverse: true
define_rule :refute, target_method: %i[kind_of? is_a?], preferred_method: :refute_kind_of, inverse: true
end
end
end
Expand Down
38 changes: 38 additions & 0 deletions test/rubocop/cop/minitest/refute_kind_of_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,25 @@ def test_do_something
RUBY
end

def test_registers_offense_when_using_refute_with_kind_of
assert_offense(<<~RUBY)
class FooTest < Minitest::Test
def test_do_something
refute(object.is_a?(SomeClass))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer using `refute_kind_of(SomeClass, object)`.
end
end
RUBY

assert_correction(<<~RUBY)
class FooTest < Minitest::Test
def test_do_something
refute_kind_of(SomeClass, object)
end
end
RUBY
end

def test_registers_offense_when_using_refute_with_kind_of_and_message
assert_offense(<<~RUBY)
class FooTest < Minitest::Test
Expand All @@ -41,6 +60,25 @@ def test_do_something
RUBY
end

def test_registers_offense_when_using_refute_with_kind_of_and_message
assert_offense(<<~RUBY)
class FooTest < Minitest::Test
def test_do_something
refute(object.is_a?(SomeClass), 'message')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer using `refute_kind_of(SomeClass, object, 'message')`.
end
end
RUBY

assert_correction(<<~RUBY)
class FooTest < Minitest::Test
def test_do_something
refute_kind_of(SomeClass, object, 'message')
end
end
RUBY
end

def test_does_not_register_offense_when_using_refute_kind_of_method
assert_no_offenses(<<~RUBY)
class FooTest < Minitest::Test
Expand Down

0 comments on commit b0677a1

Please sign in to comment.