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 89385cb commit 6a92336
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 1 deletion.
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: '<<next>>'

Minitest/RefuteMatch:
Description: 'This cop enforces the test to use `refute_match` instead of using `refute(matcher.match(object))`.'
Expand Down
7 changes: 6 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,19 @@ module Minitest
# refute(object.kind_of?(Class))
# refute(object.kind_of?(Class), 'message')
#
# # bad
# # `is_a?` is an alias for `kind_of?`
# 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 6a92336

Please sign in to comment.