summaryrefslogtreecommitdiff
path: root/test/reline
diff options
context:
space:
mode:
authortomoya ishida <[email protected]>2024-11-25 00:45:13 +0900
committergit <[email protected]>2024-11-24 15:45:18 +0000
commitbf47b1b5230759dd16fc0930753d37a3eb6f30e2 (patch)
tree38a2dbd129d95c5739b2384833ff0719845d81b2 /test/reline
parentc6ca33995592ebc5abd7ddcff244c3ea6ae29c47 (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.rb22
-rw-r--r--test/reline/test_line_editor.rb60
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)