diff options
Diffstat (limited to 'test/reline/yamatanooroti/test_rendering.rb')
-rw-r--r-- | test/reline/yamatanooroti/test_rendering.rb | 193 |
1 files changed, 188 insertions, 5 deletions
diff --git a/test/reline/yamatanooroti/test_rendering.rb b/test/reline/yamatanooroti/test_rendering.rb index 4eab6661d6..0ab43fa60c 100644 --- a/test/reline/yamatanooroti/test_rendering.rb +++ b/test/reline/yamatanooroti/test_rendering.rb @@ -5,14 +5,29 @@ begin class Reline::TestRendering < Yamatanooroti::TestCase def setup - inputrc_backup = ENV['INPUTRC'] - ENV['INPUTRC'] = 'nonexistent_file' - start_terminal(5, 30, %w{ruby -Ilib bin/multiline_repl}) - sleep 0.5 - ENV['INPUTRC'] = inputrc_backup + @pwd = Dir.pwd + @tmpdir = File.join(File.expand_path(Dir.tmpdir), "test_reline_config_#{$$}") + begin + Dir.mkdir(@tmpdir) + rescue Errno::EEXIST + FileUtils.rm_rf(@tmpdir) + Dir.mkdir(@tmpdir) + end + Dir.chdir(@tmpdir) + @inputrc_backup = ENV['INPUTRC'] + @inputrc_file = ENV['INPUTRC'] = File.join(@tmpdir, 'temporaty_inputrc') + File.unlink(@inputrc_file) if File.exist?(@inputrc_file) + end + + def teardown + Dir.chdir(@pwd) + FileUtils.rm_rf(@tmpdir) + ENV['INPUTRC'] = @inputrc_backup end def test_history_back + start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl}) + sleep 0.5 write(":a\n") write("\C-p") close @@ -25,6 +40,8 @@ begin end def test_backspace + start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl}) + sleep 0.5 write(":abc\C-h\n") close assert_screen(<<~EOC) @@ -34,6 +51,172 @@ begin prompt> EOC end + + def test_autowrap + start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl}) + sleep 0.5 + write('01234567890123456789012') + close + assert_screen(<<~EOC) + Multiline REPL. + prompt> 0123456789012345678901 + 2 + EOC + end + + def test_finish_autowrapped_line + start_terminal(10, 40, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl}) + sleep 0.5 + write("[{'user'=>{'email'=>'a@a', 'id'=>'ABC'}, 'version'=>4, 'status'=>'succeeded'}]\n") + close + assert_screen(<<~EOC) + Multiline REPL. + prompt> [{'user'=>{'email'=>'a@a', 'id'= + >'ABC'}, 'version'=>4, 'status'=>'succee + ded'}] + => [{"user"=>{"email"=>"a@a", "id"=>"ABC + "}, "version"=>4, "status"=>"succeeded"} + ] + prompt> + EOC + end + + def test_finish_autowrapped_line_in_the_middle_of_lines + start_terminal(20, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl}) + sleep 0.5 + write("[{'user'=>{'email'=>'abcdef@abcdef', 'id'=>'ABC'}, 'version'=>4, 'status'=>'succeeded'}]#{"\C-b"*7}\n") + close + assert_screen(<<~EOC) + Multiline REPL. + prompt> [{'user'=>{'email'=>'a + bcdef@abcdef', 'id'=>'ABC'}, ' + version'=>4, 'status'=>'succee + ded'}] + => [{"user"=>{"email"=>"abcdef + @abcdef", "id"=>"ABC"}, "versi + on"=>4, "status"=>"succeeded"} + ] + prompt> + EOC + end + + def test_finish_autowrapped_line_in_the_middle_of_multilines + start_terminal(30, 16, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl}) + sleep 0.5 + write("<<~EOM\n ABCDEFG\nEOM\n") + close + assert_screen(<<~'EOC') + Multiline REPL. + prompt> <<~EOM + prompt> ABCDEF + G + prompt> EOM + => "ABCDEFG\n" + prompt> + EOC + end + + def test_prompt + File.open(@inputrc_file, 'w') do |f| + f.write <<~'LINES' + "abc": "123" + LINES + end + start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl}) + sleep 0.5 + write("abc\n") + close + assert_screen(<<~EOC) + Multiline REPL. + prompt> 123 + => 123 + prompt> + EOC + end + + def test_mode_icon_emacs + File.open(@inputrc_file, 'w') do |f| + f.write <<~LINES + set show-mode-in-prompt on + LINES + end + start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl}) + sleep 0.5 + close + assert_screen(<<~EOC) + Multiline REPL. + @prompt> + EOC + end + + def test_mode_icon_vi + File.open(@inputrc_file, 'w') do |f| + f.write <<~LINES + set editing-mode vi + set show-mode-in-prompt on + LINES + end + start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl}) + sleep 0.5 + write(":a\n\C-[k") + close + assert_screen(<<~EOC) + Multiline REPL. + (ins)prompt> :a + => :a + (cmd)prompt> :a + EOC + end + + def test_original_mode_icon_emacs + File.open(@inputrc_file, 'w') do |f| + f.write <<~LINES + set show-mode-in-prompt on + set emacs-mode-string [emacs] + LINES + end + start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl}) + close + assert_screen(<<~EOC) + Multiline REPL. + [emacs]prompt> + EOC + end + + def test_original_mode_icon_with_quote + File.open(@inputrc_file, 'w') do |f| + f.write <<~LINES + set show-mode-in-prompt on + set emacs-mode-string "[emacs]" + LINES + end + start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl}) + close + assert_screen(<<~EOC) + Multiline REPL. + [emacs]prompt> + EOC + end + + def test_original_mode_icon_vi + File.open(@inputrc_file, 'w') do |f| + f.write <<~LINES + set editing-mode vi + set show-mode-in-prompt on + set vi-ins-mode-string "{InS}" + set vi-cmd-mode-string "{CmD}" + LINES + end + start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl}) + write(":a\n\C-[k") + close + assert_screen(<<~EOC) + Multiline REPL. + {InS}prompt> :a + => :a + {CmD}prompt> :a + EOC + end end rescue LoadError, NameError # On Ruby repository, this test suit doesn't run because Ruby repo doesn't |