diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/io/console/test_io_console.rb | 7 | ||||
-rw-r--r-- | test/irb/test_color.rb | 2 | ||||
-rw-r--r-- | test/irb/test_completion.rb | 22 | ||||
-rw-r--r-- | test/irb/test_context.rb | 38 | ||||
-rw-r--r-- | test/irb/test_ruby_lex.rb | 130 | ||||
-rw-r--r-- | test/readline/helper.rb | 20 | ||||
-rw-r--r-- | test/readline/test_readline.rb | 220 | ||||
-rw-r--r-- | test/readline/test_readline_history.rb | 11 | ||||
-rw-r--r-- | test/reline/test_config.rb | 20 | ||||
-rw-r--r-- | test/reline/test_history.rb | 10 | ||||
-rw-r--r-- | test/reline/test_key_actor_emacs.rb | 75 | ||||
-rw-r--r-- | test/reline/test_key_actor_vi.rb | 149 | ||||
-rw-r--r-- | test/reline/test_macro.rb | 3 | ||||
-rw-r--r-- | test/reline/test_reline.rb | 27 | ||||
-rw-r--r-- | test/reline/test_string_processing.rb | 4 | ||||
-rw-r--r-- | test/reline/test_within_pipe.rb | 1 | ||||
-rw-r--r-- | test/reline/yamatanooroti/test_rendering.rb | 41 | ||||
-rw-r--r-- | test/ruby/test_rubyoptions.rb | 8 |
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 |