diff options
Diffstat (limited to 'test/reline')
-rw-r--r-- | test/reline/test_config.rb | 20 | ||||
-rw-r--r-- | test/reline/test_history.rb | 10 | ||||
-rw-r--r-- | test/reline/test_key_actor_emacs.rb | 75 | ||||
-rw-r--r-- | test/reline/test_key_actor_vi.rb | 149 | ||||
-rw-r--r-- | test/reline/test_macro.rb | 3 | ||||
-rw-r--r-- | test/reline/test_reline.rb | 27 | ||||
-rw-r--r-- | test/reline/test_string_processing.rb | 4 | ||||
-rw-r--r-- | test/reline/test_within_pipe.rb | 1 | ||||
-rw-r--r-- | test/reline/yamatanooroti/test_rendering.rb | 41 |
9 files changed, 312 insertions, 18 deletions
diff --git a/test/reline/test_config.rb b/test/reline/test_config.rb index dd5142d587..cecb364f89 100644 --- a/test/reline/test_config.rb +++ b/test/reline/test_config.rb @@ -195,4 +195,24 @@ class Reline::Config::Test < Reline::TestCase expected = { 'ef'.bytes => 'EF'.bytes, 'gh'.bytes => 'GH'.bytes } assert_equal expected, @config.key_bindings end + + def test_history_size + @config.read_lines(<<~LINES.lines) + set history-size 5000 + LINES + + assert_equal 5000, @config.instance_variable_get(:@history_size) + history = Reline::History.new(@config) + history << "a\n" + assert_equal 1, history.size + end + + def test_empty_inputrc_env + inputrc_backup = ENV['INPUTRC'] + ENV['INPUTRC'] = '' + assert_nothing_raised do + @config.read + end + ENV['INPUTRC'] = inputrc_backup + end end diff --git a/test/reline/test_history.rb b/test/reline/test_history.rb index 260b6e8528..189f2db86d 100644 --- a/test/reline/test_history.rb +++ b/test/reline/test_history.rb @@ -2,6 +2,10 @@ require_relative 'helper' require "reline/history" class Reline::History::Test < Reline::TestCase + def setup + Reline.send(:test_mode) + end + def test_ancestors assert_equal(Reline::History.ancestors.include?(Array), true) end @@ -268,6 +272,10 @@ class Reline::History::Test < Reline::TestCase end def get_default_internal_encoding - return Encoding.default_internal || Encoding.find("locale") + if RUBY_PLATFORM =~ /mswin|mingw/ + Encoding.default_internal || Encoding::UTF_8 + else + Encoding.default_internal || Encoding.find("locale") + end end end diff --git a/test/reline/test_key_actor_emacs.rb b/test/reline/test_key_actor_emacs.rb index 97ff654506..c16212c626 100644 --- a/test/reline/test_key_actor_emacs.rb +++ b/test/reline/test_key_actor_emacs.rb @@ -8,8 +8,8 @@ class Reline::KeyActor::Emacs::Test < Reline::TestCase Reline::HISTORY.instance_variable_set(:@config, @config) Reline::HISTORY.clear @encoding = (RELINE_TEST_ENCODING rescue Encoding.default_external) - @line_editor = Reline::LineEditor.new(@config) - @line_editor.reset(@prompt, @encoding) + @line_editor = Reline::LineEditor.new(@config, @encoding) + @line_editor.reset(@prompt, encoding: @encoding) end def test_ed_insert_one @@ -1325,6 +1325,68 @@ class Reline::KeyActor::Emacs::Test < Reline::TestCase assert_line('foo_ba') end + def test_completion_with_indent + @line_editor.completion_proc = proc { |word| + %w{ + foo_foo + foo_bar + foo_baz + qux + }.map { |i| + i.encode(@encoding) + } + } + input_keys(' fo') + assert_byte_pointer_size(' fo') + assert_cursor(4) + assert_cursor_max(4) + assert_line(' fo') + assert_equal(nil, @line_editor.instance_variable_get(:@menu_info)) + input_keys("\C-i", false) + assert_byte_pointer_size(' foo_') + assert_cursor(6) + assert_cursor_max(6) + assert_line(' foo_') + assert_equal(nil, @line_editor.instance_variable_get(:@menu_info)) + input_keys("\C-i", false) + assert_byte_pointer_size(' foo_') + assert_cursor(6) + assert_cursor_max(6) + assert_line(' foo_') + assert_equal(%w{foo_foo foo_bar foo_baz}, @line_editor.instance_variable_get(:@menu_info).list) + end + + def test_completion_with_indent_and_completer_quote_characters + @line_editor.completion_proc = proc { |word| + %w{ + "".foo_foo + "".foo_bar + "".foo_baz + "".qux + }.map { |i| + i.encode(@encoding) + } + } + input_keys(' "".fo') + assert_byte_pointer_size(' "".fo') + assert_cursor(7) + assert_cursor_max(7) + assert_line(' "".fo') + assert_equal(nil, @line_editor.instance_variable_get(:@menu_info)) + input_keys("\C-i", false) + assert_byte_pointer_size(' "".foo_') + assert_cursor(9) + assert_cursor_max(9) + assert_line(' "".foo_') + assert_equal(nil, @line_editor.instance_variable_get(:@menu_info)) + input_keys("\C-i", false) + assert_byte_pointer_size(' "".foo_') + assert_cursor(9) + assert_cursor_max(9) + assert_line(' "".foo_') + assert_equal(%w{"".foo_foo "".foo_bar "".foo_baz}, @line_editor.instance_variable_get(:@menu_info).list) + end + def test_completion_with_perfect_match @line_editor.completion_proc = proc { |word| %w{ @@ -1834,6 +1896,15 @@ class Reline::KeyActor::Emacs::Test < Reline::TestCase assert_equal([0, 0], @line_editor.instance_variable_get(:@mark_pointer)) end + def test_modify_lines_with_wrong_rs + original_global_slash = $/ + $/ = 'b' + @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)) + $/ = original_global_slash + end + =begin # TODO: move KeyStroke instance from Reline to LineEditor def test_key_delete input_keys('ab') diff --git a/test/reline/test_key_actor_vi.rb b/test/reline/test_key_actor_vi.rb index 1ea160b6b5..c6337baea7 100644 --- a/test/reline/test_key_actor_vi.rb +++ b/test/reline/test_key_actor_vi.rb @@ -9,8 +9,8 @@ class Reline::KeyActor::ViInsert::Test < Reline::TestCase set editing-mode vi LINES @encoding = (RELINE_TEST_ENCODING rescue Encoding.default_external) - @line_editor = Reline::LineEditor.new(@config) - @line_editor.reset(@prompt, @encoding) + @line_editor = Reline::LineEditor.new(@config, @encoding) + @line_editor.reset(@prompt, encoding: @encoding) end def test_vi_command_mode @@ -24,6 +24,74 @@ class Reline::KeyActor::ViInsert::Test < Reline::TestCase assert_line('abc') end + def test_vi_insert + assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode) + input_keys('i') + assert_line('i') + assert_cursor(1) + assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode) + input_keys("\C-[") + assert_line('i') + assert_cursor(0) + assert_instance_of(Reline::KeyActor::ViCommand, @config.editing_mode) + input_keys('i') + assert_line('i') + assert_cursor(0) + assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode) + end + + def test_vi_add + assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode) + input_keys('a') + assert_line('a') + assert_cursor(1) + assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode) + input_keys("\C-[") + assert_line('a') + assert_cursor(0) + assert_instance_of(Reline::KeyActor::ViCommand, @config.editing_mode) + input_keys('a') + assert_line('a') + assert_cursor(1) + assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode) + end + + def test_vi_insert_at_bol + input_keys('I') + assert_line('I') + assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode) + input_keys("12345\C-[hh") + assert_line('I12345') + assert_byte_pointer_size('I12') + assert_cursor(3) + assert_cursor_max(6) + assert_instance_of(Reline::KeyActor::ViCommand, @config.editing_mode) + input_keys('I') + assert_line('I12345') + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(6) + assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode) + end + + def test_vi_add_at_eol + input_keys('A') + assert_line('A') + assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode) + input_keys("12345\C-[hh") + assert_line('A12345') + assert_byte_pointer_size('A12') + assert_cursor(3) + assert_cursor_max(6) + assert_instance_of(Reline::KeyActor::ViCommand, @config.editing_mode) + input_keys('A') + assert_line('A12345') + assert_byte_pointer_size('A12345') + assert_cursor(6) + assert_cursor_max(6) + assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode) + end + def test_ed_insert_one input_keys('a') assert_line('a') @@ -565,6 +633,60 @@ class Reline::KeyActor::ViInsert::Test < Reline::TestCase assert_cursor_max(6) end + def test_vi_to_next_char + input_keys("abcdef\C-[0") + assert_line('abcdef') + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(6) + input_keys('tz') + assert_line('abcdef') + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(6) + input_keys('te') + assert_line('abcdef') + assert_byte_pointer_size('abc') + assert_cursor(3) + assert_cursor_max(6) + end + + def test_vi_prev_char + input_keys("abcdef\C-[") + assert_line('abcdef') + assert_byte_pointer_size('abcde') + assert_cursor(5) + assert_cursor_max(6) + input_keys('Fz') + assert_line('abcdef') + assert_byte_pointer_size('abcde') + assert_cursor(5) + assert_cursor_max(6) + input_keys('Fa') + assert_line('abcdef') + assert_byte_pointer_size('') + assert_cursor(0) + assert_cursor_max(6) + end + + def test_vi_to_prev_char + input_keys("abcdef\C-[") + assert_line('abcdef') + assert_byte_pointer_size('abcde') + assert_cursor(5) + assert_cursor_max(6) + input_keys('Tz') + assert_line('abcdef') + assert_byte_pointer_size('abcde') + assert_cursor(5) + assert_cursor_max(6) + input_keys('Ta') + assert_line('abcdef') + assert_byte_pointer_size('a') + assert_cursor(1) + assert_cursor_max(6) + end + def test_vi_delete_next_char input_keys("abc\C-[h") assert_byte_pointer_size('a') @@ -1092,4 +1214,27 @@ class Reline::KeyActor::ViInsert::Test < Reline::TestCase assert_cursor_max(11) assert_line('aaa ddd eee') end + + def test_vi_change_meta + input_keys("aaa bbb ccc ddd eee\C-[02w") + assert_byte_pointer_size('aaa bbb ') + assert_cursor(8) + assert_cursor_max(19) + assert_line('aaa bbb ccc ddd eee') + input_keys('cwaiueo ') + assert_byte_pointer_size('aaa bbb aiueo ') + assert_cursor(14) + assert_cursor_max(21) + assert_line('aaa bbb aiueo ddd eee') + input_keys("\C-[") + assert_byte_pointer_size('aaa bbb aiueo') + assert_cursor(13) + assert_cursor_max(21) + assert_line('aaa bbb aiueo ddd eee') + input_keys('cb') + assert_byte_pointer_size('aaa bbb ') + assert_cursor(8) + assert_cursor_max(16) + assert_line('aaa bbb ddd eee') + end end diff --git a/test/reline/test_macro.rb b/test/reline/test_macro.rb index c69b50416a..b97de88a97 100644 --- a/test/reline/test_macro.rb +++ b/test/reline/test_macro.rb @@ -3,7 +3,8 @@ require_relative 'helper' class Reline::MacroTest < Reline::TestCase def setup @config = Reline::Config.new - @line_editor = Reline::LineEditor.new(@config) + @encoding = (RELINE_TEST_ENCODING rescue Encoding.default_external) + @line_editor = Reline::LineEditor.new(@config, @encoding) @line_editor.instance_variable_set(:@screen_size, [24, 80]) @output = @line_editor.output = File.open(IO::NULL, "w") end diff --git a/test/reline/test_reline.rb b/test/reline/test_reline.rb index 274f1aa6ba..0de2462a08 100644 --- a/test/reline/test_reline.rb +++ b/test/reline/test_reline.rb @@ -21,15 +21,15 @@ class Reline::Test < Reline::TestCase Reline.completion_append_character = "a".encode(Encoding::ASCII) assert_equal("a", Reline.completion_append_character) - assert_equal(Encoding::default_external, Reline.completion_append_character.encoding) + assert_equal(get_reline_encoding, Reline.completion_append_character.encoding) Reline.completion_append_character = "ba".encode(Encoding::ASCII) assert_equal("b", Reline.completion_append_character) - assert_equal(Encoding::default_external, Reline.completion_append_character.encoding) + assert_equal(get_reline_encoding, Reline.completion_append_character.encoding) Reline.completion_append_character = "cba".encode(Encoding::ASCII) assert_equal("c", Reline.completion_append_character) - assert_equal(Encoding::default_external, Reline.completion_append_character.encoding) + assert_equal(get_reline_encoding, Reline.completion_append_character.encoding) Reline.completion_append_character = nil assert_equal(nil, Reline.completion_append_character) @@ -40,7 +40,7 @@ class Reline::Test < Reline::TestCase Reline.basic_word_break_characters = "[".encode(Encoding::ASCII) assert_equal("[", Reline.basic_word_break_characters) - assert_equal(Encoding::default_external, Reline.basic_word_break_characters.encoding) + assert_equal(get_reline_encoding, Reline.basic_word_break_characters.encoding) end def test_completer_word_break_characters @@ -48,7 +48,7 @@ class Reline::Test < Reline::TestCase Reline.completer_word_break_characters = "[".encode(Encoding::ASCII) assert_equal("[", Reline.completer_word_break_characters) - assert_equal(Encoding::default_external, Reline.completer_word_break_characters.encoding) + assert_equal(get_reline_encoding, Reline.completer_word_break_characters.encoding) end def test_basic_quote_characters @@ -56,7 +56,7 @@ class Reline::Test < Reline::TestCase Reline.basic_quote_characters = "`".encode(Encoding::ASCII) assert_equal("`", Reline.basic_quote_characters) - assert_equal(Encoding::default_external, Reline.basic_quote_characters.encoding) + assert_equal(get_reline_encoding, Reline.basic_quote_characters.encoding) end def test_completer_quote_characters @@ -64,7 +64,7 @@ class Reline::Test < Reline::TestCase Reline.completer_quote_characters = "`".encode(Encoding::ASCII) assert_equal("`", Reline.completer_quote_characters) - assert_equal(Encoding::default_external, Reline.completer_quote_characters.encoding) + assert_equal(get_reline_encoding, Reline.completer_quote_characters.encoding) end def test_filename_quote_characters @@ -72,7 +72,7 @@ class Reline::Test < Reline::TestCase Reline.filename_quote_characters = "\'".encode(Encoding::ASCII) assert_equal("\'", Reline.filename_quote_characters) - assert_equal(Encoding::default_external, Reline.filename_quote_characters.encoding) + assert_equal(get_reline_encoding, Reline.filename_quote_characters.encoding) end def test_special_prefixes @@ -80,7 +80,7 @@ class Reline::Test < Reline::TestCase Reline.special_prefixes = "\'".encode(Encoding::ASCII) assert_equal("\'", Reline.special_prefixes) - assert_equal(Encoding::default_external, Reline.special_prefixes.encoding) + assert_equal(get_reline_encoding, Reline.special_prefixes.encoding) end def test_completion_case_fold @@ -94,7 +94,10 @@ class Reline::Test < Reline::TestCase end def test_completion_proc - assert_equal(nil, Reline.completion_proc) + skip unless Reline.completion_proc == nil + # Another test can set Reline.completion_proc + + # assert_equal(nil, Reline.completion_proc) p = proc {} Reline.completion_proc = p @@ -267,4 +270,8 @@ class Reline::Test < Reline::TestCase def test_may_req_ambiguous_char_width # TODO in Reline::Core end + + def get_reline_encoding + RUBY_PLATFORM =~ /mswin|mingw/ ? Encoding::UTF_8 : Encoding::default_external + end end diff --git a/test/reline/test_string_processing.rb b/test/reline/test_string_processing.rb index 4df0363848..e76fa384f2 100644 --- a/test/reline/test_string_processing.rb +++ b/test/reline/test_string_processing.rb @@ -7,8 +7,8 @@ class Reline::LineEditor::StringProcessingTest < Reline::TestCase @config = Reline::Config.new Reline::HISTORY.instance_variable_set(:@config, @config) @encoding = (RELINE_TEST_ENCODING rescue Encoding.default_external) - @line_editor = Reline::LineEditor.new(@config) - @line_editor.reset(@prompt, @encoding) + @line_editor = Reline::LineEditor.new(@config, @encoding) + @line_editor.reset(@prompt, encoding: @encoding) end def test_calculate_width diff --git a/test/reline/test_within_pipe.rb b/test/reline/test_within_pipe.rb index 11c3c0e86a..46b4465f32 100644 --- a/test/reline/test_within_pipe.rb +++ b/test/reline/test_within_pipe.rb @@ -13,6 +13,7 @@ class Reline::WithinPipeTest < Reline::TestCase def teardown Reline.input = STDIN Reline.output = STDOUT + Reline.point = 0 @reader.close @writer.close @output.close diff --git a/test/reline/yamatanooroti/test_rendering.rb b/test/reline/yamatanooroti/test_rendering.rb new file mode 100644 index 0000000000..4eab6661d6 --- /dev/null +++ b/test/reline/yamatanooroti/test_rendering.rb @@ -0,0 +1,41 @@ +require 'reline' + +begin + require 'yamatanooroti' + + 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 + end + + def test_history_back + write(":a\n") + write("\C-p") + close + assert_screen(<<~EOC) + Multiline REPL. + prompt> :a + => :a + prompt> :a + EOC + end + + def test_backspace + write(":abc\C-h\n") + close + assert_screen(<<~EOC) + Multiline REPL. + prompt> :ab + => :ab + prompt> + EOC + end + end +rescue LoadError, NameError + # On Ruby repository, this test suit doesn't run because Ruby repo doesn't + # have the yamatanooroti gem. +end |