diff options
Diffstat (limited to 'test/ripper/test_ripper.rb')
-rw-r--r-- | test/ripper/test_ripper.rb | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/test/ripper/test_ripper.rb b/test/ripper/test_ripper.rb index 76276c54ef..f129a41be9 100644 --- a/test/ripper/test_ripper.rb +++ b/test/ripper/test_ripper.rb @@ -14,6 +14,13 @@ class TestRipper::Ripper < Test::Unit::TestCase @ripper = Ripper.new '1 + 1' end + def test_new + assert_separately(%w[-rripper], "#{<<~"begin;"}\n#{<<~'end;'}") + begin; + assert_nil EnvUtil.under_gc_stress {Ripper.new("")}.state + end; + end + def test_column assert_nil @ripper.column end @@ -81,7 +88,7 @@ class TestRipper::Ripper < Test::Unit::TestCase ripper.yydebug = true ripper.debug_output = out ripper.parse - assert_include out.string[/.*"literal content".*/], 'woot' + assert_include out.string[/.*"literal content".*/], '1.1-1.5' end def test_regexp_with_option @@ -141,6 +148,36 @@ end assert_nothing_raised { Ripper.lex src } end + def test_no_memory_leak + assert_no_memory_leak(%w(-rripper), "", "#{<<~'end;'}", rss: true) + 2_000_000.times do + Ripper.parse("") + end + end; + + # [Bug #19835] + assert_no_memory_leak(%w(-rripper), "", "#{<<~'end;'}", rss: true) + 1_000_000.times do + Ripper.parse("class Foo") + end + end; + + # [Bug #19836] + assert_no_memory_leak(%w(-rripper), "", "#{<<~'end;'}", rss: true) + 1_000_000.times do + Ripper.parse("-> {") + end + end; + end + + def test_sexp_no_memory_leak + assert_no_memory_leak(%w(-rripper), "", "#{<<~'end;'}", rss: true) + 1_000_000.times do + Ripper.sexp("") + end + end; + end + class TestInput < self Input = Struct.new(:lines) do def gets |