diff options
Diffstat (limited to 'test/ripper/test_sexp.rb')
-rw-r--r-- | test/ripper/test_sexp.rb | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/test/ripper/test_sexp.rb b/test/ripper/test_sexp.rb index 9faeaba782..3ebcf3062e 100644 --- a/test/ripper/test_sexp.rb +++ b/test/ripper/test_sexp.rb @@ -18,6 +18,11 @@ class TestRipper::Sexp < Test::Unit::TestCase assert_nil Ripper.sexp("/*") assert_nil Ripper.sexp("/*/") assert_nil Ripper.sexp("/+/") + assert_nil Ripper.sexp("m(&nil) {}"), '[Bug #10436]' + assert_nil Ripper.sexp("/(?<a>)/ =~ ''; x = a **a, **a if false"), '[Bug #18988]' + assert_nil Ripper.sexp("return + return"), '[Bug #20055]' + assert_nil Ripper.sexp("1 in [a, a]"), '[Bug #20055]' + assert_nil Ripper.sexp("1 + (1 => [a, a])"), '[Bug #20055]' end def test_regexp_content @@ -34,6 +39,14 @@ class TestRipper::Sexp < Test::Unit::TestCase assert_equal '(?<n>a(b|\g<n>))', search_sexp(:@tstring_content, search_sexp(:regexp_literal, sexp))[1] end + def test_regexp_named_capture + sexp = Ripper.sexp("/(?<a>)/ =~ ''; x = a **a, a if false") + assert_not_nil sexp, '[Bug #18988]' + + sexp = Ripper.sexp("/(?<a>)/ =~ ''; a %(exit)") + assert_equal 'exit', search_sexp(:@ident, search_sexp(:paren, sexp))[1], '[Bug #18988]' + end + def test_heredoc_content sexp = Ripper.sexp("<<E\nfoo\nE") assert_equal "foo\n", search_sexp(:@tstring_content, sexp)[1] @@ -110,6 +123,21 @@ eot assert_equal(exp, named) end + def test_command + sexp = Ripper.sexp("a::C {}") + assert_equal( + [:program, + [ + [:method_add_block, + [:command_call, + [:vcall, [:@ident, "a", [1, 0]]], + [:@op, "::", [1, 1]], + [:@const, "C", [1, 3]], + nil], + [:brace_block, nil, [[:void_stmt]]]]]], + sexp) + end + def search_sexp(sym, sexp) return sexp if !sexp or sexp[0] == sym sexp.find do |e| @@ -175,7 +203,7 @@ eot [:aryptn, nil, [[:var_field, [:@ident, "a", [1, 11]]]], - [:var_field, nil], + nil, nil], [[:void_stmt]], nil]], @@ -407,6 +435,14 @@ eot [[:void_stmt]], nil]], + [__LINE__, %q{ case 0; in [a,]; end }] => + [:case, + [:@int, "0", [1, 5]], + [:in, + [:aryptn, nil, [[:var_field, [:@ident, "a", [1, 12]]]], nil, nil], + [[:void_stmt]], + nil]], + [__LINE__, %q{ case 0; in []; end }] => [:case, [:@int, "0", [1, 5]], @@ -486,6 +522,22 @@ eot [:begin, [:binary, [:@int, "0", [1, 13]], :+, [:@int, "0", [1, 15]]]], [[:void_stmt]], nil]], + + [__LINE__, %q{ case 0; in [*a]; a; end } ] => + [:case, + [:@int, "0", [1, 5]], + [:in, + [:aryptn, nil, nil, [:var_field, [:@ident, "a", [1, 13]]], nil], + [[:var_ref, [:@ident, "a", [1, 17]]]], + nil]], + + [__LINE__, %q{ case 0; in {a:}; a; end } ] => + [:case, + [:@int, "0", [1, 5]], + [:in, + [:hshptn, nil, [[[:@label, "a:", [1, 12]], nil]], nil], + [[:var_ref, [:@ident, "a", [1, 17]]]], + nil]], } pattern_matching_data.each do |(i, src), expected| define_method(:"test_pattern_matching_#{i}") do |