summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/io/console/test_io_console.rb7
-rw-r--r--test/irb/test_color.rb2
-rw-r--r--test/irb/test_completion.rb22
-rw-r--r--test/irb/test_context.rb38
-rw-r--r--test/irb/test_ruby_lex.rb130
-rw-r--r--test/readline/helper.rb20
-rw-r--r--test/readline/test_readline.rb220
-rw-r--r--test/readline/test_readline_history.rb11
-rw-r--r--test/reline/test_config.rb20
-rw-r--r--test/reline/test_history.rb10
-rw-r--r--test/reline/test_key_actor_emacs.rb75
-rw-r--r--test/reline/test_key_actor_vi.rb149
-rw-r--r--test/reline/test_macro.rb3
-rw-r--r--test/reline/test_reline.rb27
-rw-r--r--test/reline/test_string_processing.rb4
-rw-r--r--test/reline/test_within_pipe.rb1
-rw-r--r--test/reline/yamatanooroti/test_rendering.rb41
-rw-r--r--test/ruby/test_rubyoptions.rb8
18 files changed, 646 insertions, 142 deletions
diff --git a/test/io/console/test_io_console.rb b/test/io/console/test_io_console.rb
index d71e42603f..a02605dd1e 100644
--- a/test/io/console/test_io_console.rb
+++ b/test/io/console/test_io_console.rb
@@ -364,6 +364,11 @@ defined?(PTY) and defined?(IO.console) and TestIO_Console.class_eval do
assert_ctrl("#{cc.ord}", cc, r, w)
assert_ctrl("#{cc.ord}", cc, r, w)
end
+ if cc = ctrl["stop"]
+ assert_ctrl("#{cc.ord}", cc, r, w)
+ assert_ctrl("#{cc.ord}", cc, r, w)
+ assert_ctrl("#{cc.ord}", cc, r, w)
+ end
end
end
@@ -457,7 +462,7 @@ defined?(IO.console) and TestIO_Console.class_eval do
noctty = [EnvUtil.rubybin, "-e", "Process.daemon(true)"]
when !(rubyw = RbConfig::CONFIG["RUBYW_INSTALL_NAME"]).empty?
dir, base = File.split(EnvUtil.rubybin)
- noctty = [File.join(dir, base.sub(/ruby/, rubyw))]
+ noctty = [File.join(dir, base.sub(RUBY_ENGINE, rubyw))]
end
if noctty
diff --git a/test/irb/test_color.rb b/test/irb/test_color.rb
index 3ced640004..cb90d29c9d 100644
--- a/test/irb/test_color.rb
+++ b/test/irb/test_color.rb
@@ -29,7 +29,7 @@ module TestIRB
"def self.foo; bar; end" => "#{GREEN}def#{CLEAR} #{CYAN}#{BOLD}self#{CLEAR}.#{BLUE}#{BOLD}foo#{CLEAR}; bar; #{GREEN}end#{CLEAR}",
'erb = ERB.new("a#{nil}b", trim_mode: "-")' => "erb = #{BLUE}#{BOLD}#{UNDERLINE}ERB#{CLEAR}.new(#{RED}#{BOLD}\"#{CLEAR}#{RED}a#{CLEAR}#{RED}\#{#{CLEAR}#{CYAN}#{BOLD}nil#{CLEAR}#{RED}}#{CLEAR}#{RED}b#{CLEAR}#{RED}#{BOLD}\"#{CLEAR}, #{MAGENTA}trim_mode:#{CLEAR} #{RED}#{BOLD}\"#{CLEAR}#{RED}-#{CLEAR}#{RED}#{BOLD}\"#{CLEAR})",
"# comment" => "#{BLUE}#{BOLD}# comment#{CLEAR}",
- "yield(hello)" => "#{GREEN}yield#{CLEAR}(hello)",
+ "def f;yield(hello);end" => "#{GREEN}def#{CLEAR} #{BLUE}#{BOLD}f#{CLEAR};#{GREEN}yield#{CLEAR}(hello);#{GREEN}end#{CLEAR}",
'"##@var]"' => "#{RED}#{BOLD}\"#{CLEAR}#{RED}\##{CLEAR}#{RED}\##{CLEAR}@var#{RED}]#{CLEAR}#{RED}#{BOLD}\"#{CLEAR}",
'"foo#{a} #{b}"' => "#{RED}#{BOLD}\"#{CLEAR}#{RED}foo#{CLEAR}#{RED}\#{#{CLEAR}a#{RED}}#{CLEAR}#{RED} #{CLEAR}#{RED}\#{#{CLEAR}b#{RED}}#{CLEAR}#{RED}#{BOLD}\"#{CLEAR}",
'/r#{e}g/' => "#{RED}#{BOLD}/#{CLEAR}#{RED}r#{CLEAR}#{RED}\#{#{CLEAR}e#{RED}}#{CLEAR}#{RED}g#{CLEAR}#{RED}#{BOLD}/#{CLEAR}",
diff --git a/test/irb/test_completion.rb b/test/irb/test_completion.rb
index 52bbc7b2cc..a765bbf3a5 100644
--- a/test/irb/test_completion.rb
+++ b/test/irb/test_completion.rb
@@ -25,5 +25,27 @@ module TestIRB
assert_include(IRB::InputCompletor.retrieve_completion_data("1r.positi", bind: binding), "1r.positive?")
assert_empty(IRB::InputCompletor.retrieve_completion_data("1i.positi", bind: binding))
end
+
+ def test_complete_symbol
+ _ = :aiueo
+ assert_include(IRB::InputCompletor.retrieve_completion_data(":a", bind: binding), ":aiueo")
+ assert_empty(IRB::InputCompletor.retrieve_completion_data(":irb_unknown_symbol_abcdefg", bind: binding))
+ end
+
+ def test_complete_symbol_failure
+ assert_nil(IRB::InputCompletor::PerfectMatchedProc.(":aiueo", bind: binding))
+ end
+
+ def test_complete_reserved_words
+ candidates = IRB::InputCompletor.retrieve_completion_data("de", bind: binding)
+ %w[def defined?].each do |word|
+ assert_include candidates, word
+ end
+
+ candidates = IRB::InputCompletor.retrieve_completion_data("__", bind: binding)
+ %w[__ENCODING__ __LINE__ __FILE__].each do |word|
+ assert_include candidates, word
+ end
+ end
end
end
diff --git a/test/irb/test_context.rb b/test/irb/test_context.rb
index 693ebbeaea..d03cc30c78 100644
--- a/test/irb/test_context.rb
+++ b/test/irb/test_context.rb
@@ -63,6 +63,13 @@ module TestIRB
assert_not_match(/rescue _\.class/, e.message)
end
+ def test_evaluate_with_encoding_error_without_lineno
+ assert_raise_with_message(EncodingError, /invalid symbol/) {
+ @context.evaluate(%q[{"\xAE": 1}], 1)
+ # The backtrace of this invalid encoding hash doesn't contain lineno.
+ }
+ end
+
def test_evaluate_with_onigmo_warning
assert_warning("(irb):1: warning: character class has duplicated range: /[aa]/\n") do
@context.evaluate('/[aa]/', 1)
@@ -216,5 +223,36 @@ module TestIRB
assert(irb.context.echo?, "echo? should be true by default")
assert(irb.context.echo_on_assignment?, "echo_on_assignment? should be true when IRB.conf[:ECHO_ON_ASSIGNMENT] is set to true")
end
+
+ def test_multiline_output_on_default_inspector
+ main = Object.new
+ def main.inspect
+ "abc\ndef"
+ end
+ input = TestInputMethod.new([
+ "self"
+ ])
+ irb = IRB::Irb.new(IRB::WorkSpace.new(main), input)
+ irb.context.return_format = "=> %s\n"
+
+ # The default
+ irb.context.newline_before_multiline_output = true
+ out, err = capture_io do
+ irb.eval_input
+ end
+ assert_empty err
+ assert_equal("=> \nabc\ndef\n",
+ out)
+
+ # No newline before multiline output
+ input.reset
+ irb.context.newline_before_multiline_output = false
+ out, err = capture_io do
+ irb.eval_input
+ end
+ assert_empty err
+ assert_equal("=> abc\ndef\n",
+ out)
+ end
end
end
diff --git a/test/irb/test_ruby_lex.rb b/test/irb/test_ruby_lex.rb
new file mode 100644
index 0000000000..dd5a1f7ca5
--- /dev/null
+++ b/test/irb/test_ruby_lex.rb
@@ -0,0 +1,130 @@
+$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
+require 'irb/ruby-lex'
+require 'test/unit'
+require 'ostruct'
+
+module TestIRB
+ class TestRubyLex < Test::Unit::TestCase
+ Row = Struct.new(:content, :current_line_spaces, :new_line_spaces)
+
+ class MockIO
+ def initialize(params, &assertion)
+ @params = params
+ @assertion = assertion
+ end
+
+ def auto_indent(&block)
+ result = block.call(*@params)
+ @assertion.call(result)
+ end
+ end
+
+ def assert_indenting(lines, correct_space_count, add_new_line)
+ lines = lines + [""] if add_new_line
+ last_line_index = lines.length - 1
+ byte_pointer = lines.last.length
+
+ ruby_lex = RubyLex.new()
+ io = MockIO.new([lines, last_line_index, byte_pointer, add_new_line]) do |auto_indent|
+ error_message = "Calculated the wrong number of spaces for:\n #{lines.join("\n")}"
+ assert_equal(correct_space_count, auto_indent, error_message)
+ end
+ ruby_lex.set_input(io)
+ context = OpenStruct.new(auto_indent_mode: true)
+ ruby_lex.set_auto_indent(context)
+ end
+
+ def test_auto_indent
+ input_with_correct_indents = [
+ Row.new(%q(def each_top_level_statement), nil, 2),
+ Row.new(%q( initialize_input), nil, 2),
+ Row.new(%q( catch(:TERM_INPUT) do), nil, 4),
+ Row.new(%q( loop do), nil, 6),
+ Row.new(%q( begin), nil, 8),
+ Row.new(%q( prompt), nil, 8),
+ Row.new(%q( unless l = lex), nil, 10),
+ Row.new(%q( throw :TERM_INPUT if @line == ''), nil, 10),
+ Row.new(%q( else), 8, 10),
+ Row.new(%q( @line_no += l.count("\n")), nil, 10),
+ Row.new(%q( next if l == "\n"), nil, 10),
+ Row.new(%q( @line.concat l), nil, 10),
+ Row.new(%q( if @code_block_open or @ltype or @continue or @indent > 0), nil, 12),
+ Row.new(%q( next), nil, 12),
+ Row.new(%q( end), 10, 10),
+ Row.new(%q( end), 8, 8),
+ Row.new(%q( if @line != "\n"), nil, 10),
+ Row.new(%q( @line.force_encoding(@io.encoding)), nil, 10),
+ Row.new(%q( yield @line, @exp_line_no), nil, 10),
+ Row.new(%q( end), 8, 8),
+ Row.new(%q( break if @io.eof?), nil, 8),
+ Row.new(%q( @line = ''), nil, 8),
+ Row.new(%q( @exp_line_no = @line_no), nil, 8),
+ Row.new(%q( ), nil, 8),
+ Row.new(%q( @indent = 0), nil, 8),
+ Row.new(%q( rescue TerminateLineInput), 6, 8),
+ Row.new(%q( initialize_input), nil, 8),
+ Row.new(%q( prompt), nil, 8),
+ Row.new(%q( end), 6, 6),
+ Row.new(%q( end), 4, 4),
+ Row.new(%q( end), 2, 2),
+ Row.new(%q(end), 0, 0),
+ ]
+
+ lines = []
+ input_with_correct_indents.each do |row|
+ lines << row.content
+ assert_indenting(lines, row.current_line_spaces, false)
+ assert_indenting(lines, row.new_line_spaces, true)
+ end
+ end
+
+ def test_braces_on_their_own_line
+ input_with_correct_indents = [
+ Row.new(%q(if true), nil, 2),
+ Row.new(%q( [), nil, 4),
+ Row.new(%q( ]), 2, 2),
+ Row.new(%q(end), 0, 0),
+ ]
+
+ lines = []
+ input_with_correct_indents.each do |row|
+ lines << row.content
+ assert_indenting(lines, row.current_line_spaces, false)
+ assert_indenting(lines, row.new_line_spaces, true)
+ end
+ end
+
+ def test_multiple_braces_in_a_line
+ input_with_correct_indents = [
+ Row.new(%q([[[), nil, 6),
+ Row.new(%q( ]), 4, 4),
+ Row.new(%q( ]), 2, 2),
+ Row.new(%q(]), 0, 0),
+ Row.new(%q([<<FOO]), nil, 0),
+ Row.new(%q(hello), nil, 0),
+ Row.new(%q(FOO), nil, 0),
+ ]
+
+ lines = []
+ input_with_correct_indents.each do |row|
+ lines << row.content
+ assert_indenting(lines, row.current_line_spaces, false)
+ assert_indenting(lines, row.new_line_spaces, true)
+ end
+ end
+
+ def test_a_closed_brace_and_not_closed_brace_in_a_line
+ input_with_correct_indents = [
+ Row.new(%q(p() {), nil, 2),
+ Row.new(%q(}), 0, 0),
+ ]
+
+ lines = []
+ input_with_correct_indents.each do |row|
+ lines << row.content
+ assert_indenting(lines, row.current_line_spaces, false)
+ assert_indenting(lines, row.new_line_spaces, true)
+ end
+ end
+ end
+end
diff --git a/test/readline/helper.rb b/test/readline/helper.rb
index ee157722f1..1b80327b57 100644
--- a/test/readline/helper.rb
+++ b/test/readline/helper.rb
@@ -3,18 +3,22 @@ begin
ReadlineSo = Readline
rescue LoadError
end
-require "reline"
def use_ext_readline # Use ext/readline as Readline
Object.send(:remove_const, :Readline) if Object.const_defined?(:Readline)
Object.const_set(:Readline, ReadlineSo)
end
-def use_lib_reline # Use lib/reline as Readline
- Reline.send(:remove_const, 'IOGate') if Reline.const_defined?('IOGate')
- Reline.const_set('IOGate', Reline::GeneralIO)
- Reline.send(:core).config.instance_variable_set(:@test_mode, true)
- Reline.send(:core).config.reset
- Object.send(:remove_const, :Readline) if Object.const_defined?(:Readline)
- Object.const_set(:Readline, Reline)
+begin
+ require "reline"
+rescue LoadError
+else
+ def use_lib_reline # Use lib/reline as Readline
+ Reline.send(:remove_const, 'IOGate') if Reline.const_defined?('IOGate')
+ Reline.const_set('IOGate', Reline::GeneralIO)
+ Reline.send(:core).config.instance_variable_set(:@test_mode, true)
+ Reline.send(:core).config.reset
+ Object.send(:remove_const, :Readline) if Object.const_defined?(:Readline)
+ Object.const_set(:Readline, Reline)
+ end
end
diff --git a/test/readline/test_readline.rb b/test/readline/test_readline.rb
index be9ac24d25..7ac2212719 100644
--- a/test/readline/test_readline.rb
+++ b/test/readline/test_readline.rb
@@ -21,13 +21,16 @@ module BasetestReadline
Readline.point = 0
rescue NotImplementedError
end
+ Readline.special_prefixes = ""
+ Readline.completion_append_character = nil
Readline.input = nil
Readline.output = nil
SAVED_ENV.each_with_index {|k, i| ENV[k] = @saved_env[i] }
end
def test_readline
- skip "Skip Editline" if /EditLine/n.match(Readline::VERSION)
+ Readline::HISTORY.clear
+ omit "Skip Editline" if /EditLine/n.match(Readline::VERSION)
with_temp_stdio do |stdin, stdout|
stdin.write("hello\n")
stdin.close
@@ -45,7 +48,7 @@ module BasetestReadline
# Work around lack of SecurityError in Reline
# test mode with tainted prompt.
# Also skip test on Ruby 2.7+, where $SAFE/taint is deprecated.
- if RUBY_VERSION < '2.7' && !kind_of?(TestRelineAsReadline)
+ if RUBY_VERSION < '2.7' && defined?(TestRelineAsReadline) && !kind_of?(TestRelineAsReadline)
begin
Thread.start {
$SAFE = 1
@@ -65,8 +68,8 @@ module BasetestReadline
# line_buffer
# point
def test_line_buffer__point
- skip "Skip Editline" if /EditLine/n.match(Readline::VERSION)
- skip "GNU Readline has special behaviors" if defined?(Reline) and Readline == Reline
+ omit "Skip Editline" if /EditLine/n.match(Readline::VERSION)
+ omit "GNU Readline has special behaviors" if defined?(Reline) and Readline == Reline
begin
Readline.line_buffer
Readline.point
@@ -154,7 +157,7 @@ module BasetestReadline
end
def test_completion_proc_empty_result
- skip "Skip Editline" if /EditLine/n.match(Readline::VERSION)
+ omit "Skip Editline" if /EditLine/n.match(Readline::VERSION)
with_temp_stdio do |stdin, stdout|
stdin.write("first\t")
stdin.flush
@@ -233,12 +236,12 @@ module BasetestReadline
end
def test_completion_encoding
- skip "Skip Editline" if /EditLine/n.match(Readline::VERSION)
+ omit "Skip Editline" if /EditLine/n.match(Readline::VERSION)
bug5941 = '[Bug #5941]'
append_character = Readline.completion_append_character
Readline.completion_append_character = ""
completion_case_fold = Readline.completion_case_fold
- locale = Encoding.find("locale")
+ locale = get_default_internal_encoding
if locale == Encoding::UTF_8
enc1 = Encoding::EUC_JP
else
@@ -261,7 +264,7 @@ module BasetestReadline
end or
begin
return if assert_under_utf8
- skip("missing test for locale #{locale.name}")
+ omit("missing test for locale #{locale.name}")
end
expected = results[0][0...1]
Readline.completion_case_fold = false
@@ -285,32 +288,6 @@ module BasetestReadline
# filename_quote_characters
# special_prefixes
def test_some_characters_methods
- method_names = [
- "basic_word_break_characters",
- "completer_word_break_characters",
- "basic_quote_characters",
- "completer_quote_characters",
- "filename_quote_characters",
- "special_prefixes",
- ]
- method_names.each do |method_name|
- begin
- begin
- enc = get_default_internal_encoding
- saved = Readline.send(method_name.to_sym)
- expecteds = [" ", " .,|\t", ""]
- expecteds.each do |e|
- Readline.send((method_name + "=").to_sym, e)
- res = Readline.send(method_name.to_sym)
- assert_equal(e, res)
- assert_equal(enc, res.encoding, "Readline.#{method_name} should be #{enc.name}")
- end
- ensure
- Readline.send((method_name + "=").to_sym, saved) if saved
- end
- rescue NotImplementedError
- end
- end
end
def test_closed_outstream
@@ -335,7 +312,7 @@ module BasetestReadline
end
def test_point
- skip "Skip Editline" if /EditLine/n.match(Readline::VERSION)
+ omit "Skip Editline" if /EditLine/n.match(Readline::VERSION)
assert_equal(0, Readline.point)
Readline.insert_text('12345')
assert_equal(5, Readline.point)
@@ -350,7 +327,7 @@ module BasetestReadline
end
def test_insert_text
- skip "Skip Editline" if /EditLine/n.match(Readline::VERSION)
+ omit "Skip Editline" if /EditLine/n.match(Readline::VERSION)
str = "test_insert_text"
assert_equal(0, Readline.point)
assert_equal(Readline, Readline.insert_text(str))
@@ -381,7 +358,7 @@ module BasetestReadline
end
def test_delete_text
- skip "Skip Editline" if /EditLine/n.match(Readline::VERSION)
+ omit "Skip Editline" if /EditLine/n.match(Readline::VERSION)
str = "test_insert_text"
assert_equal(0, Readline.point)
assert_equal(Readline, Readline.insert_text(str))
@@ -401,7 +378,7 @@ module BasetestReadline
end
def test_modify_text_in_pre_input_hook
- skip "Skip Editline" if /EditLine/n.match(Readline::VERSION)
+ omit "Skip Editline" if /EditLine/n.match(Readline::VERSION)
with_temp_stdio {|stdin, stdout|
begin
stdin.write("world\n")
@@ -432,9 +409,10 @@ module BasetestReadline
end
def test_input_metachar
- skip "Skip Editline" if /EditLine/n.match(Readline::VERSION)
- skip("Won't pass on mingw w/readline 7.0.005 [ruby-core:45682]") if mingw?
- skip 'Needs GNU Readline 6 or later' if windows? and defined?(TestReadline) and kind_of?(TestReadline) and Readline::VERSION < '6.0'
+ omit "Skip Editline" if /EditLine/n.match(Readline::VERSION)
+ # test will pass on Windows reline, but not readline
+ omit "Won't pass on mingw readline.so using 8.0.001" if /mingw/ =~ RUBY_PLATFORM and defined?(TestReadline) and kind_of?(TestReadline)
+ omit 'Needs GNU Readline 6 or later' if /mswin|mingw/ =~ RUBY_PLATFORM and defined?(TestReadline) and kind_of?(TestReadline) and Readline::VERSION < '6.0'
bug6601 = '[ruby-core:45682]'
Readline::HISTORY << "hello"
wo = nil
@@ -451,10 +429,10 @@ module BasetestReadline
end
def test_input_metachar_multibyte
- skip "Skip Editline" if /EditLine/n.match(Readline::VERSION)
+ omit "Skip Editline" if /EditLine/n.match(Readline::VERSION)
unless Encoding.find("locale") == Encoding::UTF_8
return if assert_under_utf8
- skip 'this test needs UTF-8 locale'
+ omit 'this test needs UTF-8 locale'
end
bug6602 = '[ruby-core:45683]'
Readline::HISTORY << "\u3042\u3093"
@@ -481,7 +459,8 @@ module BasetestReadline
end
def test_refresh_line
- skip "Only when refresh_line exists" unless Readline.respond_to?(:refresh_line)
+ omit "Only when refresh_line exists" unless Readline.respond_to?(:refresh_line)
+ omit unless respond_to?(:assert_ruby_status)
bug6232 = '[ruby-core:43957] [Bug #6232] refresh_line after set_screen_size'
with_temp_stdio do |stdin, stdout|
replace_stdio(stdin.path, stdout.path) do
@@ -508,83 +487,98 @@ module BasetestReadline
def test_using_quoting_detection_proc
saved_completer_quote_characters = Readline.completer_quote_characters
saved_completer_word_break_characters = Readline.completer_word_break_characters
+
+ # skip if previous value is nil because Readline... = nil is not allowed.
+ skip unless saved_completer_quote_characters
+ skip unless saved_completer_word_break_characters
+
return unless Readline.respond_to?(:quoting_detection_proc=)
- passed_text = nil
- line = nil
+ begin
+ passed_text = nil
+ line = nil
- with_temp_stdio do |stdin, stdout|
- replace_stdio(stdin.path, stdout.path) do
- Readline.completion_proc = ->(text) do
- passed_text = text
- ['completion'].map { |i|
- i.encode(Encoding.default_external)
- }
- end
- Readline.completer_quote_characters = '\'"'
- Readline.completer_word_break_characters = ' '
- Readline.quoting_detection_proc = ->(text, index) do
- index > 0 && text[index-1] == '\\'
- end
+ with_temp_stdio do |stdin, stdout|
+ replace_stdio(stdin.path, stdout.path) do
+ Readline.completion_proc = ->(text) do
+ passed_text = text
+ ['completion'].map { |i|
+ i.encode(Encoding.default_external)
+ }
+ end
+ Readline.completer_quote_characters = '\'"'
+ Readline.completer_word_break_characters = ' '
+ Readline.quoting_detection_proc = ->(text, index) do
+ index > 0 && text[index-1] == '\\'
+ end
- stdin.write("first second\\ third\t")
- stdin.flush
- line = Readline.readline('> ', false)
+ stdin.write("first second\\ third\t")
+ stdin.flush
+ line = Readline.readline('> ', false)
+ end
end
- end
- assert_equal('second\\ third', passed_text)
- assert_equal('first completion', line.chomp(' '))
- ensure
- Readline.completer_quote_characters = saved_completer_quote_characters
- Readline.completer_word_break_characters = saved_completer_word_break_characters
+ assert_equal('second\\ third', passed_text)
+ assert_equal('first completion', line.chomp(' '))
+ ensure
+ Readline.completer_quote_characters = saved_completer_quote_characters
+ Readline.completer_word_break_characters = saved_completer_word_break_characters
+ end
end
def test_using_quoting_detection_proc_with_multibyte_input
+ Readline.completion_append_character = nil
saved_completer_quote_characters = Readline.completer_quote_characters
saved_completer_word_break_characters = Readline.completer_word_break_characters
+
+ # skip if previous value is nil because Readline... = nil is not allowed.
+ skip unless saved_completer_quote_characters
+ skip unless saved_completer_word_break_characters
+
return unless Readline.respond_to?(:quoting_detection_proc=)
- unless Encoding.find("locale") == Encoding::UTF_8
+ unless get_default_internal_encoding == Encoding::UTF_8
return if assert_under_utf8
- skip 'this test needs UTF-8 locale'
+ omit 'this test needs UTF-8 locale'
end
- passed_text = nil
- escaped_char_indexes = []
- line = nil
+ begin
+ passed_text = nil
+ escaped_char_indexes = []
+ line = nil
- with_temp_stdio do |stdin, stdout|
- replace_stdio(stdin.path, stdout.path) do
- Readline.completion_proc = ->(text) do
- passed_text = text
- ['completion'].map { |i|
- i.encode(Encoding.default_external)
- }
- end
- Readline.completer_quote_characters = '\'"'
- Readline.completer_word_break_characters = ' '
- Readline.quoting_detection_proc = ->(text, index) do
- escaped = index > 0 && text[index-1] == '\\'
- escaped_char_indexes << index if escaped
- escaped
- end
+ with_temp_stdio do |stdin, stdout|
+ replace_stdio(stdin.path, stdout.path) do
+ Readline.completion_proc = ->(text) do
+ passed_text = text
+ ['completion'].map { |i|
+ i.encode(Encoding.default_external)
+ }
+ end
+ Readline.completer_quote_characters = '\'"'
+ Readline.completer_word_break_characters = ' '
+ Readline.quoting_detection_proc = ->(text, index) do
+ escaped = index > 0 && text[index-1] == '\\'
+ escaped_char_indexes << index if escaped
+ escaped
+ end
- stdin.write("\u3042\u3093 second\\ third\t")
- stdin.flush
- line = Readline.readline('> ', false)
+ stdin.write("\u3042\u3093 second\\ third\t")
+ stdin.flush
+ line = Readline.readline('> ', false)
+ end
end
- end
- assert_equal([10], escaped_char_indexes)
- assert_equal('second\\ third', passed_text)
- assert_equal("\u3042\u3093 completion", line)
- ensure
- Readline.completer_quote_characters = saved_completer_quote_characters
- Readline.completer_word_break_characters = saved_completer_word_break_characters
+ assert_equal([10], escaped_char_indexes)
+ assert_equal('second\\ third', passed_text)
+ assert_equal("\u3042\u3093 completion#{Readline.completion_append_character}", line)
+ ensure
+ Readline.completer_quote_characters = saved_completer_quote_characters
+ Readline.completer_word_break_characters = saved_completer_word_break_characters
+ end
end
def test_simple_completion
- skip "Skip Editline" if /EditLine/n.match(Readline::VERSION)
+ omit "Skip Editline" if /EditLine/n.match(Readline::VERSION)
line = nil
@@ -594,7 +588,7 @@ module BasetestReadline
Readline.output = null
Readline.completion_proc = ->(text) do
['abcde', 'abc12'].map { |i|
- i.encode(Encoding.default_external)
+ i.encode(get_default_internal_encoding)
}
end
w.write("a\t\n")
@@ -607,8 +601,8 @@ module BasetestReadline
end
def test_completion_with_completion_append_character
- skip "Skip Editline" if /EditLine/n.match(Readline::VERSION)
- skip "Readline.completion_append_character is not implemented" unless Readline.respond_to?(:completion_append_character=)
+ omit "Skip Editline" if /EditLine/n.match(Readline::VERSION)
+ omit "Readline.completion_append_character is not implemented" unless Readline.respond_to?(:completion_append_character=)
line = nil
append_character = Readline.completion_append_character
@@ -619,7 +613,7 @@ module BasetestReadline
Readline.completion_append_character = '!'
Readline.completion_proc = ->(text) do
['abcde'].map { |i|
- i.encode(Encoding.default_external)
+ i.encode(get_default_internal_encoding)
}
end
w.write("a\t\n")
@@ -681,9 +675,9 @@ module BasetestReadline
return unless Readline.respond_to?(:completion_quote_character)
if /solaris/i =~ RUBY_PLATFORM
# http://rubyci.s3.amazonaws.com/solaris11s-sunc/ruby-trunk/log/20181228T102505Z.fail.html.gz
- skip 'This test does not succeed on Oracle Developer Studio for now'
+ omit 'This test does not succeed on Oracle Developer Studio for now'
end
- skip 'Needs GNU Readline 6 or later' if windows? and defined?(TestReadline) and kind_of?(TestReadline) and Readline::VERSION < '6.0'
+ omit 'Needs GNU Readline 6 or later' if /mswin|mingw/ =~ RUBY_PLATFORM and defined?(TestReadline) and kind_of?(TestReadline) and Readline::VERSION < '6.0'
Readline.completion_proc = -> (_) { [] }
Readline.completer_quote_characters = "'\""
@@ -730,7 +724,7 @@ module BasetestReadline
Tempfile.create("test_readline_stdin") {|stdin|
Tempfile.create("test_readline_stdout") {|stdout|
yield stdin, stdout
- if windows?
+ if /mswin|mingw/ =~ RUBY_PLATFORM
# needed since readline holds refs to tempfiles, can't delete on Windows
Readline.input = STDIN
Readline.output = STDOUT
@@ -766,7 +760,7 @@ module BasetestReadline
return false if ENV['LC_ALL'] == 'UTF-8'
loc = caller_locations(1, 1)[0].base_label.to_s
assert_separately([{"LC_ALL"=>"UTF-8"}, "-r", __FILE__], <<SRC)
-#skip "test \#{ENV['LC_ALL']}"
+#omit "test \#{ENV['LC_ALL']}"
#{self.class.name}.new(#{loc.dump}).run(Test::Unit::Runner.new)
SRC
return true
@@ -780,7 +774,7 @@ class TestReadline < Test::Unit::TestCase
use_ext_readline
super
end
-end if defined?(ReadlineSo)
+end if defined?(ReadlineSo) && ENV["TEST_READLINE_OR_RELINE"] != "Reline"
class TestRelineAsReadline < Test::Unit::TestCase
include BasetestReadline
@@ -789,4 +783,12 @@ class TestRelineAsReadline < Test::Unit::TestCase
use_lib_reline
super
end
-end
+
+ def get_default_internal_encoding
+ if RUBY_PLATFORM =~ /mswin|mingw/
+ Encoding.default_internal || Encoding::UTF_8
+ else
+ super
+ end
+ end
+end if defined?(Reline) && ENV["TEST_READLINE_OR_RELINE"] != "Readline"
diff --git a/test/readline/test_readline_history.rb b/test/readline/test_readline_history.rb
index 34ab745eb0..f4e93fa1b6 100644
--- a/test/readline/test_readline_history.rb
+++ b/test/readline/test_readline_history.rb
@@ -260,6 +260,7 @@ class TestReadlineHistory < Test::Unit::TestCase
super
end
end if defined?(::ReadlineSo) && defined?(::ReadlineSo::HISTORY) &&
+ ENV["TEST_READLINE_OR_RELINE"] != "Reline" &&
(
begin
ReadlineSo::HISTORY.clear
@@ -275,4 +276,12 @@ class TestRelineAsReadlineHistory < Test::Unit::TestCase
use_lib_reline
super
end
-end
+
+ def get_default_internal_encoding
+ if RUBY_PLATFORM =~ /mswin|mingw/
+ Encoding.default_internal || Encoding::UTF_8
+ else
+ super
+ end
+ end
+end if defined?(Reline) && ENV["TEST_READLINE_OR_RELINE"] != "Readline"
diff --git a/test/reline/test_config.rb b/test/reline/test_config.rb
index dd5142d587..cecb364f89 100644
--- a/test/reline/test_config.rb
+++ b/test/reline/test_config.rb
@@ -195,4 +195,24 @@ class Reline::Config::Test < Reline::TestCase
expected = { 'ef'.bytes => 'EF'.bytes, 'gh'.bytes => 'GH'.bytes }
assert_equal expected, @config.key_bindings
end
+
+ def test_history_size
+ @config.read_lines(<<~LINES.lines)
+ set history-size 5000
+ LINES
+
+ assert_equal 5000, @config.instance_variable_get(:@history_size)
+ history = Reline::History.new(@config)
+ history << "a\n"
+ assert_equal 1, history.size
+ end
+
+ def test_empty_inputrc_env
+ inputrc_backup = ENV['INPUTRC']
+ ENV['INPUTRC'] = ''
+ assert_nothing_raised do
+ @config.read
+ end
+ ENV['INPUTRC'] = inputrc_backup
+ end
end
diff --git a/test/reline/test_history.rb b/test/reline/test_history.rb
index 260b6e8528..189f2db86d 100644
--- a/test/reline/test_history.rb
+++ b/test/reline/test_history.rb
@@ -2,6 +2,10 @@ require_relative 'helper'
require "reline/history"
class Reline::History::Test < Reline::TestCase
+ def setup
+ Reline.send(:test_mode)
+ end
+
def test_ancestors
assert_equal(Reline::History.ancestors.include?(Array), true)
end
@@ -268,6 +272,10 @@ class Reline::History::Test < Reline::TestCase
end
def get_default_internal_encoding
- return Encoding.default_internal || Encoding.find("locale")
+ if RUBY_PLATFORM =~ /mswin|mingw/
+ Encoding.default_internal || Encoding::UTF_8
+ else
+ Encoding.default_internal || Encoding.find("locale")
+ end
end
end
diff --git a/test/reline/test_key_actor_emacs.rb b/test/reline/test_key_actor_emacs.rb
index 97ff654506..c16212c626 100644
--- a/test/reline/test_key_actor_emacs.rb
+++ b/test/reline/test_key_actor_emacs.rb
@@ -8,8 +8,8 @@ class Reline::KeyActor::Emacs::Test < Reline::TestCase
Reline::HISTORY.instance_variable_set(:@config, @config)
Reline::HISTORY.clear
@encoding = (RELINE_TEST_ENCODING rescue Encoding.default_external)
- @line_editor = Reline::LineEditor.new(@config)
- @line_editor.reset(@prompt, @encoding)
+ @line_editor = Reline::LineEditor.new(@config, @encoding)
+ @line_editor.reset(@prompt, encoding: @encoding)
end
def test_ed_insert_one
@@ -1325,6 +1325,68 @@ class Reline::KeyActor::Emacs::Test < Reline::TestCase
assert_line('foo_ba')
end
+ def test_completion_with_indent
+ @line_editor.completion_proc = proc { |word|
+ %w{
+ foo_foo
+ foo_bar
+ foo_baz
+ qux
+ }.map { |i|
+ i.encode(@encoding)
+ }
+ }
+ input_keys(' fo')
+ assert_byte_pointer_size(' fo')
+ assert_cursor(4)
+ assert_cursor_max(4)
+ 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(6)
+ assert_cursor_max(6)
+ 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(6)
+ assert_cursor_max(6)
+ assert_line(' foo_')
+ 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_byte_pointer_size(' "".fo')
+ assert_cursor(7)
+ assert_cursor_max(7)
+ 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(9)
+ assert_cursor_max(9)
+ 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(9)
+ assert_cursor_max(9)
+ assert_line(' "".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{
@@ -1834,6 +1896,15 @@ class Reline::KeyActor::Emacs::Test < Reline::TestCase
assert_equal([0, 0], @line_editor.instance_variable_get(:@mark_pointer))
end
+ def test_modify_lines_with_wrong_rs
+ original_global_slash = $/
+ $/ = 'b'
+ @line_editor.output_modifier_proc = proc { |output| Reline::Unicode.escape_for_print(output) }
+ input_keys("abcdef\n")
+ assert_equal(['abcdef'], @line_editor.__send__(:modify_lines, @line_editor.whole_lines))
+ $/ = original_global_slash
+ end
+
=begin # TODO: move KeyStroke instance from Reline to LineEditor
def test_key_delete
input_keys('ab')
diff --git a/test/reline/test_key_actor_vi.rb b/test/reline/test_key_actor_vi.rb
index 1ea160b6b5..c6337baea7 100644
--- a/test/reline/test_key_actor_vi.rb
+++ b/test/reline/test_key_actor_vi.rb
@@ -9,8 +9,8 @@ class Reline::KeyActor::ViInsert::Test < Reline::TestCase
set editing-mode vi
LINES
@encoding = (RELINE_TEST_ENCODING rescue Encoding.default_external)
- @line_editor = Reline::LineEditor.new(@config)
- @line_editor.reset(@prompt, @encoding)
+ @line_editor = Reline::LineEditor.new(@config, @encoding)
+ @line_editor.reset(@prompt, encoding: @encoding)
end
def test_vi_command_mode
@@ -24,6 +24,74 @@ class Reline::KeyActor::ViInsert::Test < Reline::TestCase
assert_line('abc')
end
+ def test_vi_insert
+ assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
+ input_keys('i')
+ assert_line('i')
+ assert_cursor(1)
+ assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
+ input_keys("\C-[")
+ assert_line('i')
+ assert_cursor(0)
+ assert_instance_of(Reline::KeyActor::ViCommand, @config.editing_mode)
+ input_keys('i')
+ assert_line('i')
+ assert_cursor(0)
+ assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
+ end
+
+ def test_vi_add
+ assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
+ input_keys('a')
+ assert_line('a')
+ assert_cursor(1)
+ assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
+ input_keys("\C-[")
+ assert_line('a')
+ assert_cursor(0)
+ assert_instance_of(Reline::KeyActor::ViCommand, @config.editing_mode)
+ input_keys('a')
+ assert_line('a')
+ assert_cursor(1)
+ assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
+ end
+
+ def test_vi_insert_at_bol
+ input_keys('I')
+ assert_line('I')
+ assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
+ input_keys("12345\C-[hh")
+ assert_line('I12345')
+ assert_byte_pointer_size('I12')
+ assert_cursor(3)
+ assert_cursor_max(6)
+ assert_instance_of(Reline::KeyActor::ViCommand, @config.editing_mode)
+ input_keys('I')
+ assert_line('I12345')
+ assert_byte_pointer_size('')
+ assert_cursor(0)
+ assert_cursor_max(6)
+ assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
+ end
+
+ def test_vi_add_at_eol
+ input_keys('A')
+ assert_line('A')
+ assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
+ input_keys("12345\C-[hh")
+ assert_line('A12345')
+ assert_byte_pointer_size('A12')
+ assert_cursor(3)
+ assert_cursor_max(6)
+ assert_instance_of(Reline::KeyActor::ViCommand, @config.editing_mode)
+ input_keys('A')
+ assert_line('A12345')
+ assert_byte_pointer_size('A12345')
+ assert_cursor(6)
+ assert_cursor_max(6)
+ assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
+ end
+
def test_ed_insert_one
input_keys('a')
assert_line('a')
@@ -565,6 +633,60 @@ class Reline::KeyActor::ViInsert::Test < Reline::TestCase
assert_cursor_max(6)
end
+ def test_vi_to_next_char
+ input_keys("abcdef\C-[0")
+ assert_line('abcdef')
+ assert_byte_pointer_size('')
+ assert_cursor(0)
+ assert_cursor_max(6)
+ input_keys('tz')
+ assert_line('abcdef')
+ assert_byte_pointer_size('')
+ assert_cursor(0)
+ assert_cursor_max(6)
+ input_keys('te')
+ assert_line('abcdef')
+ assert_byte_pointer_size('abc')
+ assert_cursor(3)
+ assert_cursor_max(6)
+ end
+
+ def test_vi_prev_char
+ input_keys("abcdef\C-[")
+ assert_line('abcdef')
+ assert_byte_pointer_size('abcde')
+ assert_cursor(5)
+ assert_cursor_max(6)
+ input_keys('Fz')
+ assert_line('abcdef')
+ assert_byte_pointer_size('abcde')
+ assert_cursor(5)
+ assert_cursor_max(6)
+ input_keys('Fa')
+ assert_line('abcdef')
+ assert_byte_pointer_size('')
+ assert_cursor(0)
+ assert_cursor_max(6)
+ end
+
+ def test_vi_to_prev_char
+ input_keys("abcdef\C-[")
+ assert_line('abcdef')
+ assert_byte_pointer_size('abcde')
+ assert_cursor(5)
+ assert_cursor_max(6)
+ input_keys('Tz')
+ assert_line('abcdef')
+ assert_byte_pointer_size('abcde')
+ assert_cursor(5)
+ assert_cursor_max(6)
+ input_keys('Ta')
+ assert_line('abcdef')
+ assert_byte_pointer_size('a')
+ assert_cursor(1)
+ assert_cursor_max(6)
+ end
+
def test_vi_delete_next_char
input_keys("abc\C-[h")
assert_byte_pointer_size('a')
@@ -1092,4 +1214,27 @@ class Reline::KeyActor::ViInsert::Test < Reline::TestCase
assert_cursor_max(11)
assert_line('aaa ddd eee')
end
+
+ def test_vi_change_meta
+ input_keys("aaa bbb ccc ddd eee\C-[02w")
+ assert_byte_pointer_size('aaa bbb ')
+ assert_cursor(8)
+ assert_cursor_max(19)
+ assert_line('aaa bbb ccc ddd eee')
+ input_keys('cwaiueo ')
+ assert_byte_pointer_size('aaa bbb aiueo ')
+ assert_cursor(14)
+ assert_cursor_max(21)
+ assert_line('aaa bbb aiueo ddd eee')
+ input_keys("\C-[")
+ assert_byte_pointer_size('aaa bbb aiueo')
+ assert_cursor(13)
+ assert_cursor_max(21)
+ assert_line('aaa bbb aiueo ddd eee')
+ input_keys('cb')
+ assert_byte_pointer_size('aaa bbb ')
+ assert_cursor(8)
+ assert_cursor_max(16)
+ assert_line('aaa bbb ddd eee')
+ end
end
diff --git a/test/reline/test_macro.rb b/test/reline/test_macro.rb
index c69b50416a..b97de88a97 100644
--- a/test/reline/test_macro.rb
+++ b/test/reline/test_macro.rb
@@ -3,7 +3,8 @@ require_relative 'helper'
class Reline::MacroTest < Reline::TestCase
def setup
@config = Reline::Config.new
- @line_editor = Reline::LineEditor.new(@config)
+ @encoding = (RELINE_TEST_ENCODING rescue Encoding.default_external)
+ @line_editor = Reline::LineEditor.new(@config, @encoding)
@line_editor.instance_variable_set(:@screen_size, [24, 80])
@output = @line_editor.output = File.open(IO::NULL, "w")
end
diff --git a/test/reline/test_reline.rb b/test/reline/test_reline.rb
index 274f1aa6ba..0de2462a08 100644
--- a/test/reline/test_reline.rb
+++ b/test/reline/test_reline.rb
@@ -21,15 +21,15 @@ class Reline::Test < Reline::TestCase
Reline.completion_append_character = "a".encode(Encoding::ASCII)
assert_equal("a", Reline.completion_append_character)
- assert_equal(Encoding::default_external, Reline.completion_append_character.encoding)
+ assert_equal(get_reline_encoding, Reline.completion_append_character.encoding)
Reline.completion_append_character = "ba".encode(Encoding::ASCII)
assert_equal("b", Reline.completion_append_character)
- assert_equal(Encoding::default_external, Reline.completion_append_character.encoding)
+ assert_equal(get_reline_encoding, Reline.completion_append_character.encoding)
Reline.completion_append_character = "cba".encode(Encoding::ASCII)
assert_equal("c", Reline.completion_append_character)
- assert_equal(Encoding::default_external, Reline.completion_append_character.encoding)
+ assert_equal(get_reline_encoding, Reline.completion_append_character.encoding)
Reline.completion_append_character = nil
assert_equal(nil, Reline.completion_append_character)
@@ -40,7 +40,7 @@ class Reline::Test < Reline::TestCase
Reline.basic_word_break_characters = "[".encode(Encoding::ASCII)
assert_equal("[", Reline.basic_word_break_characters)
- assert_equal(Encoding::default_external, Reline.basic_word_break_characters.encoding)
+ assert_equal(get_reline_encoding, Reline.basic_word_break_characters.encoding)
end
def test_completer_word_break_characters
@@ -48,7 +48,7 @@ class Reline::Test < Reline::TestCase
Reline.completer_word_break_characters = "[".encode(Encoding::ASCII)
assert_equal("[", Reline.completer_word_break_characters)
- assert_equal(Encoding::default_external, Reline.completer_word_break_characters.encoding)
+ assert_equal(get_reline_encoding, Reline.completer_word_break_characters.encoding)
end
def test_basic_quote_characters
@@ -56,7 +56,7 @@ class Reline::Test < Reline::TestCase
Reline.basic_quote_characters = "`".encode(Encoding::ASCII)
assert_equal("`", Reline.basic_quote_characters)
- assert_equal(Encoding::default_external, Reline.basic_quote_characters.encoding)
+ assert_equal(get_reline_encoding, Reline.basic_quote_characters.encoding)
end
def test_completer_quote_characters
@@ -64,7 +64,7 @@ class Reline::Test < Reline::TestCase
Reline.completer_quote_characters = "`".encode(Encoding::ASCII)
assert_equal("`", Reline.completer_quote_characters)
- assert_equal(Encoding::default_external, Reline.completer_quote_characters.encoding)
+ assert_equal(get_reline_encoding, Reline.completer_quote_characters.encoding)
end
def test_filename_quote_characters
@@ -72,7 +72,7 @@ class Reline::Test < Reline::TestCase
Reline.filename_quote_characters = "\'".encode(Encoding::ASCII)
assert_equal("\'", Reline.filename_quote_characters)
- assert_equal(Encoding::default_external, Reline.filename_quote_characters.encoding)
+ assert_equal(get_reline_encoding, Reline.filename_quote_characters.encoding)
end
def test_special_prefixes
@@ -80,7 +80,7 @@ class Reline::Test < Reline::TestCase
Reline.special_prefixes = "\'".encode(Encoding::ASCII)
assert_equal("\'", Reline.special_prefixes)
- assert_equal(Encoding::default_external, Reline.special_prefixes.encoding)
+ assert_equal(get_reline_encoding, Reline.special_prefixes.encoding)
end
def test_completion_case_fold
@@ -94,7 +94,10 @@ class Reline::Test < Reline::TestCase
end
def test_completion_proc
- assert_equal(nil, Reline.completion_proc)
+ skip unless Reline.completion_proc == nil
+ # Another test can set Reline.completion_proc
+
+ # assert_equal(nil, Reline.completion_proc)
p = proc {}
Reline.completion_proc = p
@@ -267,4 +270,8 @@ class Reline::Test < Reline::TestCase
def test_may_req_ambiguous_char_width
# TODO in Reline::Core
end
+
+ def get_reline_encoding
+ RUBY_PLATFORM =~ /mswin|mingw/ ? Encoding::UTF_8 : Encoding::default_external
+ end
end
diff --git a/test/reline/test_string_processing.rb b/test/reline/test_string_processing.rb
index 4df0363848..e76fa384f2 100644
--- a/test/reline/test_string_processing.rb
+++ b/test/reline/test_string_processing.rb
@@ -7,8 +7,8 @@ class Reline::LineEditor::StringProcessingTest < Reline::TestCase
@config = Reline::Config.new
Reline::HISTORY.instance_variable_set(:@config, @config)
@encoding = (RELINE_TEST_ENCODING rescue Encoding.default_external)
- @line_editor = Reline::LineEditor.new(@config)
- @line_editor.reset(@prompt, @encoding)
+ @line_editor = Reline::LineEditor.new(@config, @encoding)
+ @line_editor.reset(@prompt, encoding: @encoding)
end
def test_calculate_width
diff --git a/test/reline/test_within_pipe.rb b/test/reline/test_within_pipe.rb
index 11c3c0e86a..46b4465f32 100644
--- a/test/reline/test_within_pipe.rb
+++ b/test/reline/test_within_pipe.rb
@@ -13,6 +13,7 @@ class Reline::WithinPipeTest < Reline::TestCase
def teardown
Reline.input = STDIN
Reline.output = STDOUT
+ Reline.point = 0
@reader.close
@writer.close
@output.close
diff --git a/test/reline/yamatanooroti/test_rendering.rb b/test/reline/yamatanooroti/test_rendering.rb
new file mode 100644
index 0000000000..4eab6661d6
--- /dev/null
+++ b/test/reline/yamatanooroti/test_rendering.rb
@@ -0,0 +1,41 @@
+require 'reline'
+
+begin
+ require 'yamatanooroti'
+
+ class Reline::TestRendering < Yamatanooroti::TestCase
+ def setup
+ inputrc_backup = ENV['INPUTRC']
+ ENV['INPUTRC'] = 'nonexistent_file'
+ start_terminal(5, 30, %w{ruby -Ilib bin/multiline_repl})
+ sleep 0.5
+ ENV['INPUTRC'] = inputrc_backup
+ end
+
+ def test_history_back
+ write(":a\n")
+ write("\C-p")
+ close
+ assert_screen(<<~EOC)
+ Multiline REPL.
+ prompt> :a
+ => :a
+ prompt> :a
+ EOC
+ end
+
+ def test_backspace
+ write(":abc\C-h\n")
+ close
+ assert_screen(<<~EOC)
+ Multiline REPL.
+ prompt> :ab
+ => :ab
+ prompt>
+ EOC
+ end
+ end
+rescue LoadError, NameError
+ # On Ruby repository, this test suit doesn't run because Ruby repo doesn't
+ # have the yamatanooroti gem.
+end
diff --git a/test/ruby/test_rubyoptions.rb b/test/ruby/test_rubyoptions.rb
index cac420422d..093720b1fc 100644
--- a/test/ruby/test_rubyoptions.rb
+++ b/test/ruby/test_rubyoptions.rb
@@ -285,7 +285,7 @@ class TestRubyOptions < Test::Unit::TestCase
/unknown encoding name - test_ruby_test_rubyoptions_foobarbazqux \(RuntimeError\)/)
if /mswin|mingw|aix|android/ =~ RUBY_PLATFORM &&
- (str = "\u3042".force_encoding(Encoding.find("locale"))).valid_encoding?
+ (str = "\u3042".force_encoding(Encoding.find("external"))).valid_encoding?
# This result depends on locale because LANG=C doesn't affect locale
# on Windows.
# On AIX, the source encoding of stdin with LANG=C is ISO-8859-1,
@@ -836,11 +836,11 @@ class TestRubyOptions < Test::Unit::TestCase
def test_command_line_glob_nonascii
bug10555 = '[ruby-dev:48752] [Bug #10555]'
name = "\u{3042}.txt"
- expected = name.encode("locale") rescue "?.txt"
+ expected = name.encode("external") rescue "?.txt"
with_tmpchdir do |dir|
open(name, "w") {}
assert_in_out_err(["-e", "puts ARGV", "?.txt"], "", [expected], [],
- bug10555, encoding: "locale")
+ bug10555, encoding: "external")
end
end
@@ -875,7 +875,7 @@ class TestRubyOptions < Test::Unit::TestCase
with_tmpchdir do |dir|
Ougai.each {|f| open(f, "w") {}}
assert_in_out_err(["-Eutf-8", "-e", "puts ARGV", "*"], "", Ougai, encoding: "utf-8")
- ougai = Ougai.map {|f| f.encode("locale", replace: "?")}
+ ougai = Ougai.map {|f| f.encode("external", replace: "?")}
assert_in_out_err(["-e", "puts ARGV", "*.txt"], "", ougai)
end
end