summaryrefslogtreecommitdiff
path: root/test/prism/redundant_return_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/prism/redundant_return_test.rb')
-rw-r--r--test/prism/redundant_return_test.rb73
1 files changed, 73 insertions, 0 deletions
diff --git a/test/prism/redundant_return_test.rb b/test/prism/redundant_return_test.rb
new file mode 100644
index 0000000000..c668169245
--- /dev/null
+++ b/test/prism/redundant_return_test.rb
@@ -0,0 +1,73 @@
+# frozen_string_literal: true
+
+require_relative "test_helper"
+
+module Prism
+ class RedundantReturnTest < TestCase
+ def test_statements
+ assert_redundant_return("def foo; return; end")
+ refute_redundant_return("def foo; return; 1; end")
+ end
+
+ def test_begin_implicit
+ assert_redundant_return("def foo; return; rescue; end")
+ refute_redundant_return("def foo; return; 1; rescue; end")
+ refute_redundant_return("def foo; return; rescue; else; end")
+ end
+
+ def test_begin_explicit
+ assert_redundant_return("def foo; begin; return; rescue; end; end")
+ refute_redundant_return("def foo; begin; return; 1; rescue; end; end")
+ refute_redundant_return("def foo; begin; return; rescue; else; end; end")
+ end
+
+ def test_if
+ assert_redundant_return("def foo; return if bar; end")
+ end
+
+ def test_unless
+ assert_redundant_return("def foo; return unless bar; end")
+ end
+
+ def test_else
+ assert_redundant_return("def foo; if bar; baz; else; return; end; end")
+ end
+
+ def test_case_when
+ assert_redundant_return("def foo; case bar; when baz; return; end; end")
+ end
+
+ def test_case_else
+ assert_redundant_return("def foo; case bar; when baz; else; return; end; end")
+ end
+
+ def test_case_match_in
+ assert_redundant_return("def foo; case bar; in baz; return; end; end")
+ end
+
+ def test_case_match_else
+ assert_redundant_return("def foo; case bar; in baz; else; return; end; end")
+ end
+
+ private
+
+ def assert_redundant_return(source)
+ assert find_return(source).redundant?
+ end
+
+ def refute_redundant_return(source)
+ refute find_return(source).redundant?
+ end
+
+ def find_return(source)
+ queue = [Prism.parse(source).value]
+
+ while (current = queue.shift)
+ return current if current.is_a?(ReturnNode)
+ queue.concat(current.compact_child_nodes)
+ end
+
+ flunk "Could not find return node in #{node.inspect}"
+ end
+ end
+end