1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/reline/test_reline.rb

346 lines
10 KiB
Ruby
Raw Normal View History

2019-07-16 08:26:30 -04:00
require_relative 'helper'
require 'reline'
require 'stringio'
2019-07-16 08:26:30 -04:00
class Reline::Test < Reline::TestCase
class DummyCallbackObject
def call; end
end
2019-07-16 08:26:30 -04:00
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
2019-07-16 08:26:30 -04:00
end
def teardown
Reline.test_reset
end
def test_completion_append_character
completion_append_character = Reline.completion_append_character
2019-10-02 06:56:55 -04:00
assert_equal(nil, Reline.completion_append_character)
2019-07-16 08:26:30 -04:00
Reline.completion_append_character = ""
2019-10-02 06:56:55 -04:00
assert_equal(nil, Reline.completion_append_character)
2019-07-16 08:26:30 -04:00
2019-08-18 03:07:20 -04:00
Reline.completion_append_character = "a".encode(Encoding::ASCII)
2019-10-02 06:56:55 -04:00
assert_equal("a", Reline.completion_append_character)
assert_equal(get_reline_encoding, Reline.completion_append_character.encoding)
2019-07-16 08:26:30 -04:00
2019-08-18 03:07:20 -04:00
Reline.completion_append_character = "ba".encode(Encoding::ASCII)
2019-10-02 06:56:55 -04:00
assert_equal("b", Reline.completion_append_character)
assert_equal(get_reline_encoding, Reline.completion_append_character.encoding)
2019-07-16 08:26:30 -04:00
2019-08-18 03:07:20 -04:00
Reline.completion_append_character = "cba".encode(Encoding::ASCII)
2019-10-02 06:56:55 -04:00
assert_equal("c", Reline.completion_append_character)
assert_equal(get_reline_encoding, Reline.completion_append_character.encoding)
2019-07-16 08:26:30 -04:00
Reline.completion_append_character = nil
2019-10-02 06:56:55 -04:00
assert_equal(nil, Reline.completion_append_character)
ensure
Reline.completion_append_character = completion_append_character
2019-07-16 08:26:30 -04:00
end
def test_basic_word_break_characters
basic_word_break_characters = Reline.basic_word_break_characters
2019-10-02 06:56:55 -04:00
assert_equal(" \t\n`><=;|&{(", Reline.basic_word_break_characters)
2019-07-16 08:26:30 -04:00
2019-08-18 03:07:20 -04:00
Reline.basic_word_break_characters = "[".encode(Encoding::ASCII)
2019-10-02 06:56:55 -04:00
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
2019-07-16 08:26:30 -04:00
end
def test_completer_word_break_characters
completer_word_break_characters = Reline.completer_word_break_characters
2019-10-02 06:56:55 -04:00
assert_equal(" \t\n`><=;|&{(", Reline.completer_word_break_characters)
2019-07-16 08:26:30 -04:00
2019-08-18 03:07:20 -04:00
Reline.completer_word_break_characters = "[".encode(Encoding::ASCII)
2019-10-02 06:56:55 -04:00
assert_equal("[", Reline.completer_word_break_characters)
assert_equal(get_reline_encoding, Reline.completer_word_break_characters.encoding)
assert_nothing_raised { Reline.completer_word_break_characters = '' }
ensure
Reline.completer_word_break_characters = completer_word_break_characters
2019-07-16 08:26:30 -04:00
end
def test_basic_quote_characters
basic_quote_characters = Reline.basic_quote_characters
2019-10-02 06:56:55 -04:00
assert_equal('"\'', Reline.basic_quote_characters)
2019-07-16 08:26:30 -04:00
2019-08-18 03:07:20 -04:00
Reline.basic_quote_characters = "`".encode(Encoding::ASCII)
2019-10-02 06:56:55 -04:00
assert_equal("`", Reline.basic_quote_characters)
assert_equal(get_reline_encoding, Reline.basic_quote_characters.encoding)
ensure
Reline.basic_quote_characters = basic_quote_characters
2019-07-16 08:26:30 -04:00
end
def test_completer_quote_characters
completer_quote_characters = Reline.completer_quote_characters
2019-10-02 06:56:55 -04:00
assert_equal('"\'', Reline.completer_quote_characters)
2019-07-16 08:26:30 -04:00
2019-08-18 03:07:20 -04:00
Reline.completer_quote_characters = "`".encode(Encoding::ASCII)
2019-10-02 06:56:55 -04:00
assert_equal("`", Reline.completer_quote_characters)
assert_equal(get_reline_encoding, Reline.completer_quote_characters.encoding)
assert_nothing_raised { Reline.completer_quote_characters = '' }
ensure
Reline.completer_quote_characters = completer_quote_characters
2019-07-16 08:26:30 -04:00
end
def test_filename_quote_characters
filename_quote_characters = Reline.filename_quote_characters
2019-10-02 06:56:55 -04:00
assert_equal('', Reline.filename_quote_characters)
2019-07-16 08:26:30 -04:00
2019-08-18 03:07:20 -04:00
Reline.filename_quote_characters = "\'".encode(Encoding::ASCII)
2019-10-02 06:56:55 -04:00
assert_equal("\'", Reline.filename_quote_characters)
assert_equal(get_reline_encoding, Reline.filename_quote_characters.encoding)
ensure
Reline.filename_quote_characters = filename_quote_characters
2019-07-16 08:26:30 -04:00
end
def test_special_prefixes
special_prefixes = Reline.special_prefixes
2019-10-02 06:56:55 -04:00
assert_equal('', Reline.special_prefixes)
2019-07-16 08:26:30 -04:00
2019-08-18 03:07:20 -04:00
Reline.special_prefixes = "\'".encode(Encoding::ASCII)
2019-10-02 06:56:55 -04:00
assert_equal("\'", Reline.special_prefixes)
assert_equal(get_reline_encoding, Reline.special_prefixes.encoding)
ensure
Reline.special_prefixes = special_prefixes
2019-07-16 08:26:30 -04:00
end
def test_completion_case_fold
completion_case_fold = Reline.completion_case_fold
2019-10-02 06:56:55 -04:00
assert_equal(nil, Reline.completion_case_fold)
2019-07-16 08:26:30 -04:00
Reline.completion_case_fold = true
2019-10-02 06:56:55 -04:00
assert_equal(true, Reline.completion_case_fold)
2019-07-16 08:26:30 -04:00
2019-08-18 03:07:20 -04:00
Reline.completion_case_fold = "hoge".encode(Encoding::ASCII)
2019-10-02 06:56:55 -04:00
assert_equal("hoge", Reline.completion_case_fold)
ensure
Reline.completion_case_fold = completion_case_fold
2019-07-16 08:26:30 -04:00
end
def test_completion_proc
skip unless Reline.completion_proc == nil
# Another test can set Reline.completion_proc
# assert_equal(nil, Reline.completion_proc)
2019-07-16 08:26:30 -04:00
p = proc {}
Reline.completion_proc = p
2019-10-02 06:56:55 -04:00
assert_equal(p, Reline.completion_proc)
2019-07-16 08:26:30 -04:00
l = lambda {}
Reline.completion_proc = l
2019-10-02 06:56:55 -04:00
assert_equal(l, Reline.completion_proc)
2019-07-16 08:26:30 -04:00
assert_raise(ArgumentError) { Reline.completion_proc = 42 }
assert_raise(ArgumentError) { Reline.completion_proc = "hoge" }
dummy = DummyCallbackObject.new
Reline.completion_proc = dummy
assert_equal(dummy, Reline.completion_proc)
2019-07-16 08:26:30 -04:00
end
def test_output_modifier_proc
2019-10-02 06:56:55 -04:00
assert_equal(nil, Reline.output_modifier_proc)
2019-07-16 08:26:30 -04:00
p = proc {}
Reline.output_modifier_proc = p
2019-10-02 06:56:55 -04:00
assert_equal(p, Reline.output_modifier_proc)
2019-07-16 08:26:30 -04:00
l = lambda {}
Reline.output_modifier_proc = l
2019-10-02 06:56:55 -04:00
assert_equal(l, Reline.output_modifier_proc)
2019-07-16 08:26:30 -04:00
assert_raise(ArgumentError) { Reline.output_modifier_proc = 42 }
assert_raise(ArgumentError) { Reline.output_modifier_proc = "hoge" }
dummy = DummyCallbackObject.new
Reline.output_modifier_proc = dummy
assert_equal(dummy, Reline.output_modifier_proc)
2019-07-16 08:26:30 -04:00
end
def test_prompt_proc
2019-10-02 06:56:55 -04:00
assert_equal(nil, Reline.prompt_proc)
2019-07-16 08:26:30 -04:00
p = proc {}
Reline.prompt_proc = p
2019-10-02 06:56:55 -04:00
assert_equal(p, Reline.prompt_proc)
2019-07-16 08:26:30 -04:00
l = lambda {}
Reline.prompt_proc = l
2019-10-02 06:56:55 -04:00
assert_equal(l, Reline.prompt_proc)
2019-07-16 08:26:30 -04:00
assert_raise(ArgumentError) { Reline.prompt_proc = 42 }
assert_raise(ArgumentError) { Reline.prompt_proc = "hoge" }
dummy = DummyCallbackObject.new
Reline.prompt_proc = dummy
assert_equal(dummy, Reline.prompt_proc)
2019-07-16 08:26:30 -04:00
end
def test_auto_indent_proc
2019-10-02 06:56:55 -04:00
assert_equal(nil, Reline.auto_indent_proc)
2019-07-16 08:26:30 -04:00
p = proc {}
Reline.auto_indent_proc = p
2019-10-02 06:56:55 -04:00
assert_equal(p, Reline.auto_indent_proc)
2019-07-16 08:26:30 -04:00
l = lambda {}
Reline.auto_indent_proc = l
2019-10-02 06:56:55 -04:00
assert_equal(l, Reline.auto_indent_proc)
2019-07-16 08:26:30 -04:00
assert_raise(ArgumentError) { Reline.auto_indent_proc = 42 }
assert_raise(ArgumentError) { Reline.auto_indent_proc = "hoge" }
dummy = DummyCallbackObject.new
Reline.auto_indent_proc = dummy
assert_equal(dummy, Reline.auto_indent_proc)
2019-07-16 08:26:30 -04:00
end
def test_pre_input_hook
2019-10-02 06:56:55 -04:00
assert_equal(nil, Reline.pre_input_hook)
2019-07-16 08:26:30 -04:00
p = proc {}
Reline.pre_input_hook = p
2019-10-02 06:56:55 -04:00
assert_equal(p, Reline.pre_input_hook)
2019-07-16 08:26:30 -04:00
l = lambda {}
Reline.pre_input_hook = l
2019-10-02 06:56:55 -04:00
assert_equal(l, Reline.pre_input_hook)
2019-07-16 08:26:30 -04:00
end
def test_dig_perfect_match_proc
2019-10-02 06:56:55 -04:00
assert_equal(nil, Reline.dig_perfect_match_proc)
2019-07-16 08:26:30 -04:00
p = proc {}
Reline.dig_perfect_match_proc = p
2019-10-02 06:56:55 -04:00
assert_equal(p, Reline.dig_perfect_match_proc)
2019-07-16 08:26:30 -04:00
l = lambda {}
Reline.dig_perfect_match_proc = l
2019-10-02 06:56:55 -04:00
assert_equal(l, Reline.dig_perfect_match_proc)
2019-07-16 08:26:30 -04:00
assert_raise(ArgumentError) { Reline.dig_perfect_match_proc = 42 }
assert_raise(ArgumentError) { Reline.dig_perfect_match_proc = "hoge" }
dummy = DummyCallbackObject.new
Reline.dig_perfect_match_proc = dummy
assert_equal(dummy, Reline.dig_perfect_match_proc)
2019-07-16 08:26:30 -04:00
end
def test_insert_text
assert_equal('', Reline.line_buffer)
assert_equal(0, Reline.point)
Reline.insert_text('abc')
assert_equal('abc', Reline.line_buffer)
assert_equal(3, Reline.point)
2019-07-16 08:26:30 -04:00
end
def test_delete_text
assert_equal('', Reline.line_buffer)
assert_equal(0, Reline.point)
Reline.insert_text('abc')
assert_equal('abc', Reline.line_buffer)
assert_equal(3, Reline.point)
Reline.delete_text()
assert_equal('', Reline.line_buffer)
assert_equal(0, Reline.point)
Reline.insert_text('abc')
Reline.delete_text(1)
assert_equal('a', Reline.line_buffer)
assert_equal(1, Reline.point)
Reline.insert_text('defghi')
Reline.delete_text(2, 2)
assert_equal('adghi', Reline.line_buffer)
assert_equal(5, Reline.point)
end
def test_set_input_and_output
2019-07-16 08:26:30 -04:00
assert_raise(TypeError) do
Reline.input = "This is not a file."
end
assert_raise(TypeError) do
Reline.output = "This is not a file."
end
input, to_write = IO.pipe
to_read, output = IO.pipe
Reline.input, Reline.output = input, output
to_write.write "a\n"
result = Reline.readline
to_write.close
read_text = to_read.read_nonblock(100)
assert_equal('a', result)
refute(read_text.empty?)
ensure
input&.close
output&.close
to_read&.close
2019-07-16 08:26:30 -04:00
end
def test_vi_editing_mode
Reline.vi_editing_mode
2019-10-02 06:56:55 -04:00
assert_equal(Reline::KeyActor::ViInsert, Reline.send(:core).config.editing_mode.class)
2019-07-16 08:26:30 -04:00
end
def test_emacs_editing_mode
Reline.emacs_editing_mode
2019-10-02 06:56:55 -04:00
assert_equal(Reline::KeyActor::Emacs, Reline.send(:core).config.editing_mode.class)
2019-07-16 08:26:30 -04:00
end
def test_readmultiline
# readmultiline is module function
2019-11-13 01:22:39 -05:00
assert_include(Reline.methods, :readmultiline)
assert_include(Reline.private_instance_methods, :readmultiline)
2019-07-16 08:26:30 -04:00
end
def test_readline
# readline is module function
2019-11-13 01:22:39 -05:00
assert_include(Reline.methods, :readline)
assert_include(Reline.private_instance_methods, :readline)
2019-07-16 08:26:30 -04:00
end
def test_inner_readline
# TODO in Reline::Core
end
def test_read_io
# TODO in Reline::Core
end
def test_read_escaped_key
# TODO in Reline::Core
end
def test_may_req_ambiguous_char_width
# TODO in Reline::Core
end
def get_reline_encoding
if encoding = Reline::IOGate.encoding
encoding
elsif RUBY_PLATFORM =~ /mswin|mingw/
Encoding::UTF_8
else
Encoding::default_external
end
end
2019-07-16 08:26:30 -04:00
end