summaryrefslogtreecommitdiff
path: root/test/ripper/test_sexp.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/ripper/test_sexp.rb')
-rw-r--r--test/ripper/test_sexp.rb35
1 files changed, 35 insertions, 0 deletions
diff --git a/test/ripper/test_sexp.rb b/test/ripper/test_sexp.rb
index 8fc17fdd4a..557ae9b423 100644
--- a/test/ripper/test_sexp.rb
+++ b/test/ripper/test_sexp.rb
@@ -38,6 +38,27 @@ class TestRipper::Sexp < Test::Unit::TestCase
assert_equal "foo\n", search_sexp(:@tstring_content, sexp)[1]
end
+ def test_squiggly_heredoc
+ sexp = Ripper.sexp("<<~eot\n asdf\neot")
+ assert_equal "asdf\n", search_sexp(:@tstring_content, sexp)[1]
+ end
+
+ def test_squiggly_heredoc_with_interpolated_expression
+ sexp1 = Ripper.sexp(<<-eos)
+<<-eot
+a\#{1}z
+eot
+ eos
+
+ sexp2 = Ripper.sexp(<<-eos)
+<<~eot
+ a\#{1}z
+eot
+ eos
+
+ assert_equal clear_pos(sexp1), clear_pos(sexp2)
+ end
+
def search_sexp(sym, sexp)
return sexp if !sexp or sexp[0] == sym
sexp.find do |e|
@@ -46,4 +67,18 @@ class TestRipper::Sexp < Test::Unit::TestCase
end
end
end
+
+ def clear_pos(sexp)
+ return sexp if !sexp
+ sexp.each do |e|
+ if Array === e
+ if e.size == 3 and Array === (last = e.last) and
+ last.size == 2 and Integer === last[0] and Integer === last[1]
+ last.clear
+ else
+ clear_pos(e)
+ end
+ end
+ end
+ end
end if ripper_test