Class: RuboCop::Cop::Minitest::AssertSame

Inherits:
Base
  • Object
show all
Extended by:
AutoCorrector
Defined in:
lib/rubocop/cop/minitest/assert_same.rb

Overview

Enforces the use of ‘assert_same(expected, actual)` over `assert(expected.equal?(actual))`.

NOTE: Use ‘assert_same` only when there is a need to compare by identity.

Otherwise, use `assert_equal`.

Examples:

# bad
assert(expected.equal?(actual))
assert_equal(expected.object_id, actual.object_id)

# good
assert_same(expected, actual)

Constant Summary collapse

MSG =
'Prefer using `assert_same(%<new_arguments>s)`.'
RESTRICT_ON_SEND =
i[assert assert_equal].freeze

Instance Method Summary collapse

Instance Method Details

#on_send(node) ⇒ Object

rubocop:disable Metrics/AbcSize



40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/rubocop/cop/minitest/assert_same.rb', line 40

def on_send(node)
  if (equal_node, expected_node, actual_node, message_node = assert_with_equal?(node))
    add_offense(node, message: message(expected_node, actual_node, message_node.first)) do |corrector|
      corrector.replace(node.loc.selector, 'assert_same')
      corrector.replace(equal_node, "#{expected_node.source}, #{actual_node.source}")
    end
  elsif (expected_node, actual_node, message_node = assert_equal_with_object_id?(node))
    add_offense(node, message: message(expected_node, actual_node, message_node.first)) do |corrector|
      corrector.replace(node.loc.selector, 'assert_same')
      remove_method_call(expected_node.parent, corrector)
      remove_method_call(actual_node.parent, corrector)
    end
  end
end