1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/reline/test_config.rb
2019-06-02 22:58:05 +09:00

157 lines
4.2 KiB
Ruby

require_relative 'helper'
class Reline::Config::Test < Reline::TestCase
def setup
@pwd = Dir.pwd
@tmpdir = File.join(Dir.tmpdir, "test_reline_config_#{$$}")
begin
Dir.mkdir(@tmpdir)
rescue Errno::EEXIST
FileUtils.rm_rf(@tmpdir)
Dir.mkdir(@tmpdir)
end
Dir.chdir(@tmpdir)
@config = Reline::Config.new
end
def teardown
Dir.chdir(@pwd)
FileUtils.rm_rf(@tmpdir)
@config.reset
end
def test_read_lines
@config.read_lines(<<~LINES.split(/^/))
set bell-style on
LINES
assert_equal :audible, @config.instance_variable_get(:@bell_style)
end
def test_bind_key
assert_equal ['input'.bytes, 'abcde'.bytes], @config.bind_key('"input"', '"abcde"')
end
def test_bind_key_with_macro
assert_equal ['input'.bytes, :abcde], @config.bind_key('"input"', 'abcde')
end
def test_bind_key_with_escaped_chars
key, func =
assert_equal ['input'.bytes, "\e \\ \" ' \a \b \d \f \n \r \t \v".bytes], @config.bind_key('"input"', '"\\e \\\\ \\" \\\' \\a \\b \\d \\f \\n \\r \\t \\v"')
end
def test_bind_key_with_ctrl_chars
assert_equal ['input'.bytes, "\C-h\C-h".bytes], @config.bind_key('"input"', '"\C-h\C-H"')
end
def test_bind_key_with_meta_chars
assert_equal ['input'.bytes, "\M-h\M-H".bytes], @config.bind_key('"input"', '"\M-h\M-H"')
end
def test_bind_key_with_octal_number
input = %w{i n p u t}.map(&:ord)
assert_equal [input, "\1".bytes], @config.bind_key('"input"', '"\1"')
assert_equal [input, "\12".bytes], @config.bind_key('"input"', '"\12"')
assert_equal [input, "\123".bytes], @config.bind_key('"input"', '"\123"')
assert_equal [input, "\123".bytes + '4'.bytes], @config.bind_key('"input"', '"\1234"')
end
def test_bind_key_with_hexadecimal_number
input = %w{i n p u t}.map(&:ord)
assert_equal [input, "\x4".bytes], @config.bind_key('"input"', '"\x4"')
assert_equal [input, "\x45".bytes], @config.bind_key('"input"', '"\x45"')
assert_equal [input, "\x45".bytes + '6'.bytes], @config.bind_key('"input"', '"\x456"')
end
def test_include
File.open('included_partial', 'wt') do |f|
f.write(<<~PARTIAL_LINES)
set bell-style on
PARTIAL_LINES
end
@config.read_lines(<<~LINES.split(/^/))
$include included_partial
LINES
assert_equal :audible, @config.instance_variable_get(:@bell_style)
end
def test_if
@config.read_lines(<<~LINES.split(/^/))
$if Ruby
set bell-style audible
$else
set bell-style visible
$endif
LINES
assert_equal :audible, @config.instance_variable_get(:@bell_style)
end
def test_if_with_false
@config.read_lines(<<~LINES.split(/^/))
$if Python
set bell-style audible
$else
set bell-style visible
$endif
LINES
assert_equal :visible, @config.instance_variable_get(:@bell_style)
end
def test_if_with_indent
%w[Ruby Reline].each do |cond|
@config.read_lines(<<~LINES.split(/^/))
set bell-style none
$if #{cond}
set bell-style audible
$else
set bell-style visible
$endif
LINES
assert_equal :audible, @config.instance_variable_get(:@bell_style)
end
end
def test_unclosed_if
e = assert_raise(Reline::Config::InvalidInputrc) do
@config.read_lines(<<~LINES.split(/(?<=\n)/), "INPUTRC")
$if Ruby
LINES
end
assert_equal "INPUTRC:1: unclosed if", e.message
end
def test_unmatched_else
e = assert_raise(Reline::Config::InvalidInputrc) do
@config.read_lines(<<~LINES.split(/(?<=\n)/), "INPUTRC")
$else
LINES
end
assert_equal "INPUTRC:1: unmatched else", e.message
end
def test_unmatched_endif
e = assert_raise(Reline::Config::InvalidInputrc) do
@config.read_lines(<<~LINES.split(/(?<=\n)/), "INPUTRC")
$endif
LINES
end
assert_equal "INPUTRC:1: unmatched endif", e.message
end
def test_default_key_bindings
@config.add_default_key_binding('abcd'.bytes, 'EFGH'.bytes)
@config.read_lines(<<~'LINES'.split(/^/))
"abcd": "ABCD"
"ijkl": "IJKL"
LINES
expected = { 'abcd'.bytes => 'ABCD'.bytes, 'ijkl'.bytes => 'IJKL'.bytes }
assert_equal expected, @config.key_bindings
end
end