summaryrefslogtreecommitdiff
path: root/test/ruby
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2023-09-12 00:35:05 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2023-09-27 21:53:01 +0900
commit5b36c11e21ce3ab227a0a3ec40d9bbb723524c4f (patch)
tree6ae4fe21ed1eb65209be59c4af4afa5bcde37a5f /test/ruby
parent29e5fca7181de5f0db372374d5f39704f81f2731 (diff)
Out of place jumps are valid in `defined?`
Diffstat (limited to 'test/ruby')
-rw-r--r--test/ruby/test_ast.rb25
-rw-r--r--test/ruby/test_rubyoptions.rb4
2 files changed, 29 insertions, 0 deletions
diff --git a/test/ruby/test_ast.rb b/test/ruby/test_ast.rb
index 8515bc0780..694f2ee002 100644
--- a/test/ruby/test_ast.rb
+++ b/test/ruby/test_ast.rb
@@ -244,6 +244,15 @@ class TestAst < Test::Unit::TestCase
assert_invalid_parse(msg, "def m; #{code}; end")
assert_invalid_parse(msg, "begin; #{code}; end")
assert_parse("END {#{code}}")
+
+ assert_parse("defined?(#{code})")
+ assert_parse("def m; defined?(#{code}); end")
+ assert_parse("begin; defined?(#{code}); end")
+
+ next if code.include?(" ")
+ assert_parse("defined? #{code}")
+ assert_parse("def m; defined? #{code}; end")
+ assert_parse("begin; defined? #{code}; end")
end
end
@@ -258,6 +267,22 @@ class TestAst < Test::Unit::TestCase
assert_parse("nil rescue retry")
assert_invalid_parse(msg, "END {retry}")
assert_invalid_parse(msg, "begin rescue; END {retry}; end")
+
+ assert_parse("defined?(retry)")
+ assert_parse("def m; defined?(retry); end")
+ assert_parse("begin defined?(retry); end")
+ assert_parse("begin rescue; else; defined?(retry); end")
+ assert_parse("begin rescue; ensure; defined?(retry); end")
+ assert_parse("END {defined?(retry)}")
+ assert_parse("begin rescue; END {defined?(retry)}; end")
+ assert_parse("defined? retry")
+
+ assert_parse("def m; defined? retry; end")
+ assert_parse("begin defined? retry; end")
+ assert_parse("begin rescue; else; defined? retry; end")
+ assert_parse("begin rescue; ensure; defined? retry; end")
+ assert_parse("END {defined? retry}")
+ assert_parse("begin rescue; END {defined? retry}; end")
end
def test_node_id_for_location
diff --git a/test/ruby/test_rubyoptions.rb b/test/ruby/test_rubyoptions.rb
index 43c8451235..b34ca4d95a 100644
--- a/test/ruby/test_rubyoptions.rb
+++ b/test/ruby/test_rubyoptions.rb
@@ -377,6 +377,10 @@ class TestRubyOptions < Test::Unit::TestCase
assert_in_out_err(%w(-c -e begin -e next -e end), "", [], ["-e:2: Invalid next", :*])
assert_in_out_err(%w(-c -e begin -e redo -e end), "", [], ["-e:2: Invalid redo", :*])
assert_in_out_err(%w(-c -e begin -e retry -e end), "", [], ["-e:2: Invalid retry", :*])
+ assert_in_out_err(%w(-c -e defined?(break)), "", ["Syntax OK"], [])
+ assert_in_out_err(%w(-c -e defined?(next)), "", ["Syntax OK"], [])
+ assert_in_out_err(%w(-c -e defined?(redo)), "", ["Syntax OK"], [])
+ assert_in_out_err(%w(-c -e defined?(retry)), "", ["Syntax OK"], [])
end
def test_invalid_option