Suppress to crash IRB if completed list has nil

This commit is contained in:
aycabta 2019-12-12 08:40:44 +09:00
Родитель 50ae8895f3
Коммит 7d991a0571
2 изменённых файлов: 46 добавлений и 1 удалений

Просмотреть файл

@ -553,7 +553,7 @@ class Reline::LineEditor
raise Encoding::CompatibilityError, "#{target.encoding.name} is not comaptible with #{i.encoding.name}" raise Encoding::CompatibilityError, "#{target.encoding.name} is not comaptible with #{i.encoding.name}"
end end
if @config.completion_ignore_case if @config.completion_ignore_case
i&.downcase.start_with?(target.downcase) i&.downcase&.start_with?(target.downcase)
else else
i&.start_with?(target) i&.start_with?(target)
end end

Просмотреть файл

@ -1363,6 +1363,51 @@ class Reline::KeyActor::Emacs::Test < Reline::TestCase
assert_line('abcde foo_o_ ABCDE') assert_line('abcde foo_o_ ABCDE')
end end
def test_completion_with_nil_value
@line_editor.completion_proc = proc { |word|
%w{
foo_foo
foo_bar
Foo_baz
qux
}.map { |i|
i.encode(@encoding)
}.prepend(nil)
}
@config.completion_ignore_case = true
input_keys('fo')
assert_byte_pointer_size('fo')
assert_cursor(2)
assert_cursor_max(2)
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(4)
assert_cursor_max(4)
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(4)
assert_cursor_max(4)
assert_line('foo_')
assert_equal(%w{foo_foo foo_bar Foo_baz}, @line_editor.instance_variable_get(:@menu_info).list)
input_keys('a')
input_keys("\C-i", false)
assert_byte_pointer_size('foo_a')
assert_cursor(5)
assert_cursor_max(5)
assert_line('foo_a')
input_keys("\C-h", false)
input_keys('b')
input_keys("\C-i", false)
assert_byte_pointer_size('foo_ba')
assert_cursor(6)
assert_cursor_max(6)
assert_line('foo_ba')
end
def test_em_kill_region def test_em_kill_region
input_keys('abc def{bbb}ccc ddd ') input_keys('abc def{bbb}ccc ddd ')
assert_byte_pointer_size('abc def{bbb}ccc ddd ') assert_byte_pointer_size('abc def{bbb}ccc ddd ')