summaryrefslogtreecommitdiff
path: root/test/reline/test_reline.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/reline/test_reline.rb')
-rw-r--r--test/reline/test_reline.rb169
1 files changed, 117 insertions, 52 deletions
diff --git a/test/reline/test_reline.rb b/test/reline/test_reline.rb
index 161b329740..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_editing_mode
- # TODO
+ 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_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,24 +368,18 @@ 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
- if encoding = Reline::IOGate.encoding
+ if encoding = Reline.core.encoding
encoding
elsif RUBY_PLATFORM =~ /mswin|mingw/
Encoding::UTF_8