diff options
Diffstat (limited to 'test/reline/test_reline.rb')
-rw-r--r-- | test/reline/test_reline.rb | 175 |
1 files changed, 123 insertions, 52 deletions
diff --git a/test/reline/test_reline.rb b/test/reline/test_reline.rb index 0f32ec4421..40c880c11f 100644 --- a/test/reline/test_reline.rb +++ b/test/reline/test_reline.rb @@ -1,5 +1,6 @@ require_relative 'helper' -require "reline" +require 'reline' +require 'stringio' class Reline::Test < Reline::TestCase class DummyCallbackObject @@ -7,6 +8,7 @@ class Reline::Test < Reline::TestCase end def setup + Reline.send(:test_mode) Reline.output_modifier_proc = nil Reline.completion_proc = nil Reline.prompt_proc = nil @@ -136,14 +138,14 @@ class Reline::Test < Reline::TestCase end def test_completion_proc - skip unless Reline.completion_proc == nil + omit unless Reline.completion_proc == nil # Another test can set Reline.completion_proc # assert_equal(nil, Reline.completion_proc) - p = proc {} - Reline.completion_proc = p - assert_equal(p, Reline.completion_proc) + dummy_proc = proc {} + Reline.completion_proc = dummy_proc + assert_equal(dummy_proc, Reline.completion_proc) l = lambda {} Reline.completion_proc = l @@ -160,9 +162,9 @@ class Reline::Test < Reline::TestCase def test_output_modifier_proc assert_equal(nil, Reline.output_modifier_proc) - p = proc {} - Reline.output_modifier_proc = p - assert_equal(p, Reline.output_modifier_proc) + dummy_proc = proc {} + Reline.output_modifier_proc = dummy_proc + assert_equal(dummy_proc, Reline.output_modifier_proc) l = lambda {} Reline.output_modifier_proc = l @@ -179,9 +181,9 @@ class Reline::Test < Reline::TestCase def test_prompt_proc assert_equal(nil, Reline.prompt_proc) - p = proc {} - Reline.prompt_proc = p - assert_equal(p, Reline.prompt_proc) + dummy_proc = proc {} + Reline.prompt_proc = dummy_proc + assert_equal(dummy_proc, Reline.prompt_proc) l = lambda {} Reline.prompt_proc = l @@ -198,9 +200,9 @@ class Reline::Test < Reline::TestCase def test_auto_indent_proc assert_equal(nil, Reline.auto_indent_proc) - p = proc {} - Reline.auto_indent_proc = p - assert_equal(p, Reline.auto_indent_proc) + dummy_proc = proc {} + Reline.auto_indent_proc = dummy_proc + assert_equal(dummy_proc, Reline.auto_indent_proc) l = lambda {} Reline.auto_indent_proc = l @@ -217,9 +219,9 @@ class Reline::Test < Reline::TestCase def test_pre_input_hook assert_equal(nil, Reline.pre_input_hook) - p = proc {} - Reline.pre_input_hook = p - assert_equal(p, Reline.pre_input_hook) + dummy_proc = proc {} + Reline.pre_input_hook = dummy_proc + assert_equal(dummy_proc, Reline.pre_input_hook) l = lambda {} Reline.pre_input_hook = l @@ -229,9 +231,9 @@ class Reline::Test < Reline::TestCase def test_dig_perfect_match_proc assert_equal(nil, Reline.dig_perfect_match_proc) - p = proc {} - Reline.dig_perfect_match_proc = p - assert_equal(p, Reline.dig_perfect_match_proc) + dummy_proc = proc {} + Reline.dig_perfect_match_proc = dummy_proc + assert_equal(dummy_proc, Reline.dig_perfect_match_proc) l = lambda {} Reline.dig_perfect_match_proc = l @@ -246,43 +248,112 @@ class Reline::Test < Reline::TestCase end def test_insert_text - # TODO - end - - def test_line_buffer - # TODO - end - - def test_point - # TODO - end - - def test_input= - # TODO + 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) + 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 assert_raise(TypeError) do Reline.input = "This is not a file." end - end - - def test_output= - # TODO assert_raise(TypeError) do Reline.output = "This is not a file." end + + input, to_write = IO.pipe + to_read, output = IO.pipe + unless Reline.__send__(:input=, input) + omit "Setting to input is not effective on #{Reline.core.io_gate}" + end + Reline.output = 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 end def test_vi_editing_mode Reline.vi_editing_mode - assert_equal(Reline::KeyActor::ViInsert, Reline.send(:core).config.editing_mode.class) + assert_equal(Reline::KeyActor::ViInsert, Reline.core.config.editing_mode.class) end def test_emacs_editing_mode Reline.emacs_editing_mode - assert_equal(Reline::KeyActor::Emacs, Reline.send(:core).config.editing_mode.class) + assert_equal(Reline::KeyActor::Emacs, Reline.core.config.editing_mode.class) + end + + def test_add_dialog_proc + dummy_proc = proc {} + Reline.add_dialog_proc(:test_proc, dummy_proc) + d = Reline.dialog_proc(:test_proc) + assert_equal(dummy_proc, d.dialog_proc) + + dummy_proc_2 = proc {} + Reline.add_dialog_proc(:test_proc, dummy_proc_2) + d = Reline.dialog_proc(:test_proc) + assert_equal(dummy_proc_2, d.dialog_proc) + + Reline.add_dialog_proc(:test_proc, nil) + assert_nil(Reline.dialog_proc(:test_proc)) + + l = lambda {} + Reline.add_dialog_proc(:test_lambda, l) + d = Reline.dialog_proc(:test_lambda) + assert_equal(l, d.dialog_proc) + + assert_equal(nil, Reline.dialog_proc(:test_nothing)) + + assert_raise(ArgumentError) { Reline.add_dialog_proc(:error, 42) } + assert_raise(ArgumentError) { Reline.add_dialog_proc(:error, 'hoge') } + assert_raise(ArgumentError) { Reline.add_dialog_proc('error', proc {} ) } + + dummy = DummyCallbackObject.new + Reline.add_dialog_proc(:dummy, dummy) + d = Reline.dialog_proc(:dummy) + assert_equal(dummy, d.dialog_proc) end - def test_editing_mode - # TODO + def test_add_dialog_proc_with_context + dummy_proc = proc {} + array = Array.new + Reline.add_dialog_proc(:test_proc, dummy_proc, array) + d = Reline.dialog_proc(:test_proc) + assert_equal(dummy_proc, d.dialog_proc) + assert_equal(array, d.context) + + Reline.add_dialog_proc(:test_proc, dummy_proc, nil) + d = Reline.dialog_proc(:test_proc) + assert_equal(dummy_proc, d.dialog_proc) + assert_equal(nil, d.context) end def test_readmultiline @@ -297,23 +368,23 @@ class Reline::Test < Reline::TestCase assert_include(Reline.private_instance_methods, :readline) 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 + def test_dumb_terminal + lib = File.expand_path("../../lib", __dir__) + out = IO.popen([{"TERM"=>"dumb"}, Reline.test_rubybin, "-I#{lib}", "-rreline", "-e", "p Reline.core.io_gate"], &:read) + assert_equal("Reline::GeneralIO", out.chomp) end def get_reline_encoding - RUBY_PLATFORM =~ /mswin|mingw/ ? Encoding::UTF_8 : Encoding::default_external + if encoding = Reline.core.encoding + encoding + elsif RUBY_PLATFORM =~ /mswin|mingw/ + Encoding::UTF_8 + else + Encoding::default_external + end end end |