diff options
author | tomoya ishida <[email protected]> | 2024-11-25 00:45:13 +0900 |
---|---|---|
committer | git <[email protected]> | 2024-11-24 15:45:18 +0000 |
commit | bf47b1b5230759dd16fc0930753d37a3eb6f30e2 (patch) | |
tree | 38a2dbd129d95c5739b2384833ff0719845d81b2 /test/reline | |
parent | c6ca33995592ebc5abd7ddcff244c3ea6ae29c47 (diff) |
[ruby/reline] Fix completion quote, preposing and target calculation
bug
(https://github.com/ruby/reline/pull/763)
https://github.com/ruby/reline/commit/d3ba7216eb
Diffstat (limited to 'test/reline')
-rw-r--r-- | test/reline/test_key_actor_emacs.rb | 22 | ||||
-rw-r--r-- | test/reline/test_line_editor.rb | 60 |
2 files changed, 60 insertions, 22 deletions
diff --git a/test/reline/test_key_actor_emacs.rb b/test/reline/test_key_actor_emacs.rb index d07a2ee3c3..fd16e96621 100644 --- a/test/reline/test_key_actor_emacs.rb +++ b/test/reline/test_key_actor_emacs.rb @@ -853,28 +853,6 @@ class Reline::KeyActor::EmacsTest < Reline::TestCase 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_line_around_cursor(' "".fo', '') - assert_equal(nil, @line_editor.instance_variable_get(:@menu_info)) - input_keys("\C-i", false) - assert_line_around_cursor(' "".foo_', '') - assert_equal(nil, @line_editor.instance_variable_get(:@menu_info)) - input_keys("\C-i", false) - assert_line_around_cursor(' "".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{ diff --git a/test/reline/test_line_editor.rb b/test/reline/test_line_editor.rb index 18fc2296ff..cc4dc6d29a 100644 --- a/test/reline/test_line_editor.rb +++ b/test/reline/test_line_editor.rb @@ -3,6 +3,66 @@ require 'reline/line_editor' require 'stringio' class Reline::LineEditor + + class CompletionBlockTest < Reline::TestCase + def setup + @original_quote_characters = Reline.completer_quote_characters + @original_word_break_characters = Reline.completer_word_break_characters + @line_editor = Reline::LineEditor.new(nil, Encoding::UTF_8) + end + + def retrieve_completion_block(lines, line_index, byte_pointer) + @line_editor.instance_variable_set(:@buffer_of_lines, lines) + @line_editor.instance_variable_set(:@line_index, line_index) + @line_editor.instance_variable_set(:@byte_pointer, byte_pointer) + @line_editor.retrieve_completion_block(false) + end + + def retrieve_completion_quote(line) + retrieve_completion_block([line], 0, line.bytesize) + _, target = @line_editor.retrieve_completion_block(false) + _, target2 = @line_editor.retrieve_completion_block(true) + # This is a hack to get the quoted character. + # retrieve_completion_block should be refactored to return the quoted character. + target2.chars.last if target2 != target + end + + def teardown + Reline.completer_quote_characters = @original_quote_characters + Reline.completer_word_break_characters = @original_word_break_characters + end + + def test_retrieve_completion_block + Reline.completer_word_break_characters = ' ([{' + Reline.completer_quote_characters = '' + assert_equal(['', '', 'foo'], retrieve_completion_block(['foo'], 0, 0)) + assert_equal(['', 'f', 'oo'], retrieve_completion_block(['foo'], 0, 1)) + assert_equal(['foo ', 'ba', 'r baz'], retrieve_completion_block(['foo bar baz'], 0, 6)) + assert_equal(['foo([', 'b', 'ar])baz'], retrieve_completion_block(['foo([bar])baz'], 0, 6)) + assert_equal(['foo([{', '', '}])baz'], retrieve_completion_block(['foo([{}])baz'], 0, 6)) + assert_equal(["abc\nfoo ", 'ba', "r baz\ndef"], retrieve_completion_block(['abc', 'foo bar baz', 'def'], 1, 6)) + end + + def test_retrieve_completion_block_with_quote_characters + Reline.completer_word_break_characters = ' ([{' + Reline.completer_quote_characters = '' + assert_equal(['"" ', '"wo', 'rd'], retrieve_completion_block(['"" "word'], 0, 6)) + Reline.completer_quote_characters = '"' + assert_equal(['"" "', 'wo', 'rd'], retrieve_completion_block(['"" "word'], 0, 6)) + end + + def test_retrieve_completion_quote + Reline.completer_quote_characters = '"\'' + assert_equal('"', retrieve_completion_quote('"\'')) + assert_equal(nil, retrieve_completion_quote('""')) + assert_equal("'", retrieve_completion_quote('""\'"')) + assert_equal(nil, retrieve_completion_quote('""\'\'')) + assert_equal('"', retrieve_completion_quote('"\\"')) + assert_equal(nil, retrieve_completion_quote('"\\""')) + assert_equal(nil, retrieve_completion_quote('"\\\\"')) + end + end + class RenderLineDifferentialTest < Reline::TestCase class TestIO < Reline::IO def move_cursor_column(col) |