2020-04-27 05:27:19 -04:00
|
|
|
# frozen_string_literal: false
|
|
|
|
require "test/unit"
|
|
|
|
require "irb"
|
|
|
|
require "irb/extend-command"
|
|
|
|
|
|
|
|
module TestIRB
|
|
|
|
class ExtendCommand < Test::Unit::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)
|
|
|
|
@home_backup = ENV["HOME"]
|
|
|
|
ENV["HOME"] = @tmpdir
|
2020-04-30 09:54:42 -04:00
|
|
|
@default_encoding = [Encoding.default_external, Encoding.default_internal]
|
2020-05-07 11:19:54 -04:00
|
|
|
@stdio_encodings = [STDIN, STDOUT, STDERR].map {|io| [io.external_encoding, io.internal_encoding] }
|
2020-05-07 11:15:01 -04:00
|
|
|
IRB.instance_variable_get(:@CONF).clear
|
2020-04-27 05:27:19 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def teardown
|
|
|
|
ENV["HOME"] = @home_backup
|
|
|
|
Dir.chdir(@pwd)
|
|
|
|
FileUtils.rm_rf(@tmpdir)
|
2020-04-30 09:54:42 -04:00
|
|
|
EnvUtil.suppress_warning {
|
|
|
|
Encoding.default_external, Encoding.default_internal = *@default_encoding
|
2020-05-07 11:19:54 -04:00
|
|
|
[STDIN, STDOUT, STDERR].zip(@stdio_encodings) do |io, encs|
|
|
|
|
io.set_encoding(*encs)
|
|
|
|
end
|
2020-04-30 09:54:42 -04:00
|
|
|
}
|
2020-04-27 05:27:19 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_irb_info_multiline
|
|
|
|
FileUtils.touch("#{@tmpdir}/.inputrc")
|
|
|
|
FileUtils.touch("#{@tmpdir}/.irbrc")
|
|
|
|
IRB.setup(__FILE__, argv: [])
|
|
|
|
IRB.conf[:USE_MULTILINE] = true
|
|
|
|
IRB.conf[:USE_SINGLELINE] = false
|
2020-04-29 22:56:52 -04:00
|
|
|
IRB.conf[:VERBOSE] = false
|
2020-04-27 05:27:19 -04:00
|
|
|
workspace = IRB::WorkSpace.new(self)
|
|
|
|
irb = IRB::Irb.new(workspace)
|
|
|
|
IRB.conf[:MAIN_CONTEXT] = irb.context
|
|
|
|
expected = %r{
|
|
|
|
Ruby\sversion: .+\n
|
|
|
|
IRB\sversion:\sirb .+\n
|
|
|
|
InputMethod:\sReidlineInputMethod\swith\sReline .+ and .+\n
|
|
|
|
\.irbrc\spath: .+
|
|
|
|
}x
|
|
|
|
assert_match expected, irb.context.main.irb_info.to_s
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_irb_info_singleline
|
|
|
|
FileUtils.touch("#{@tmpdir}/.inputrc")
|
|
|
|
FileUtils.touch("#{@tmpdir}/.irbrc")
|
|
|
|
IRB.setup(__FILE__, argv: [])
|
|
|
|
IRB.conf[:USE_MULTILINE] = false
|
|
|
|
IRB.conf[:USE_SINGLELINE] = true
|
2020-04-29 22:56:52 -04:00
|
|
|
IRB.conf[:VERBOSE] = false
|
2020-04-27 05:27:19 -04:00
|
|
|
workspace = IRB::WorkSpace.new(self)
|
|
|
|
irb = IRB::Irb.new(workspace)
|
|
|
|
IRB.conf[:MAIN_CONTEXT] = irb.context
|
|
|
|
expected = %r{
|
|
|
|
Ruby\sversion: .+\n
|
|
|
|
IRB\sversion:\sirb .+\n
|
|
|
|
InputMethod:\sReadlineInputMethod\swith .+ and .+\n
|
|
|
|
\.irbrc\spath: .+
|
|
|
|
}x
|
|
|
|
assert_match expected, irb.context.main.irb_info.to_s
|
|
|
|
end
|
2020-04-28 04:06:43 -04:00
|
|
|
|
|
|
|
def test_irb_info_multiline_without_rc_files
|
|
|
|
inputrc_backup = ENV["INPUTRC"]
|
2020-05-09 01:22:04 -04:00
|
|
|
ENV["INPUTRC"] = "unknown_inpurc"
|
2020-04-28 04:06:43 -04:00
|
|
|
ext_backup = IRB::IRBRC_EXT
|
|
|
|
IRB.__send__(:remove_const, :IRBRC_EXT)
|
2020-05-09 01:22:04 -04:00
|
|
|
IRB.const_set(:IRBRC_EXT, "unknown_ext")
|
2020-04-28 04:06:43 -04:00
|
|
|
IRB.setup(__FILE__, argv: [])
|
|
|
|
IRB.conf[:USE_MULTILINE] = true
|
|
|
|
IRB.conf[:USE_SINGLELINE] = false
|
2020-04-29 22:56:52 -04:00
|
|
|
IRB.conf[:VERBOSE] = false
|
2020-04-28 04:06:43 -04:00
|
|
|
workspace = IRB::WorkSpace.new(self)
|
|
|
|
irb = IRB::Irb.new(workspace)
|
|
|
|
IRB.conf[:MAIN_CONTEXT] = irb.context
|
|
|
|
expected = %r{
|
|
|
|
Ruby\sversion: .+\n
|
|
|
|
IRB\sversion:\sirb .+\n
|
|
|
|
InputMethod:\sReidlineInputMethod\swith\sReline\s[^ ]+(?!\sand\s.+)\n
|
|
|
|
\z
|
|
|
|
}x
|
|
|
|
assert_match expected, irb.context.main.irb_info.to_s
|
|
|
|
ensure
|
|
|
|
ENV["INPUTRC"] = inputrc_backup
|
|
|
|
IRB.__send__(:remove_const, :IRBRC_EXT)
|
|
|
|
IRB.const_set(:IRBRC_EXT, ext_backup)
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_irb_info_singleline_without_rc_files
|
|
|
|
inputrc_backup = ENV["INPUTRC"]
|
2020-05-09 01:22:04 -04:00
|
|
|
ENV["INPUTRC"] = "unknown_inpurc"
|
2020-04-28 04:06:43 -04:00
|
|
|
ext_backup = IRB::IRBRC_EXT
|
|
|
|
IRB.__send__(:remove_const, :IRBRC_EXT)
|
2020-05-09 01:22:04 -04:00
|
|
|
IRB.const_set(:IRBRC_EXT, "unknown_ext")
|
2020-04-28 04:06:43 -04:00
|
|
|
IRB.setup(__FILE__, argv: [])
|
|
|
|
IRB.conf[:USE_MULTILINE] = false
|
|
|
|
IRB.conf[:USE_SINGLELINE] = true
|
2020-04-29 22:56:52 -04:00
|
|
|
IRB.conf[:VERBOSE] = false
|
2020-04-28 04:06:43 -04:00
|
|
|
workspace = IRB::WorkSpace.new(self)
|
|
|
|
irb = IRB::Irb.new(workspace)
|
|
|
|
IRB.conf[:MAIN_CONTEXT] = irb.context
|
|
|
|
expected = %r{
|
|
|
|
Ruby\sversion: .+\n
|
|
|
|
IRB\sversion:\sirb .+\n
|
2020-04-29 22:44:09 -04:00
|
|
|
InputMethod:\sReadlineInputMethod\swith\s(?~.*\sand\s.+)\n
|
2020-04-28 04:06:43 -04:00
|
|
|
\z
|
|
|
|
}x
|
|
|
|
assert_match expected, irb.context.main.irb_info.to_s
|
|
|
|
ensure
|
|
|
|
ENV["INPUTRC"] = inputrc_backup
|
|
|
|
IRB.__send__(:remove_const, :IRBRC_EXT)
|
|
|
|
IRB.const_set(:IRBRC_EXT, ext_backup)
|
|
|
|
end
|
2020-04-27 05:27:19 -04:00
|
|
|
end
|
|
|
|
end
|