Skip to content

Commit

Permalink
AssertKindOf: also replace is_a? as well
Browse files Browse the repository at this point in the history
  • Loading branch information
amomchilov committed Jan 10, 2024
1 parent 3fa043a commit defcc5b
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 1 deletion.
10 changes: 9 additions & 1 deletion lib/rubocop/cop/minitest/assert_kind_of.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,22 @@ module Minitest
# assert(object.kind_of?(Class))
# assert(object.kind_of?(Class), 'message')
#
# # bad
# # `#is_a?` is an alias for `#kind_of?
# assert(object.is_a?(Class))
# assert(object.is_a?(Class), 'message')
#
# # good
# assert_kind_of(Class, object)
# assert_kind_of(Class, object, 'message')
#
class AssertKindOf < Base
extend MinitestCopRule

define_rule :assert, target_method: :kind_of?, inverse: true
define_rule :assert,
target_method: [:kind_of?, :is_a?],
preferred_method: :assert_kind_of,
inverse: true
end
end
end
Expand Down
39 changes: 39 additions & 0 deletions test/rubocop/cop/minitest/assert_kind_of_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,26 @@ def test_do_something
RUBY
end


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

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

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

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

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

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

0 comments on commit defcc5b

Please sign in to comment.