Class: RuboCop::Cop::Minitest::RefuteSame

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

Overview

Enforces the use of ‘refute_same(expected, object)` over `refute(expected.equal?(actual))`.

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

Otherwise, use `refute_equal`.

Examples:

# bad
refute(expected.equal?(actual))
refute_equal(expected.object_id, actual.object_id)

# good
refute_same(expected, actual)

Constant Summary collapse

MSG =
'Prefer using `refute_same(%<new_arguments>s)`.'
RESTRICT_ON_SEND =
i[refute refute_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/refute_same.rb', line 40

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