class RuboCop::Cop::Minitest::RefuteEqual

This cop enforces the use of `refute_equal(expected, object)` over `assert(expected != actual)` or `assert(! expected == actual)`.

@example

# bad
assert("rubocop-minitest" != actual)
assert(! "rubocop-minitest" == actual)

# good
refute_equal("rubocop-minitest", actual)

Constants

MSG
RESTRICT_ON_SEND

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/minitest/refute_equal.rb, line 29
def on_send(node)
  preferred, over = process_not_equal(node)
  return unless preferred && over

  assert_not_equal(node) do |_, expected, actual|
    message = format(MSG, preferred: preferred, over: over)

    add_offense(node, message: message) do |corrector|
      corrector.replace(node.loc.selector, 'refute_equal')

      replacement = [expected, actual].map(&:source).join(', ')
      corrector.replace(first_argument_range(node), replacement)
    end
  end
end

Private Instance Methods

original_usage(first_part, custom_message) click to toggle source
# File lib/rubocop/cop/minitest/refute_equal.rb, line 52
def original_usage(first_part, custom_message)
  [first_part, custom_message].compact.join(', ')
end
preferred_usage(first_arg, second_arg, custom_message = nil) click to toggle source
# File lib/rubocop/cop/minitest/refute_equal.rb, line 47
def preferred_usage(first_arg, second_arg, custom_message = nil)
  [first_arg, second_arg, custom_message]
    .compact.map(&:source).join(', ')
end
process_not_equal(node) click to toggle source
# File lib/rubocop/cop/minitest/refute_equal.rb, line 56
def process_not_equal(node)
  assert_not_equal(node) do |over, first_arg, second_arg, rest_args|
    custom_message = rest_args.first
    preferred = preferred_usage(first_arg, second_arg, custom_message)
    over = original_usage(over.source, custom_message&.source)
    return [preferred, over]
  end
end