Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/rubocop/cop/type_toolkit/dont_expect_unexpected_nil.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class DontExpectUnexpectedNil < Base
#: (RuboCop::AST::SendNode) -> void
def on_send(node)
case node.method_name
# when :raise then check_raise(node)
when :raise then check_raise(node)
when :assert_raises then check_assert_raises(node)
end
end
Expand Down
85 changes: 76 additions & 9 deletions spec/rubocop/cop/type_toolkit/dont_expect_unexpected_nil_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ module TypeToolkit
RUBY
end

it "adds offense when assert_raises is used with do...end block" do
it "adds offense when assert_raises is used with UnexpectedNilError with a do ... end block" do
assert_offense(<<~RUBY)
assert_raises(UnexpectedNilError) do
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{assert_raises_message}
Expand All @@ -40,14 +40,38 @@ module TypeToolkit
RUBY
end

it "adds offense when UnexpectedNilError is among other arguments" do
it "adds offense when assert_raises is used with ::UnexpectedNilError with a do ... end block" do
assert_offense(<<~RUBY)
assert_raises(::UnexpectedNilError) do
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{assert_raises_message}
foo
end
RUBY
end

it "adds offense when assert_raises is passed UnexpectedNilError among other arguments" do
assert_offense(<<~RUBY)
assert_raises(ArgumentError, UnexpectedNilError) { foo }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{assert_raises_message}
RUBY

assert_offense(<<~RUBY)
assert_raises(UnexpectedNilError, ArgumentError) { foo }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{assert_raises_message}
RUBY

assert_offense(<<~RUBY)
assert_raises(::UnexpectedNilError, ArgumentError) { foo }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{assert_raises_message}
RUBY

assert_offense(<<~RUBY)
assert_raises(ArgumentError, ::UnexpectedNilError) { foo }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{assert_raises_message}
RUBY
end

it "does not add offense when assert_raises uses a different error" do
it "does not add offense when assert_raises is used with a different error" do
assert_no_offenses(<<~RUBY)
assert_raises(ArgumentError) { foo }
RUBY
Expand Down Expand Up @@ -88,6 +112,17 @@ module TypeToolkit
RUBY
end

it "adds offense when rescuing ::UnexpectedNilError among other exceptions" do
assert_offense(<<~RUBY)
begin
foo
rescue ::UnexpectedNilError, ArgumentError
^^^^^^^^^^^^^^^^^^^^ #{rescue_message}
bar
end
RUBY
end

it "does not add offense when rescuing other exceptions" do
assert_no_offenses(<<~RUBY)
begin
Expand All @@ -103,28 +138,56 @@ module TypeToolkit
it "adds offense when raising UnexpectedNilError" do
assert_offense(<<~RUBY)
raise UnexpectedNilError
^^^^^^^^^^^^^^^^^^ #{general_usage_message}
^^^^^^^^^^^^^^^^^^^^^^^^ #{raise_message}
RUBY
end

it "adds offense when raising UnexpectedNilError with a message" do
assert_offense(<<~RUBY)
raise UnexpectedNilError, "message"
^^^^^^^^^^^^^^^^^^ #{general_usage_message}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{raise_message}
RUBY
end

it "adds offense when raising ::UnexpectedNilError" do
assert_offense(<<~RUBY)
raise ::UnexpectedNilError
^^^^^^^^^^^^^^^^^^^^^^^^^^ #{raise_message}
RUBY
end

it "adds offense when raising ::UnexpectedNilError with a message" do
assert_offense(<<~RUBY)
raise ::UnexpectedNilError, "message"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{raise_message}
RUBY
end

it "adds offense when raising UnexpectedNilError.new" do
assert_offense(<<~RUBY)
raise UnexpectedNilError.new
^^^^^^^^^^^^^^^^^^ #{general_usage_message}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{raise_message}
RUBY
end

it "adds offense when raising ::UnexpectedNilError" do
it "adds offense when raising UnexpectedNilError.new with a message" do
assert_offense(<<~RUBY)
raise ::UnexpectedNilError
^^^^^^^^^^^^^^^^^^^^ #{general_usage_message}
raise UnexpectedNilError.new, "message"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{raise_message}
RUBY
end

it "adds offense when raising ::UnexpectedNilError.new" do
assert_offense(<<~RUBY)
raise ::UnexpectedNilError.new
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{raise_message}
RUBY
end

it "adds offense when raising ::UnexpectedNilError.new with a message" do
assert_offense(<<~RUBY)
raise ::UnexpectedNilError.new, "message"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{raise_message}
RUBY
end

Expand Down Expand Up @@ -172,6 +235,10 @@ def rescue_message
"Change your code to gracefully handle `nil` instead."
end

def raise_message
"TypeToolkit/DontExpectUnexpectedNil: `UnexpectedNilError` should only ever be raised by `NilClass#not_nil!`."
end

def general_usage_message
"TypeToolkit/DontExpectUnexpectedNil: `UnexpectedNilError` should only ever be used by `#not_nil!`."
end
Expand Down
Loading