From 3ac10087e6023601547f8c8e28b94b8bb09098d0 Mon Sep 17 00:00:00 2001 From: Koichi ITO Date: Fri, 20 Dec 2019 19:06:35 +0900 Subject: [PATCH] [Fix #42] Fix an incorrect autocorrect for some cops of `Minitest` Fixes #42. This PR fixes an incorrect autocorrect for the following cops when using heredoc message. * `Minitest/AssertIncludes` * `Minitest/RefuteIncludes` * `Minitest/AssertEmpty` * `Minitest/RefuteEmpty` * `Minitest/AssertEqual` * `Minitest/RefuteEqual` * `Minitest/AssertInstanceOf` * `Minitest/RefuteInstanceOf` * `Minitest/AssertRespondTo` * `Minitest/RefuteRespondTo` * `Minitest/AssertNil` * `Minitest/RefuteNil` * `Minitest/AssertTruthy` * `Minitest/RefuteFalse` --- .rubocop_todo.yml | 8 ++--- CHANGELOG.md | 2 ++ lib/rubocop/cop/minitest/assert_empty.rb | 10 +++--- lib/rubocop/cop/minitest/assert_equal.rb | 21 +++++-------- lib/rubocop/cop/minitest/assert_includes.rb | 11 ++++--- .../cop/minitest/assert_instance_of.rb | 15 +++++---- lib/rubocop/cop/minitest/assert_nil.rb | 11 +++++-- lib/rubocop/cop/minitest/assert_respond_to.rb | 13 +++++--- lib/rubocop/cop/minitest/assert_truthy.rb | 11 +++++-- lib/rubocop/cop/minitest/refute_empty.rb | 10 +++--- lib/rubocop/cop/minitest/refute_equal.rb | 15 +++++---- lib/rubocop/cop/minitest/refute_false.rb | 11 +++++-- lib/rubocop/cop/minitest/refute_includes.rb | 11 ++++--- .../cop/minitest/refute_instance_of.rb | 15 +++++---- lib/rubocop/cop/minitest/refute_nil.rb | 11 +++++-- lib/rubocop/cop/minitest/refute_respond_to.rb | 13 +++++--- lib/rubocop/cop/minitest_cops.rb | 1 + .../cop/mixin/argument_range_helper.rb | 31 +++++++++++++++++++ .../rubocop/cop/minitest/assert_empty_test.rb | 25 +++++++++++++++ .../rubocop/cop/minitest/assert_equal_test.rb | 25 +++++++++++++++ .../cop/minitest/assert_includes_test.rb | 25 +++++++++++++++ .../cop/minitest/assert_instance_of_test.rb | 25 +++++++++++++++ test/rubocop/cop/minitest/assert_nil_test.rb | 25 +++++++++++++++ .../cop/minitest/assert_respond_to_test.rb | 25 +++++++++++++++ .../cop/minitest/assert_truthy_test.rb | 25 +++++++++++++++ .../rubocop/cop/minitest/refute_empty_test.rb | 25 +++++++++++++++ .../rubocop/cop/minitest/refute_equal_test.rb | 25 +++++++++++++++ .../rubocop/cop/minitest/refute_false_test.rb | 25 +++++++++++++++ .../cop/minitest/refute_includes_test.rb | 25 +++++++++++++++ .../cop/minitest/refute_instance_of_test.rb | 25 +++++++++++++++ test/rubocop/cop/minitest/refute_nil_test.rb | 25 +++++++++++++++ .../cop/minitest/refute_respond_to_test.rb | 25 +++++++++++++++ 32 files changed, 487 insertions(+), 83 deletions(-) create mode 100644 lib/rubocop/cop/mixin/argument_range_helper.rb diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 5f0216e5..a698c516 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config` -# on 2019-12-20 12:55:40 +0900 using RuboCop version 0.78.0. +# on 2019-12-21 01:15:41 +0900 using RuboCop version 0.78.0. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -10,14 +10,14 @@ Metrics/AbcSize: Max: 17 -# Offense count: 5 +# Offense count: 19 # Configuration parameters: CountComments, ExcludedMethods. Metrics/MethodLength: Max: 14 -# Offense count: 38 +# Offense count: 40 # Cop supports --auto-correct. # Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns. # URISchemes: http, https Layout/LineLength: - Max: 87 + Max: 90 diff --git a/CHANGELOG.md b/CHANGELOG.md index 41d95f7b..45af8fba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## master (unreleased) +* [#42](https://github.com/rubocop-hq/rubocop-minitest/issues/42): Fix an incorrect autocorrect for some cops of `Minitest` department when using heredoc message. ([@koic][]) + ## 0.5.0 (2019-11-24) ### New features diff --git a/lib/rubocop/cop/minitest/assert_empty.rb b/lib/rubocop/cop/minitest/assert_empty.rb index 24c9ec56..16082721 100644 --- a/lib/rubocop/cop/minitest/assert_empty.rb +++ b/lib/rubocop/cop/minitest/assert_empty.rb @@ -16,6 +16,8 @@ module Minitest # assert_empty(object, 'the message') # class AssertEmpty < Cop + include ArgumentRangeHelper + MSG = 'Prefer using `assert_empty(%s)` over ' \ '`assert(%s)`.' @@ -37,11 +39,9 @@ def on_send(node) def autocorrect(node) lambda do |corrector| - assert_with_empty(node) do |_first_receiver_arg, actual, rest_receiver_arg| - message = rest_receiver_arg.first - - replacement = [actual.source, message&.source].compact.join(', ') - corrector.replace(node.loc.expression, "assert_empty(#{replacement})") + assert_with_empty(node) do |_, actual_arg| + corrector.replace(node.loc.selector, 'assert_empty') + corrector.replace(first_argument_range(node), actual_arg.source) end end end diff --git a/lib/rubocop/cop/minitest/assert_equal.rb b/lib/rubocop/cop/minitest/assert_equal.rb index a892b971..c5fd1a1c 100644 --- a/lib/rubocop/cop/minitest/assert_equal.rb +++ b/lib/rubocop/cop/minitest/assert_equal.rb @@ -14,6 +14,8 @@ module Minitest # assert_equal("rubocop-minitest", actual) # class AssertEqual < Cop + include ArgumentRangeHelper + MSG = 'Prefer using `assert_equal(%s)` over ' \ '`assert(%s)`.' @@ -22,9 +24,7 @@ class AssertEqual < Cop PATTERN def on_send(node) - assert_equal(node) do - |first_receiver_arg, expected, actual, rest_receiver_arg| - + assert_equal(node) do |first_receiver_arg, expected, actual, rest_receiver_arg| message = rest_receiver_arg.first preferred = [expected.source, actual.source, message&.source] .compact.join(', ') @@ -38,19 +38,14 @@ def on_send(node) def autocorrect(node) lambda do |corrector| - assert_equal(node) do |_receiver, expected, actual, rest_receiver_arg| - message = rest_receiver_arg.first - replacement = node_arguments(expected, actual, message) - corrector.replace(node.loc.expression, "assert_equal(#{replacement})") + assert_equal(node) do |_, expected, actual| + corrector.replace(node.loc.selector, 'assert_equal') + + replacement = [expected, actual].map(&:source).join(', ') + corrector.replace(first_argument_range(node), replacement) end end end - - private - - def node_arguments(expected, actual, message) - [expected.source, actual.source, message&.source].compact.join(', ') - end end end end diff --git a/lib/rubocop/cop/minitest/assert_includes.rb b/lib/rubocop/cop/minitest/assert_includes.rb index 8afeccc7..89917825 100644 --- a/lib/rubocop/cop/minitest/assert_includes.rb +++ b/lib/rubocop/cop/minitest/assert_includes.rb @@ -16,6 +16,8 @@ module Minitest # assert_includes(collection, object, 'the message') # class AssertIncludes < Cop + include ArgumentRangeHelper + MSG = 'Prefer using `assert_includes(%s)` over ' \ '`assert(%s)`.' @@ -39,12 +41,11 @@ def on_send(node) def autocorrect(node) lambda do |corrector| - assert_with_includes(node) do - |_receiver, collection, actual, rest_receiver_arg| + assert_with_includes(node) do |_, collection, actual| + corrector.replace(node.loc.selector, 'assert_includes') - message = rest_receiver_arg.first - replacement = node_arguments(collection, actual, message) - corrector.replace(node.loc.expression, "assert_includes(#{replacement})") + replacement = [collection, actual].map(&:source).join(', ') + corrector.replace(first_argument_range(node), replacement) end end end diff --git a/lib/rubocop/cop/minitest/assert_instance_of.rb b/lib/rubocop/cop/minitest/assert_instance_of.rb index fdc013c7..e615e377 100644 --- a/lib/rubocop/cop/minitest/assert_instance_of.rb +++ b/lib/rubocop/cop/minitest/assert_instance_of.rb @@ -16,6 +16,8 @@ module Minitest # assert_instance_of(Class, object, 'the message') # class AssertInstanceOf < Cop + include ArgumentRangeHelper + MSG = 'Prefer using `assert_instance_of(%s)` over ' \ '`assert(%s)`.' @@ -24,9 +26,7 @@ class AssertInstanceOf < Cop PATTERN def on_send(node) - assert_with_instance_of(node) do - |first_receiver_arg, object, method, rest_args| - + assert_with_instance_of(node) do |first_receiver_arg, object, method, rest_args| message = rest_args.first arguments = node_arguments(object, method, message) receiver = [first_receiver_arg.source, message&.source].compact.join(', ') @@ -39,12 +39,11 @@ def on_send(node) def autocorrect(node) lambda do |corrector| - assert_with_instance_of(node) do |_, object, method, rest_args| - message = rest_args.first - arguments = node_arguments(object, method, message) + assert_with_instance_of(node) do |_, object, method| + corrector.replace(node.loc.selector, 'assert_instance_of') - replacement = "assert_instance_of(#{arguments})" - corrector.replace(node.loc.expression, replacement) + replacement = [method, object].map(&:source).join(', ') + corrector.replace(first_argument_range(node), replacement) end end end diff --git a/lib/rubocop/cop/minitest/assert_nil.rb b/lib/rubocop/cop/minitest/assert_nil.rb index 84ed747b..04a61487 100644 --- a/lib/rubocop/cop/minitest/assert_nil.rb +++ b/lib/rubocop/cop/minitest/assert_nil.rb @@ -16,6 +16,8 @@ module Minitest # assert_nil(actual, 'the message') # class AssertNil < Cop + include ArgumentRangeHelper + MSG = 'Prefer using `assert_nil(%s)` over ' \ '`assert_equal(nil, %s)`.' @@ -35,9 +37,12 @@ def on_send(node) def autocorrect(node) lambda do |corrector| - arguments = node.arguments.reject(&:nil_type?) - replacement = arguments.map(&:source).join(', ') - corrector.replace(node.loc.expression, "assert_nil(#{replacement})") + assert_equal_with_nil(node) do |actual| + corrector.replace(node.loc.selector, 'assert_nil') + corrector.replace( + first_and_second_arguments_range(node), actual.source + ) + end end end end diff --git a/lib/rubocop/cop/minitest/assert_respond_to.rb b/lib/rubocop/cop/minitest/assert_respond_to.rb index cd1ac25b..7172f268 100644 --- a/lib/rubocop/cop/minitest/assert_respond_to.rb +++ b/lib/rubocop/cop/minitest/assert_respond_to.rb @@ -18,6 +18,8 @@ module Minitest # assert_respond_to(self, some_method) # class AssertRespondTo < Cop + include ArgumentRangeHelper + MSG = 'Prefer using `assert_respond_to(%s)` over ' \ '`assert(%s)`.' @@ -37,11 +39,12 @@ def on_send(node) def autocorrect(node) lambda do |corrector| - assert_with_respond_to(node) do |_, object, method, rest_args| - custom_message = rest_args.first - preferred = build_preferred_arguments(object, method, custom_message) - replacement = "assert_respond_to(#{preferred})" - corrector.replace(node.loc.expression, replacement) + assert_with_respond_to(node) do |_, object, method| + corrector.replace(node.loc.selector, 'assert_respond_to') + + object = object ? object.source : 'self' + replacement = [object, method.source].join(', ') + corrector.replace(first_argument_range(node), replacement) end end end diff --git a/lib/rubocop/cop/minitest/assert_truthy.rb b/lib/rubocop/cop/minitest/assert_truthy.rb index 5702ef3c..12342cc3 100644 --- a/lib/rubocop/cop/minitest/assert_truthy.rb +++ b/lib/rubocop/cop/minitest/assert_truthy.rb @@ -16,6 +16,8 @@ module Minitest # assert(actual, 'the message') # class AssertTruthy < Cop + include ArgumentRangeHelper + MSG = 'Prefer using `assert(%s)` over ' \ '`assert_equal(true, %s)`.' @@ -35,9 +37,12 @@ def on_send(node) def autocorrect(node) lambda do |corrector| - arguments = node.arguments.reject(&:true_type?) - replacement = arguments.map(&:source).join(', ') - corrector.replace(node.loc.expression, "assert(#{replacement})") + assert_equal_with_truthy(node) do |actual| + corrector.replace(node.loc.selector, 'assert') + corrector.replace( + first_and_second_arguments_range(node), actual.source + ) + end end end end diff --git a/lib/rubocop/cop/minitest/refute_empty.rb b/lib/rubocop/cop/minitest/refute_empty.rb index 6ace368c..fa55e357 100644 --- a/lib/rubocop/cop/minitest/refute_empty.rb +++ b/lib/rubocop/cop/minitest/refute_empty.rb @@ -16,6 +16,8 @@ module Minitest # refute_empty(object, 'the message') # class RefuteEmpty < Cop + include ArgumentRangeHelper + MSG = 'Prefer using `refute_empty(%s)` over ' \ '`refute(%s)`.' @@ -37,11 +39,9 @@ def on_send(node) def autocorrect(node) lambda do |corrector| - refute_with_empty(node) do |_first_receiver_arg, object, rest_receiver_arg| - message = rest_receiver_arg.first - - replacement = [object.source, message&.source].compact.join(', ') - corrector.replace(node.loc.expression, "refute_empty(#{replacement})") + refute_with_empty(node) do |_, actual_arg| + corrector.replace(node.loc.selector, 'refute_empty') + corrector.replace(first_argument_range(node), actual_arg.source) end end end diff --git a/lib/rubocop/cop/minitest/refute_equal.rb b/lib/rubocop/cop/minitest/refute_equal.rb index 42f83f7b..c437570e 100644 --- a/lib/rubocop/cop/minitest/refute_equal.rb +++ b/lib/rubocop/cop/minitest/refute_equal.rb @@ -15,6 +15,8 @@ module Minitest # refute_equal("rubocop-minitest", actual) # class RefuteEqual < Cop + include ArgumentRangeHelper + MSG = 'Prefer using `refute_equal(%s)` over ' \ '`assert(%s)`.' @@ -32,20 +34,17 @@ def on_send(node) def autocorrect(node) lambda do |corrector| - assert_not_equal(node) do |_, first_arg, second_arg, rest_args| - autocorrect_node(node, corrector, first_arg, second_arg, rest_args) + assert_not_equal(node) do |_, expected, actual| + corrector.replace(node.loc.selector, 'refute_equal') + + replacement = [expected, actual].map(&:source).join(', ') + corrector.replace(first_argument_range(node), replacement) end end end private - def autocorrect_node(node, corrector, first_arg, second_arg, rest_args) - custom_message = rest_args.first - replacement = preferred_usage(first_arg, second_arg, custom_message) - corrector.replace(node.loc.expression, "refute_equal(#{replacement})") - end - def preferred_usage(first_arg, second_arg, custom_message = nil) [first_arg, second_arg, custom_message] .compact.map(&:source).join(', ') diff --git a/lib/rubocop/cop/minitest/refute_false.rb b/lib/rubocop/cop/minitest/refute_false.rb index 211060d6..e4eb5b23 100644 --- a/lib/rubocop/cop/minitest/refute_false.rb +++ b/lib/rubocop/cop/minitest/refute_false.rb @@ -16,6 +16,8 @@ module Minitest # refute(actual, 'the message') # class RefuteFalse < Cop + include ArgumentRangeHelper + MSG = 'Prefer using `refute(%s)` over ' \ '`assert_equal(false, %s)`.' @@ -35,9 +37,12 @@ def on_send(node) def autocorrect(node) lambda do |corrector| - arguments = node.arguments.reject(&:false_type?) - replacement = arguments.map(&:source).join(', ') - corrector.replace(node.loc.expression, "refute(#{replacement})") + assert_equal_with_false(node) do |actual| + corrector.replace(node.loc.selector, 'refute') + corrector.replace( + first_and_second_arguments_range(node), actual.source + ) + end end end end diff --git a/lib/rubocop/cop/minitest/refute_includes.rb b/lib/rubocop/cop/minitest/refute_includes.rb index 25e91bdb..ae12f251 100644 --- a/lib/rubocop/cop/minitest/refute_includes.rb +++ b/lib/rubocop/cop/minitest/refute_includes.rb @@ -16,6 +16,8 @@ module Minitest # refute_includes(collection, object, 'the message') # class RefuteIncludes < Cop + include ArgumentRangeHelper + MSG = 'Prefer using `refute_includes(%s)` over ' \ '`refute(%s)`.' @@ -39,12 +41,11 @@ def on_send(node) def autocorrect(node) lambda do |corrector| - refute_with_includes(node) do - |_receiver, collection, object, rest_receiver_arg| + refute_with_includes(node) do |_, collection, actual| + corrector.replace(node.loc.selector, 'refute_includes') - message = rest_receiver_arg.first - replacement = node_arguments(collection, object, message) - corrector.replace(node.loc.expression, "refute_includes(#{replacement})") + replacement = [collection, actual].map(&:source).join(', ') + corrector.replace(first_argument_range(node), replacement) end end end diff --git a/lib/rubocop/cop/minitest/refute_instance_of.rb b/lib/rubocop/cop/minitest/refute_instance_of.rb index 6dd8e5a5..8ec0ff1b 100644 --- a/lib/rubocop/cop/minitest/refute_instance_of.rb +++ b/lib/rubocop/cop/minitest/refute_instance_of.rb @@ -16,6 +16,8 @@ module Minitest # refute_instance_of(Class, object, 'the message') # class RefuteInstanceOf < Cop + include ArgumentRangeHelper + MSG = 'Prefer using `refute_instance_of(%s)` over ' \ '`refute(%s)`.' @@ -24,9 +26,7 @@ class RefuteInstanceOf < Cop PATTERN def on_send(node) - refute_with_instance_of(node) do - |first_receiver_arg, object, method, rest_args| - + refute_with_instance_of(node) do |first_receiver_arg, object, method, rest_args| message = rest_args.first arguments = node_arguments(object, method, message) receiver = [first_receiver_arg.source, message&.source].compact.join(', ') @@ -39,12 +39,11 @@ def on_send(node) def autocorrect(node) lambda do |corrector| - refute_with_instance_of(node) do |_, object, method, rest_args| - message = rest_args.first - arguments = node_arguments(object, method, message) + refute_with_instance_of(node) do |_, object, method| + corrector.replace(node.loc.selector, 'refute_instance_of') - replacement = "refute_instance_of(#{arguments})" - corrector.replace(node.loc.expression, replacement) + replacement = [method, object].map(&:source).join(', ') + corrector.replace(first_argument_range(node), replacement) end end end diff --git a/lib/rubocop/cop/minitest/refute_nil.rb b/lib/rubocop/cop/minitest/refute_nil.rb index 72c2a02a..95ba978e 100644 --- a/lib/rubocop/cop/minitest/refute_nil.rb +++ b/lib/rubocop/cop/minitest/refute_nil.rb @@ -16,6 +16,8 @@ module Minitest # refute_nil(actual, 'the message') # class RefuteNil < Cop + include ArgumentRangeHelper + MSG = 'Prefer using `refute_nil(%s)` over ' \ '`refute_equal(nil, %s)`.' @@ -35,9 +37,12 @@ def on_send(node) def autocorrect(node) lambda do |corrector| - arguments = node.arguments.reject(&:nil_type?) - replacement = arguments.map(&:source).join(', ') - corrector.replace(node.loc.expression, "refute_nil(#{replacement})") + refute_equal_with_nil(node) do |actual| + corrector.replace(node.loc.selector, 'refute_nil') + corrector.replace( + first_and_second_arguments_range(node), actual.source + ) + end end end end diff --git a/lib/rubocop/cop/minitest/refute_respond_to.rb b/lib/rubocop/cop/minitest/refute_respond_to.rb index 66cc9bc8..4cd28192 100644 --- a/lib/rubocop/cop/minitest/refute_respond_to.rb +++ b/lib/rubocop/cop/minitest/refute_respond_to.rb @@ -18,6 +18,8 @@ module Minitest # refute_respond_to(self, :some_method) # class RefuteRespondTo < Cop + include ArgumentRangeHelper + MSG = 'Prefer using `refute_respond_to(%s)` over ' \ '`refute(%s)`.' @@ -37,11 +39,12 @@ def on_send(node) def autocorrect(node) lambda do |corrector| - refute_with_respond_to(node) do |_, object, method, rest_args| - custom_message = rest_args.first - preferred = build_preferred_arguments(object, method, custom_message) - replacement = "refute_respond_to(#{preferred})" - corrector.replace(node.loc.expression, replacement) + refute_with_respond_to(node) do |_, object, method| + corrector.replace(node.loc.selector, 'refute_respond_to') + + object = object ? object.source : 'self' + replacement = [object, method.source].join(', ') + corrector.replace(first_argument_range(node), replacement) end end end diff --git a/lib/rubocop/cop/minitest_cops.rb b/lib/rubocop/cop/minitest_cops.rb index 6accad60..8d4106af 100644 --- a/lib/rubocop/cop/minitest_cops.rb +++ b/lib/rubocop/cop/minitest_cops.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true +require_relative 'mixin/argument_range_helper' require_relative 'minitest/assert_empty' require_relative 'minitest/assert_empty_literal' require_relative 'minitest/assert_equal' diff --git a/lib/rubocop/cop/mixin/argument_range_helper.rb b/lib/rubocop/cop/mixin/argument_range_helper.rb new file mode 100644 index 00000000..272b57c0 --- /dev/null +++ b/lib/rubocop/cop/mixin/argument_range_helper.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +module RuboCop + module Cop + # Methods that calculate and return `Parser::Source::Ranges`. + module ArgumentRangeHelper + include RangeHelp + + private + + def first_argument_range(node) + first_argument = node.first_argument + + range_between( + first_argument.source_range.begin_pos, + first_argument.source_range.end_pos + ) + end + + def first_and_second_arguments_range(node) + first_argument = node.first_argument + second_argument = node.arguments[1] + + range_between( + first_argument.source_range.begin_pos, + second_argument.source_range.end_pos + ) + end + end + end +end diff --git a/test/rubocop/cop/minitest/assert_empty_test.rb b/test/rubocop/cop/minitest/assert_empty_test.rb index d231430f..7b3d3bac 100644 --- a/test/rubocop/cop/minitest/assert_empty_test.rb +++ b/test/rubocop/cop/minitest/assert_empty_test.rb @@ -45,6 +45,31 @@ def test_do_something RUBY end + def test_registers_offense_when_using_assert_with_empty_and_heredoc_message + assert_offense(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + assert(somestuff.empty?, <<~MESSAGE + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer using `assert_empty(somestuff, <<~MESSAGE)` over `assert(somestuff.empty?, <<~MESSAGE)`. + the message + MESSAGE + ) + end + end + RUBY + + assert_correction(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + assert_empty(somestuff, <<~MESSAGE + the message + MESSAGE + ) + end + end + RUBY + end + def test_does_not_register_offense_when_using_assert_empty_method assert_no_offenses(<<~RUBY, @cop) class FooTest < Minitest::Test diff --git a/test/rubocop/cop/minitest/assert_equal_test.rb b/test/rubocop/cop/minitest/assert_equal_test.rb index f7dfb5ed..34ef9f17 100644 --- a/test/rubocop/cop/minitest/assert_equal_test.rb +++ b/test/rubocop/cop/minitest/assert_equal_test.rb @@ -83,6 +83,31 @@ def test_do_something RUBY end + def test_registers_offense_when_using_assert_equal_operator_with_heredoc_message + assert_offense(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + assert('rubocop-minitest' == actual, <<~MESSAGE + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer using `assert_equal('rubocop-minitest', actual, <<~MESSAGE)` over `assert('rubocop-minitest' == actual, <<~MESSAGE)`. + the message + MESSAGE + ) + end + end + RUBY + + assert_correction(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + assert_equal('rubocop-minitest', actual, <<~MESSAGE + the message + MESSAGE + ) + end + end + RUBY + end + def test_does_not_register_offense_when_using_assert_equal assert_no_offenses(<<~RUBY, @cop) class FooTest < Minitest::Test diff --git a/test/rubocop/cop/minitest/assert_includes_test.rb b/test/rubocop/cop/minitest/assert_includes_test.rb index 137ba866..f99e53be 100644 --- a/test/rubocop/cop/minitest/assert_includes_test.rb +++ b/test/rubocop/cop/minitest/assert_includes_test.rb @@ -45,6 +45,31 @@ def test_do_something RUBY end + def test_registers_offense_when_using_assert_with_include_and_heredoc_message + assert_offense(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + assert(collection.include?(object), <<~MESSAGE + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer using `assert_includes(collection, object, <<~MESSAGE)` over `assert(collection.include?(object), <<~MESSAGE)`. + the message + MESSAGE + ) + end + end + RUBY + + assert_correction(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + assert_includes(collection, object, <<~MESSAGE + the message + MESSAGE + ) + end + end + RUBY + end + def test_does_not_register_offense_when_using_assert_includes_method assert_no_offenses(<<~RUBY, @cop) class FooTest < Minitest::Test diff --git a/test/rubocop/cop/minitest/assert_instance_of_test.rb b/test/rubocop/cop/minitest/assert_instance_of_test.rb index 6d34a9a9..d98d46c6 100644 --- a/test/rubocop/cop/minitest/assert_instance_of_test.rb +++ b/test/rubocop/cop/minitest/assert_instance_of_test.rb @@ -45,6 +45,31 @@ def test_do_something RUBY end + def test_registers_offense_when_using_assert_instance_of_operator_with_heredoc_message + assert_offense(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + assert(object.instance_of?(SomeClass), <<~MESSAGE + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer using `assert_instance_of(SomeClass, object, <<~MESSAGE)` over `assert(object.instance_of?(SomeClass), <<~MESSAGE)`. + the message + MESSAGE + ) + end + end + RUBY + + assert_correction(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + assert_instance_of(SomeClass, object, <<~MESSAGE + the message + MESSAGE + ) + end + end + RUBY + end + def test_does_not_register_offense_when_using_assert_instance_of_method assert_no_offenses(<<~RUBY, @cop) class FooTest < Minitest::Test diff --git a/test/rubocop/cop/minitest/assert_nil_test.rb b/test/rubocop/cop/minitest/assert_nil_test.rb index 8b411f69..7dcf068e 100644 --- a/test/rubocop/cop/minitest/assert_nil_test.rb +++ b/test/rubocop/cop/minitest/assert_nil_test.rb @@ -64,6 +64,31 @@ def test_do_something RUBY end + def test_registers_offense_when_using_assert_equal_with_nil_and_heredoc_message + assert_offense(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + assert_equal(nil, obj.do_something, <<~MESSAGE + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer using `assert_nil(obj.do_something, <<~MESSAGE)` over `assert_equal(nil, obj.do_something, <<~MESSAGE)`. + the message + MESSAGE + ) + end + end + RUBY + + assert_correction(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + assert_nil(obj.do_something, <<~MESSAGE + the message + MESSAGE + ) + end + end + RUBY + end + def test_does_not_register_offense_when_using_assert_nil_method assert_no_offenses(<<~RUBY, @cop) class FooTest < Minitest::Test diff --git a/test/rubocop/cop/minitest/assert_respond_to_test.rb b/test/rubocop/cop/minitest/assert_respond_to_test.rb index ec501893..2c648db5 100644 --- a/test/rubocop/cop/minitest/assert_respond_to_test.rb +++ b/test/rubocop/cop/minitest/assert_respond_to_test.rb @@ -64,6 +64,31 @@ def test_do_something RUBY end + def test_registers_offense_when_using_assert_calling_respond_to_method_with_heredoc_msg + assert_offense(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + assert(respond_to?(:some_method), <<~MESSAGE + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer using `assert_respond_to(self, :some_method, <<~MESSAGE)` over `assert(respond_to?(:some_method), <<~MESSAGE)`. + the message + MESSAGE + ) + end + end + RUBY + + assert_correction(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + assert_respond_to(self, :some_method, <<~MESSAGE + the message + MESSAGE + ) + end + end + RUBY + end + def test_does_not_register_offense_when_using_assert_respond_to assert_no_offenses(<<~RUBY, @cop) class FooTest < Minitest::Test diff --git a/test/rubocop/cop/minitest/assert_truthy_test.rb b/test/rubocop/cop/minitest/assert_truthy_test.rb index 50f47795..d0fa0995 100644 --- a/test/rubocop/cop/minitest/assert_truthy_test.rb +++ b/test/rubocop/cop/minitest/assert_truthy_test.rb @@ -64,6 +64,31 @@ def test_do_something RUBY end + def test_registers_offense_when_using_assert_equal_with_true_and_heredoc_message + assert_offense(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + assert_equal(true, obj.is_something?, <<~MESSAGE + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer using `assert(obj.is_something?, <<~MESSAGE)` over `assert_equal(true, obj.is_something?, <<~MESSAGE)`. + the message + MESSAGE + ) + end + end + RUBY + + assert_correction(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + assert(obj.is_something?, <<~MESSAGE + the message + MESSAGE + ) + end + end + RUBY + end + def test_does_not_register_offense_when_using_assert_method assert_no_offenses(<<~RUBY, @cop) class FooTest < Minitest::Test diff --git a/test/rubocop/cop/minitest/refute_empty_test.rb b/test/rubocop/cop/minitest/refute_empty_test.rb index c9e601bf..109c291f 100644 --- a/test/rubocop/cop/minitest/refute_empty_test.rb +++ b/test/rubocop/cop/minitest/refute_empty_test.rb @@ -45,6 +45,31 @@ def test_do_something RUBY end + def test_registers_offense_when_using_refute_with_empty_and_heredoc_message + assert_offense(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + refute(somestuff.empty?, <<~MESSAGE + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer using `refute_empty(somestuff, <<~MESSAGE)` over `refute(somestuff.empty?, <<~MESSAGE)`. + the message + MESSAGE + ) + end + end + RUBY + + assert_correction(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + refute_empty(somestuff, <<~MESSAGE + the message + MESSAGE + ) + end + end + RUBY + end + def refute_empty_method assert_no_offenses(<<~RUBY, @cop) class FooTest < Minitest::Test diff --git a/test/rubocop/cop/minitest/refute_equal_test.rb b/test/rubocop/cop/minitest/refute_equal_test.rb index b51bd812..4736884e 100644 --- a/test/rubocop/cop/minitest/refute_equal_test.rb +++ b/test/rubocop/cop/minitest/refute_equal_test.rb @@ -121,6 +121,31 @@ def test_do_something RUBY end + def test_registers_offense_when_using_refute_equal_operator_with_heredoc_message + assert_offense(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + assert(!'rubocop-minitest' == actual, <<~MESSAGE + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer using `refute_equal('rubocop-minitest', actual, <<~MESSAGE)` over `assert(!'rubocop-minitest' == actual, <<~MESSAGE)`. + the message + MESSAGE + ) + end + end + RUBY + + assert_correction(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + refute_equal('rubocop-minitest', actual, <<~MESSAGE + the message + MESSAGE + ) + end + end + RUBY + end + def test_does_not_register_offense_when_using_refute_equal assert_no_offenses(<<~RUBY, @cop) class FooTest < Minitest::Test diff --git a/test/rubocop/cop/minitest/refute_false_test.rb b/test/rubocop/cop/minitest/refute_false_test.rb index d563751b..536a4ee1 100644 --- a/test/rubocop/cop/minitest/refute_false_test.rb +++ b/test/rubocop/cop/minitest/refute_false_test.rb @@ -64,6 +64,31 @@ def test_do_something RUBY end + def test_registers_offense_when_using_assert_equal_with_false_and_heredoc_message + assert_offense(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + assert_equal(false, obj.do_something, <<~MESSAGE + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer using `refute(obj.do_something, <<~MESSAGE)` over `assert_equal(false, obj.do_something, <<~MESSAGE)`. + the message + MESSAGE + ) + end + end + RUBY + + assert_correction(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + refute(obj.do_something, <<~MESSAGE + the message + MESSAGE + ) + end + end + RUBY + end + def test_does_not_register_offense_when_using_refute_method assert_no_offenses(<<~RUBY, @cop) class FooTest < Minitest::Test diff --git a/test/rubocop/cop/minitest/refute_includes_test.rb b/test/rubocop/cop/minitest/refute_includes_test.rb index 0df413bb..87d7879d 100644 --- a/test/rubocop/cop/minitest/refute_includes_test.rb +++ b/test/rubocop/cop/minitest/refute_includes_test.rb @@ -45,6 +45,31 @@ def test_do_something RUBY end + def test_registers_offense_when_using_refute_with_include_and_heredoc_message + assert_offense(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + refute(collection.include?(object), <<~MESSAGE + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer using `refute_includes(collection, object, <<~MESSAGE)` over `refute(collection.include?(object), <<~MESSAGE)`. + the message + MESSAGE + ) + end + end + RUBY + + assert_correction(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + refute_includes(collection, object, <<~MESSAGE + the message + MESSAGE + ) + end + end + RUBY + end + def test_does_not_register_offense_when_using_refute_includes_method assert_no_offenses(<<~RUBY, @cop) class FooTest < Minitest::Test diff --git a/test/rubocop/cop/minitest/refute_instance_of_test.rb b/test/rubocop/cop/minitest/refute_instance_of_test.rb index d2f6a250..ddb57d10 100644 --- a/test/rubocop/cop/minitest/refute_instance_of_test.rb +++ b/test/rubocop/cop/minitest/refute_instance_of_test.rb @@ -45,6 +45,31 @@ def test_do_something RUBY end + def test_registers_offense_when_using_refute_instance_of_operator_with_heredoc_message + assert_offense(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + refute(object.instance_of?(SomeClass), <<~MESSAGE + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer using `refute_instance_of(SomeClass, object, <<~MESSAGE)` over `refute(object.instance_of?(SomeClass), <<~MESSAGE)`. + the message + MESSAGE + ) + end + end + RUBY + + assert_correction(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + refute_instance_of(SomeClass, object, <<~MESSAGE + the message + MESSAGE + ) + end + end + RUBY + end + def refute_instance_of_method assert_no_offenses(<<~RUBY, @cop) class FooTest < Minitest::Test diff --git a/test/rubocop/cop/minitest/refute_nil_test.rb b/test/rubocop/cop/minitest/refute_nil_test.rb index 4cb29cd3..09071752 100644 --- a/test/rubocop/cop/minitest/refute_nil_test.rb +++ b/test/rubocop/cop/minitest/refute_nil_test.rb @@ -64,6 +64,31 @@ def test_do_something RUBY end + def test_registers_offense_when_using_refute_equal_with_nil_and_heredoc_message + assert_offense(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + refute_equal(nil, obj.do_something, <<~MESSAGE + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer using `refute_nil(obj.do_something, <<~MESSAGE)` over `refute_equal(nil, obj.do_something, <<~MESSAGE)`. + the message + MESSAGE + ) + end + end + RUBY + + assert_correction(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + refute_nil(obj.do_something, <<~MESSAGE + the message + MESSAGE + ) + end + end + RUBY + end + def test_does_not_register_offense_when_using_refute_nil_method assert_no_offenses(<<~RUBY, @cop) class FooTest < Minitest::Test diff --git a/test/rubocop/cop/minitest/refute_respond_to_test.rb b/test/rubocop/cop/minitest/refute_respond_to_test.rb index 3d556377..8c28340e 100644 --- a/test/rubocop/cop/minitest/refute_respond_to_test.rb +++ b/test/rubocop/cop/minitest/refute_respond_to_test.rb @@ -64,6 +64,31 @@ def test_do_something RUBY end + def test_registers_offense_when_using_refute_calling_respond_to_method_with_heredoc_msg + assert_offense(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + refute(respond_to?(:some_method), <<~MESSAGE + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer using `refute_respond_to(self, :some_method, <<~MESSAGE)` over `refute(respond_to?(:some_method), <<~MESSAGE)`. + the message + MESSAGE + ) + end + end + RUBY + + assert_correction(<<~RUBY, @cop) + class FooTest < Minitest::Test + def test_do_something + refute_respond_to(self, :some_method, <<~MESSAGE + the message + MESSAGE + ) + end + end + RUBY + end + def test_does_not_register_offense_when_using_assert_respond_to assert_no_offenses(<<~RUBY, @cop) class FooTest < Minitest::Test