diff options
| author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-09-12 00:35:05 +0900 |
|---|---|---|
| committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-09-27 21:53:01 +0900 |
| commit | 5b36c11e21ce3ab227a0a3ec40d9bbb723524c4f (patch) | |
| tree | 6ae4fe21ed1eb65209be59c4af4afa5bcde37a5f /test/ruby | |
| parent | 29e5fca7181de5f0db372374d5f39704f81f2731 (diff) | |
Out of place jumps are valid in `defined?`
Diffstat (limited to 'test/ruby')
| -rw-r--r-- | test/ruby/test_ast.rb | 25 | ||||
| -rw-r--r-- | test/ruby/test_rubyoptions.rb | 4 |
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 |
