diff options
author | aycabta <aycabta@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-04-20 08:51:20 +0000 |
---|---|---|
committer | aycabta <aycabta@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-04-20 08:51:20 +0000 |
commit | 7f273ac6d0f05208b5b228da95205e20c0e8286c (patch) | |
tree | bfec81d78d487c6d8015f26fd6a5740cfef63d31 /test/reline/helper.rb | |
parent | 91faab7f1477c65f71aee8324cdeca7b6f19434a (diff) | |
download | ruby-7f273ac6d0f05208b5b228da95205e20c0e8286c.tar.gz |
IRB is improved with Reline and RDoc
Reline is a readline stdlib compatible library. It also supports
multiline input. IRB is improved with Reline and supports multiline.
Besides, supports showing documents when completed.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67645 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/reline/helper.rb')
-rw-r--r-- | test/reline/helper.rb | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/test/reline/helper.rb b/test/reline/helper.rb new file mode 100644 index 0000000000..610fe3c08a --- /dev/null +++ b/test/reline/helper.rb @@ -0,0 +1,66 @@ +$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__) +require 'reline' +require 'test-unit' + +RELINE_TEST_ENCODING = Encoding.find(ENV['RELINE_TEST_ENCODING']) if ENV['RELINE_TEST_ENCODING'] + +class Reline::TestCase < Test::Unit::TestCase + private def convert_str(input, options = {}, normalized = nil) + return nil if input.nil? + input.chars.map { |c| + if Reline::Unicode::EscapedChars.include?(c.ord) + c + else + c.encode(@line_editor.instance_variable_get(:@encoding), Encoding::UTF_8, options) + end + }.join + rescue Encoding::UndefinedConversionError, Encoding::InvalidByteSequenceError + input.unicode_normalize!(:nfc) + if normalized + options[:undef] = :replace + options[:replace] = '?' + end + normalized = true + retry + end + + def input_keys(input, convert = true) + input = convert_str(input) if convert + input.chars.each do |c| + if c.bytesize == 1 + eighth_bit = 0b10000000 + byte = c.bytes.first + if byte.allbits?(eighth_bit) + @line_editor.input_key("\e".ord) + byte ^= eighth_bit + end + @line_editor.input_key(byte) + else + c.bytes.each do |b| + @line_editor.input_key(b) + end + end + end + end + + def assert_line(expected) + expected = convert_str(expected) + assert_equal(expected, @line_editor.line) + end + + def assert_byte_pointer_size(expected) + expected = convert_str(expected) + byte_pointer = @line_editor.instance_variable_get(:@byte_pointer) + assert_equal( + expected.bytesize, byte_pointer, + "<#{expected.inspect}> expected but was\n<#{@line_editor.line.byteslice(0, byte_pointer).inspect}>") + end + + def assert_cursor(expected) + assert_equal(expected, @line_editor.instance_variable_get(:@cursor)) + end + + def assert_cursor_max(expected) + assert_equal(expected, @line_editor.instance_variable_get(:@cursor_max)) + end +end |