summaryrefslogtreecommitdiff
path: root/test/reline/helper.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/reline/helper.rb')
-rw-r--r--test/reline/helper.rb66
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