diff options
Diffstat (limited to 'test/ripper/test_ripper.rb')
-rw-r--r-- | test/ripper/test_ripper.rb | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/test/ripper/test_ripper.rb b/test/ripper/test_ripper.rb index ab841b7616..6061496d9c 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 @@ -75,6 +82,15 @@ class TestRipper::Ripper < Test::Unit::TestCase assert_include out.string[/.*"local variable or method".*/], 'test_xxxx' end + def test_yydebug_string + out = StringIO.new + ripper = Ripper.new '"woot"' + ripper.yydebug = true + ripper.debug_output = out + ripper.parse + assert_include out.string[/.*"literal content".*/], '1.1-1.5' + end + def test_regexp_with_option bug11932 = '[ruby-core:72638] [Bug #11932]' src = '/[\xC0-\xF0]/u'.dup.force_encoding(Encoding::UTF_8) @@ -132,6 +148,28 @@ 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 + class TestInput < self Input = Struct.new(:lines) do def gets |