aboutsummaryrefslogtreecommitdiffstats
path: root/test/reline/helper.rb
diff options
context:
space:
mode:
authoraycabta <aycabta@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2019-04-21 07:08:26 +0000
committeraycabta <aycabta@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2019-04-21 07:08:26 +0000
commit221e293733d89fd9b87d966b0891076162264535 (patch)
tree0ac0659fc8b9ff1751e146551db2dc56acac0451 /test/reline/helper.rb
parentd9a01bc17a3b1097906c8751b621c9a212f29f42 (diff)
downloadruby-221e293733d89fd9b87d966b0891076162264535.tar.gz
Add test/reline/ again, I'm back
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67681 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/reline/helper.rb')
-rw-r--r--test/reline/helper.rb71
1 files changed, 71 insertions, 0 deletions
diff --git a/test/reline/helper.rb b/test/reline/helper.rb
new file mode 100644
index 0000000000..b73b5d974e
--- /dev/null
+++ b/test/reline/helper.rb
@@ -0,0 +1,71 @@
+$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
+require 'reline'
+require 'test/unit'
+
+RELINE_TEST_ENCODING =
+ if ENV['RELINE_TEST_ENCODING']
+ Encoding.find(ENV['RELINE_TEST_ENCODING'])
+ else
+ Encoding.default_external
+ end
+
+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