diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/ruby/test_backtrace.rb | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/test/ruby/test_backtrace.rb b/test/ruby/test_backtrace.rb index 0730b5d1c5..1a570c6d6e 100644 --- a/test/ruby/test_backtrace.rb +++ b/test/ruby/test_backtrace.rb @@ -1,6 +1,7 @@ # frozen_string_literal: false require 'test/unit' require 'tempfile' +require 'pty' class TestBacktrace < Test::Unit::TestCase def test_exception @@ -329,4 +330,52 @@ class TestBacktrace < Test::Unit::TestCase bar end; end + + def assert_pty(args, test_stdin = "", dummy, expected) + actual = nil + PTY.spawn(EnvUtil.rubybin, *args) do |r, w, pid| + w.puts test_stdin + w.puts "__END__" + w.close + actual = r.read + end + expected = test_stdin.chomp + "\n__END__\n" + expected.to_s + expected.gsub!(/\n/, "\r\n") + assert_equal expected, actual + end + + def test_tty_backtrace + err = "\e[1mTraceback\e[m (most recent call last):\n" + + "-:1:in `<main>': \e[1m\e[1;4munhandled exception\e[m\n" + assert_pty([], "raise", [], err) + + err = "\e[1mTraceback\e[m (most recent call last):\n" + + "\t1: from -:4:in `<main>'\n" + + "-:2:in `foo': \e[1mfoo! (\e[1;4mRuntimeError\e[m\e[1m)\e[m\n" + assert_pty([], <<-"end;", [], err) + def foo + raise "foo!" + end + foo + end; + + err = "\e[1mTraceback\e[m (most recent call last):\n" + + "\t2: from -:9:in `<main>'\n" + + "\t1: from -:5:in `bar'\n" + + "-:2:in `foo': \e[1mfoo! (\e[1;4mRuntimeError\e[m\e[1m)\e[m\n" + + "\t2: from -:9:in `<main>'\n" + + "\t1: from -:4:in `bar'\n" + + "-:7:in `rescue in bar': \e[1mbar! (\e[1;4mRuntimeError\e[m\e[1m)\e[m\n" + assert_pty([], <<-"end;", [], err) + def foo + raise "foo!" + end + def bar + foo + rescue + raise "bar!" + end + bar + end; + end end |