diff options
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 |