diff options
author | aycabta <aycabta@gmail.com> | 2020-12-13 11:30:05 +0900 |
---|---|---|
committer | aycabta <aycabta@gmail.com> | 2020-12-17 20:14:59 +0900 |
commit | 2b8fa7817643a9ac7632b66ffed7cb5fd3753966 (patch) | |
tree | d2b2ebb3c75fda15964ce1cd11b0d10f49962c74 /test/reline | |
parent | 9908177857a28633d6279c43a1ad4dfedcb98596 (diff) |
[ruby/reline] Support longer than screen height
https://github.com/ruby/reline/commit/e83a3de9ed
Diffstat (limited to 'test/reline')
-rw-r--r-- | test/reline/yamatanooroti/test_rendering.rb | 144 |
1 files changed, 143 insertions, 1 deletions
diff --git a/test/reline/yamatanooroti/test_rendering.rb b/test/reline/yamatanooroti/test_rendering.rb index 1dc5ac3ea8..83ead69204 100644 --- a/test/reline/yamatanooroti/test_rendering.rb +++ b/test/reline/yamatanooroti/test_rendering.rb @@ -105,7 +105,8 @@ begin def test_finish_autowrapped_line_in_the_middle_of_lines start_terminal(20, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl}, startup_message: 'Multiline REPL.') - write("[{'user'=>{'email'=>'abcdef@abcdef', 'id'=>'ABC'}, 'version'=>4, 'status'=>'succeeded'}]#{"\C-b"*7}\n") + write("[{'user'=>{'email'=>'abcdef@abcdef', 'id'=>'ABC'}, 'version'=>4, 'status'=>'succeeded'}]#{"\C-b"*7}") + write("\n") close assert_screen(<<~EOC) Multiline REPL. @@ -452,6 +453,147 @@ begin EOC end + def test_longer_than_screen_height + start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl}, startup_message: 'Multiline REPL.') + write(<<~EOC.chomp) + def each_top_level_statement + initialize_input + catch(:TERM_INPUT) do + loop do + begin + prompt + unless l = lex + throw :TERM_INPUT if @line == '' + else + @line_no += l.count("\n") + next if l == "\n" + @line.concat l + if @code_block_open or @ltype or @continue or @indent > 0 + next + end + end + if @line != "\n" + @line.force_encoding(@io.encoding) + yield @line, @exp_line_no + end + break if @io.eof? + @line = '' + @exp_line_no = @line_no + # + @indent = 0 + rescue TerminateLineInput + initialize_input + prompt + end + end + end + end + EOC + close + assert_screen(<<~EOC) + prompt> prompt + prompt> end + prompt> end + prompt> end + prompt> end + EOC + end + + def test_longer_than_screen_height_with_scroll_back + start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl}, startup_message: 'Multiline REPL.') + write(<<~EOC.chomp) + def each_top_level_statement + initialize_input + catch(:TERM_INPUT) do + loop do + begin + prompt + unless l = lex + throw :TERM_INPUT if @line == '' + else + @line_no += l.count("\n") + next if l == "\n" + @line.concat l + if @code_block_open or @ltype or @continue or @indent > 0 + next + end + end + if @line != "\n" + @line.force_encoding(@io.encoding) + yield @line, @exp_line_no + end + break if @io.eof? + @line = '' + @exp_line_no = @line_no + # + @indent = 0 + rescue TerminateLineInput + initialize_input + prompt + end + end + end + end + EOC + write("\C-p" * 6) + close + assert_screen(<<~EOC) + prompt> rescue Terminate + LineInput + prompt> initialize_inp + ut + prompt> prompt + EOC + end + + def test_longer_than_screen_height_with_complex_scroll_back + start_terminal(4, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl}, startup_message: 'Multiline REPL.') + write(<<~EOC.chomp) + def each_top_level_statement + initialize_input + catch(:TERM_INPUT) do + loop do + begin + prompt + unless l = lex + throw :TERM_INPUT if @line == '' + else + @line_no += l.count("\n") + next if l == "\n" + @line.concat l + if @code_block_open or @ltype or @continue or @indent > 0 + next + end + end + if @line != "\n" + @line.force_encoding(@io.encoding) + yield @line, @exp_line_no + end + break if @io.eof? + @line = '' + @exp_line_no = @line_no + # + @indent = 0 + rescue TerminateLineInput + initialize_input + prompt + end + end + end + end + EOC + sleep 0.3 + write("\C-p" * 5) + write("\C-n" * 3) + close + assert_screen(<<~EOC) + ut + prompt> prompt + prompt> end + prompt> end + EOC + end + private def write_inputrc(content) File.open(@inputrc_file, 'w') do |f| f.write content |