mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
IRB is improved with Reline and RDoc, take 2
This commit is contained in:
parent
87cf45a512
commit
f2cd4f4cd0
35 changed files with 8403 additions and 1141 deletions
71
test/reline/helper.rb
Normal file
71
test/reline/helper.rb
Normal file
|
|
@ -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
|
||||
Loading…
Add table
Add a link
Reference in a new issue