diff options
author | aycabta <aycabta@gmail.com> | 2020-09-16 11:19:06 +0900 |
---|---|---|
committer | nagachika <nagachika@ruby-lang.org> | 2020-09-16 21:07:25 +0900 |
commit | 3bb503e0e8f92c039ce50f430b14649a36c03feb (patch) | |
tree | cf88e25a2d373ed72fa46c4998de5fa12abd1f97 /test | |
parent | ed39078d37e16b541d717cd87cacb21aa33e6ef1 (diff) | |
download | ruby-3bb503e0e8f92c039ce50f430b14649a36c03feb.tar.gz |
Merge Reline 0.1.5
Diffstat (limited to 'test')
-rw-r--r-- | test/reline/test_config.rb | 107 | ||||
-rw-r--r-- | test/reline/test_history.rb | 20 | ||||
-rw-r--r-- | test/reline/test_key_actor_emacs.rb | 154 | ||||
-rw-r--r-- | test/reline/test_key_stroke.rb | 19 | ||||
-rw-r--r-- | test/reline/test_reline.rb | 38 | ||||
-rw-r--r-- | test/reline/test_within_pipe.rb | 13 | ||||
-rw-r--r-- | test/reline/yamatanooroti/test_rendering.rb | 193 |
7 files changed, 528 insertions, 16 deletions
diff --git a/test/reline/test_config.rb b/test/reline/test_config.rb index cecb364f89..c1455cd136 100644 --- a/test/reline/test_config.rb +++ b/test/reline/test_config.rb @@ -36,6 +36,51 @@ class Reline::Config::Test < Reline::TestCase assert_equal true, @config.instance_variable_get(:@disable_completion) end + def test_string_value + @config.read_lines(<<~LINES.lines) + set show-mode-in-prompt on + set emacs-mode-string Emacs + LINES + + assert_equal 'Emacs', @config.instance_variable_get(:@emacs_mode_string) + end + + def test_string_value_with_brackets + @config.read_lines(<<~LINES.lines) + set show-mode-in-prompt on + set emacs-mode-string [Emacs] + LINES + + assert_equal '[Emacs]', @config.instance_variable_get(:@emacs_mode_string) + end + + def test_string_value_with_brackets_and_quotes + @config.read_lines(<<~LINES.lines) + set show-mode-in-prompt on + set emacs-mode-string "[Emacs]" + LINES + + assert_equal '[Emacs]', @config.instance_variable_get(:@emacs_mode_string) + end + + def test_string_value_with_parens + @config.read_lines(<<~LINES.lines) + set show-mode-in-prompt on + set emacs-mode-string (Emacs) + LINES + + assert_equal '(Emacs)', @config.instance_variable_get(:@emacs_mode_string) + end + + def test_string_value_with_parens_and_quotes + @config.read_lines(<<~LINES.lines) + set show-mode-in-prompt on + set emacs-mode-string "(Emacs)" + LINES + + assert_equal '(Emacs)', @config.instance_variable_get(:@emacs_mode_string) + end + def test_comment_line @config.read_lines([" #a: error\n"]) assert_not_include @config.key_bindings, nil @@ -213,6 +258,68 @@ class Reline::Config::Test < Reline::TestCase assert_nothing_raised do @config.read end + ensure + ENV['INPUTRC'] = inputrc_backup + end + + def test_inputrc + inputrc_backup = ENV['INPUTRC'] + expected = "#{@tmpdir}/abcde" + ENV['INPUTRC'] = expected + assert_equal expected, @config.inputrc_path + ensure ENV['INPUTRC'] = inputrc_backup end + + def test_xdg_config_home + home_backup = ENV['HOME'] + xdg_config_home_backup = ENV['XDG_CONFIG_HOME'] + xdg_config_home = File.expand_path("#{@tmpdir}/.config/example_dir") + expected = File.expand_path("#{xdg_config_home}/readline/inputrc") + FileUtils.mkdir_p(File.dirname(expected)) + FileUtils.touch(expected) + ENV['HOME'] = @tmpdir + ENV['XDG_CONFIG_HOME'] = xdg_config_home + assert_equal expected, @config.inputrc_path + ensure + FileUtils.rm(expected) + ENV['XDG_CONFIG_HOME'] = xdg_config_home_backup + ENV['HOME'] = home_backup + end + + def test_empty_xdg_config_home + home_backup = ENV['HOME'] + xdg_config_home_backup = ENV['XDG_CONFIG_HOME'] + ENV['HOME'] = @tmpdir + ENV['XDG_CONFIG_HOME'] = '' + expected = File.expand_path('~/.config/readline/inputrc') + FileUtils.mkdir_p(File.dirname(expected)) + FileUtils.touch(expected) + assert_equal expected, @config.inputrc_path + ensure + FileUtils.rm(expected) + ENV['XDG_CONFIG_HOME'] = xdg_config_home_backup + ENV['HOME'] = home_backup + end + + def test_relative_xdg_config_home + home_backup = ENV['HOME'] + xdg_config_home_backup = ENV['XDG_CONFIG_HOME'] + ENV['HOME'] = @tmpdir + expected = File.expand_path('~/.config/readline/inputrc') + FileUtils.mkdir_p(File.dirname(expected)) + FileUtils.touch(expected) + result = Dir.chdir(@tmpdir) do + xdg_config_home = ".config/example_dir" + ENV['XDG_CONFIG_HOME'] = xdg_config_home + inputrc = "#{xdg_config_home}/readline/inputrc" + FileUtils.mkdir_p(File.dirname(inputrc)) + FileUtils.touch(inputrc) + @config.inputrc_path + end + assert_equal expected, result + FileUtils.rm(expected) + ENV['XDG_CONFIG_HOME'] = xdg_config_home_backup + ENV['HOME'] = home_backup + end end diff --git a/test/reline/test_history.rb b/test/reline/test_history.rb index 189f2db86d..58c240fc96 100644 --- a/test/reline/test_history.rb +++ b/test/reline/test_history.rb @@ -242,6 +242,26 @@ class Reline::History::Test < Reline::TestCase end end + def test_history_size_zero + history = history_new(history_size: 0) + assert_equal 0, history.size + history << 'aa' + history << 'bb' + assert_equal 0, history.size + history.push(*%w{aa bb cc}) + assert_equal 0, history.size + end + + def test_history_size_negative_unlimited + history = history_new(history_size: -1) + assert_equal 0, history.size + history << 'aa' + history << 'bb' + assert_equal 2, history.size + history.push(*%w{aa bb cc}) + assert_equal 5, history.size + end + private def history_new(history_size: 10) diff --git a/test/reline/test_key_actor_emacs.rb b/test/reline/test_key_actor_emacs.rb index c16212c626..a1e4015999 100644 --- a/test/reline/test_key_actor_emacs.rb +++ b/test/reline/test_key_actor_emacs.rb @@ -1625,7 +1625,7 @@ class Reline::KeyActor::Emacs::Test < Reline::TestCase assert_line('') end - def test_ed_search_prev_history + def test_vi_search_prev Reline::HISTORY.concat(%w{abc 123 AAA}) assert_line('') assert_byte_pointer_size('') @@ -1897,12 +1897,162 @@ class Reline::KeyActor::Emacs::Test < Reline::TestCase end def test_modify_lines_with_wrong_rs + verbose, $VERBOSE = $VERBOSE, nil original_global_slash = $/ $/ = 'b' + $VERBOSE = verbose @line_editor.output_modifier_proc = proc { |output| Reline::Unicode.escape_for_print(output) } input_keys("abcdef\n") - assert_equal(['abcdef'], @line_editor.__send__(:modify_lines, @line_editor.whole_lines)) + result = @line_editor.__send__(:modify_lines, @line_editor.whole_lines) + $/ = nil + assert_equal(['abcdef'], result) + ensure + $VERBOSE = nil $/ = original_global_slash + $VERBOSE = verbose + end + + def test_ed_search_prev_history + Reline::HISTORY.concat([ + '12356', # old + '12aaa', + '12345' # new + ]) + input_keys('123') + # The ed_search_prev_history doesn't have default binding + @line_editor.__send__(:ed_search_prev_history, "\C-p".ord) + assert_byte_pointer_size('123') + assert_cursor(3) + assert_cursor_max(5) + assert_line('12345') + @line_editor.__send__(:ed_search_prev_history, "\C-p".ord) + assert_byte_pointer_size('123') + assert_cursor(3) + assert_cursor_max(5) + assert_line('12356') + @line_editor.__send__(:ed_search_prev_history, "\C-p".ord) + assert_byte_pointer_size('123') + assert_cursor(3) + assert_cursor_max(5) + assert_line('12356') + end + + def test_ed_search_prev_history_with_empty + Reline::HISTORY.concat([ + '12356', # old + '12aaa', + '12345' # new + ]) + # The ed_search_prev_history doesn't have default binding + @line_editor.__send__(:ed_search_prev_history, "\C-p".ord) + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(5) + assert_line('12345') + @line_editor.__send__(:ed_search_prev_history, "\C-p".ord) + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(5) + assert_line('12aaa') + @line_editor.__send__(:ed_search_prev_history, "\C-p".ord) + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(5) + assert_line('12356') + @line_editor.__send__(:ed_search_prev_history, "\C-p".ord) + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(5) + assert_line('12356') + end + + def test_ed_search_prev_history_without_match + Reline::HISTORY.concat([ + '12356', # old + '12aaa', + '12345' # new + ]) + input_keys('ABC') + # The ed_search_prev_history doesn't have default binding + @line_editor.__send__(:ed_search_prev_history, "\C-p".ord) + assert_byte_pointer_size('ABC') + assert_cursor(3) + assert_cursor_max(3) + assert_line('ABC') + end + + def test_ed_search_next_history + Reline::HISTORY.concat([ + '12356', # old + '12aaa', + '12345' # new + ]) + input_keys('123') + # The ed_search_prev_history and ed_search_next_history doesn't have default binding + @line_editor.__send__(:ed_search_prev_history, "\C-p".ord) + assert_byte_pointer_size('123') + assert_cursor(3) + assert_cursor_max(5) + assert_line('12345') + @line_editor.__send__(:ed_search_prev_history, "\C-p".ord) + assert_byte_pointer_size('123') + assert_cursor(3) + assert_cursor_max(5) + assert_line('12356') + @line_editor.__send__(:ed_search_prev_history, "\C-p".ord) + assert_byte_pointer_size('123') + assert_cursor(3) + assert_cursor_max(5) + assert_line('12356') + @line_editor.__send__(:ed_search_next_history, "\C-n".ord) + assert_byte_pointer_size('123') + assert_cursor(3) + assert_cursor_max(5) + assert_line('12345') + @line_editor.__send__(:ed_search_next_history, "\C-n".ord) + assert_byte_pointer_size('123') + assert_cursor(3) + assert_cursor_max(5) + assert_line('12345') + end + + def test_ed_search_next_history_with_empty + Reline::HISTORY.concat([ + '12356', # old + '12aaa', + '12345' # new + ]) + # The ed_search_prev_history and ed_search_next_history doesn't have default binding + @line_editor.__send__(:ed_search_prev_history, "\C-p".ord) + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(5) + assert_line('12345') + @line_editor.__send__(:ed_search_prev_history, "\C-p".ord) + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(5) + assert_line('12aaa') + @line_editor.__send__(:ed_search_prev_history, "\C-p".ord) + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(5) + assert_line('12356') + @line_editor.__send__(:ed_search_next_history, "\C-n".ord) + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(5) + assert_line('12aaa') + @line_editor.__send__(:ed_search_next_history, "\C-n".ord) + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(5) + assert_line('12345') + @line_editor.__send__(:ed_search_next_history, "\C-n".ord) + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(0) + assert_line('') end =begin # TODO: move KeyStroke instance from Reline to LineEditor diff --git a/test/reline/test_key_stroke.rb b/test/reline/test_key_stroke.rb index 224e93d9a0..15675a9b5a 100644 --- a/test/reline/test_key_stroke.rb +++ b/test/reline/test_key_stroke.rb @@ -16,10 +16,10 @@ class Reline::KeyStroke::Test < Reline::TestCase def test_match_status config = Reline::Config.new { - "a" => "xx", - "ab" => "y", - "abc" => "z", - "x" => "rr" + 'a' => 'xx', + 'ab' => 'y', + 'abc' => 'z', + 'x' => 'rr' }.each_pair do |key, func| config.add_default_key_binding(key.bytes, func.bytes) end @@ -35,4 +35,15 @@ class Reline::KeyStroke::Test < Reline::TestCase assert_equal(:unmatched, stroke.match_status("m".bytes)) assert_equal(:matched, stroke.match_status("abzwabk".bytes)) end + + def test_aaa + config = Reline::Config.new + { + 'abc' => '123', + }.each_pair do |key, func| + config.add_default_key_binding(key.bytes, func.bytes) + end + stroke = Reline::KeyStroke.new(config) + assert_equal('123'.bytes, stroke.expand('abc'.bytes)) + end end diff --git a/test/reline/test_reline.rb b/test/reline/test_reline.rb index 0de2462a08..d2de4690d5 100644 --- a/test/reline/test_reline.rb +++ b/test/reline/test_reline.rb @@ -7,6 +7,12 @@ class Reline::Test < Reline::TestCase end def setup + Reline.output_modifier_proc = nil + Reline.completion_proc = nil + Reline.prompt_proc = nil + Reline.auto_indent_proc = nil + Reline.pre_input_hook = nil + Reline.dig_perfect_match_proc = nil end def teardown @@ -14,6 +20,8 @@ class Reline::Test < Reline::TestCase end def test_completion_append_character + completion_append_character = Reline.completion_append_character + assert_equal(nil, Reline.completion_append_character) Reline.completion_append_character = "" @@ -33,57 +41,85 @@ class Reline::Test < Reline::TestCase Reline.completion_append_character = nil assert_equal(nil, Reline.completion_append_character) + ensure + Reline.completion_append_character = completion_append_character end def test_basic_word_break_characters + basic_word_break_characters = Reline.basic_word_break_characters + assert_equal(" \t\n`><=;|&{(", Reline.basic_word_break_characters) Reline.basic_word_break_characters = "[".encode(Encoding::ASCII) assert_equal("[", Reline.basic_word_break_characters) assert_equal(get_reline_encoding, Reline.basic_word_break_characters.encoding) + ensure + Reline.basic_word_break_characters = basic_word_break_characters end def test_completer_word_break_characters + completer_word_break_characters = Reline.completer_word_break_characters + assert_equal(" \t\n`><=;|&{(", Reline.completer_word_break_characters) Reline.completer_word_break_characters = "[".encode(Encoding::ASCII) assert_equal("[", Reline.completer_word_break_characters) assert_equal(get_reline_encoding, Reline.completer_word_break_characters.encoding) + ensure + Reline.completer_word_break_characters = completer_word_break_characters end def test_basic_quote_characters + basic_quote_characters = Reline.basic_quote_characters + assert_equal('"\'', Reline.basic_quote_characters) Reline.basic_quote_characters = "`".encode(Encoding::ASCII) assert_equal("`", Reline.basic_quote_characters) assert_equal(get_reline_encoding, Reline.basic_quote_characters.encoding) + ensure + Reline.basic_quote_characters = basic_quote_characters end def test_completer_quote_characters + completer_quote_characters = Reline.completer_quote_characters + assert_equal('"\'', Reline.completer_quote_characters) Reline.completer_quote_characters = "`".encode(Encoding::ASCII) assert_equal("`", Reline.completer_quote_characters) assert_equal(get_reline_encoding, Reline.completer_quote_characters.encoding) + ensure + Reline.completer_quote_characters = completer_quote_characters end def test_filename_quote_characters + filename_quote_characters = Reline.filename_quote_characters + assert_equal('', Reline.filename_quote_characters) Reline.filename_quote_characters = "\'".encode(Encoding::ASCII) assert_equal("\'", Reline.filename_quote_characters) assert_equal(get_reline_encoding, Reline.filename_quote_characters.encoding) + ensure + Reline.filename_quote_characters = filename_quote_characters end def test_special_prefixes + special_prefixes = Reline.special_prefixes + assert_equal('', Reline.special_prefixes) Reline.special_prefixes = "\'".encode(Encoding::ASCII) assert_equal("\'", Reline.special_prefixes) assert_equal(get_reline_encoding, Reline.special_prefixes.encoding) + ensure + Reline.special_prefixes = special_prefixes end def test_completion_case_fold + completion_case_fold = Reline.completion_case_fold + assert_equal(nil, Reline.completion_case_fold) Reline.completion_case_fold = true @@ -91,6 +127,8 @@ class Reline::Test < Reline::TestCase Reline.completion_case_fold = "hoge".encode(Encoding::ASCII) assert_equal("hoge", Reline.completion_case_fold) + ensure + Reline.completion_case_fold = completion_case_fold end def test_completion_proc diff --git a/test/reline/test_within_pipe.rb b/test/reline/test_within_pipe.rb index 46b4465f32..53989a794f 100644 --- a/test/reline/test_within_pipe.rb +++ b/test/reline/test_within_pipe.rb @@ -3,9 +3,10 @@ require_relative 'helper' class Reline::WithinPipeTest < Reline::TestCase def setup Reline.send(:test_mode) - @reader, @writer = IO.pipe((RELINE_TEST_ENCODING rescue Encoding.default_external)) - Reline.input = @reader - @output = Reline.output = File.open(IO::NULL, 'w') + @input_reader, @writer = IO.pipe((RELINE_TEST_ENCODING rescue Encoding.default_external)) + Reline.input = @input_reader + @reader, @output_writer = IO.pipe((RELINE_TEST_ENCODING rescue Encoding.default_external)) + @output = Reline.output = @output_writer @config = Reline.send(:core).config @line_editor = Reline.send(:core).line_editor end @@ -14,9 +15,11 @@ class Reline::WithinPipeTest < Reline::TestCase Reline.input = STDIN Reline.output = STDOUT Reline.point = 0 - @reader.close + Reline.delete_text + @input_reader.close @writer.close - @output.close + @reader.close + @output_writer.close @config.reset end 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 |