mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00

Fix errors when XDG_CONFIG_HOME points to non-writable directory `$HOME/.config` is not writable on CI because I think tests should not corrupt user's data. And GitHub Actions CI sets `XDG_CONFIG_HOME` since `Version: 20210309.1`. https://github.com/ruby/actions/runs/2130811016?check_suite_focus=true#step:16:301 ``` Errno::EACCES: Permission denied @ dir_s_mkdir - /home/runner/.config/irb ``` --- test/irb/test_cmd.rb | 2 ++ 1 file changed, 2 insertions(+) Try to fix errors in TestIRB::TestHistory too https://github.com/ruby/actions/runs/2137935523?check_suite_focus=true#step:9:562 ``` 1) Error: TestIRB::TestHistory#test_history_concurrent_use: Errno::EACCES: Permission denied @ dir_s_mkdir - /home/runner/.config/irb /home/runner/work/actions/actions/ruby/lib/fileutils.rb:253:in `mkdir' /home/runner/work/actions/actions/ruby/lib/fileutils.rb:253:in `fu_mkdir' /home/runner/work/actions/actions/ruby/lib/fileutils.rb:231:in `block (2 levels) in mkdir_p' /home/runner/work/actions/actions/ruby/lib/fileutils.rb:229:in `reverse_each' /home/runner/work/actions/actions/ruby/lib/fileutils.rb:229:in `block in mkdir_p' /home/runner/work/actions/actions/ruby/lib/fileutils.rb:211:in `each' /home/runner/work/actions/actions/ruby/lib/fileutils.rb:211:in `mkdir_p' /home/runner/work/actions/actions/ruby/lib/irb/init.rb:355:in `rc_file_generators' /home/runner/work/actions/actions/ruby/lib/irb/init.rb:330:in `rc_file' /home/runner/work/actions/actions/ruby/test/irb/test_history.rb:170:in `block in assert_history' /home/runner/work/actions/actions/ruby/lib/tmpdir.rb:96:in `mktmpdir' /home/runner/work/actions/actions/ruby/test/irb/test_history.rb:168:in `assert_history' /home/runner/work/actions/actions/ruby/test/irb/test_history.rb:133:in `test_history_concurrent_use' ``` --- test/irb/test_history.rb | 2 ++ 1 file changed, 2 insertions(+)
129 lines
4.2 KiB
Ruby
129 lines
4.2 KiB
Ruby
# 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
|
|
@xdg_config_home_backup = ENV.delete("XDG_CONFIG_HOME")
|
|
@default_encoding = [Encoding.default_external, Encoding.default_internal]
|
|
@stdio_encodings = [STDIN, STDOUT, STDERR].map {|io| [io.external_encoding, io.internal_encoding] }
|
|
IRB.instance_variable_get(:@CONF).clear
|
|
end
|
|
|
|
def teardown
|
|
ENV["XDG_CONFIG_HOME"] = @xdg_config_home_backup
|
|
ENV["HOME"] = @home_backup
|
|
Dir.chdir(@pwd)
|
|
FileUtils.rm_rf(@tmpdir)
|
|
EnvUtil.suppress_warning {
|
|
Encoding.default_external, Encoding.default_internal = *@default_encoding
|
|
[STDIN, STDOUT, STDERR].zip(@stdio_encodings) do |io, encs|
|
|
io.set_encoding(*encs)
|
|
end
|
|
}
|
|
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
|
|
IRB.conf[:VERBOSE] = false
|
|
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
|
|
IRB.conf[:VERBOSE] = false
|
|
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
|
|
|
|
def test_irb_info_multiline_without_rc_files
|
|
inputrc_backup = ENV["INPUTRC"]
|
|
ENV["INPUTRC"] = "unknown_inpurc"
|
|
ext_backup = IRB::IRBRC_EXT
|
|
IRB.__send__(:remove_const, :IRBRC_EXT)
|
|
IRB.const_set(:IRBRC_EXT, "unknown_ext")
|
|
IRB.setup(__FILE__, argv: [])
|
|
IRB.conf[:USE_MULTILINE] = true
|
|
IRB.conf[:USE_SINGLELINE] = false
|
|
IRB.conf[:VERBOSE] = false
|
|
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"]
|
|
ENV["INPUTRC"] = "unknown_inpurc"
|
|
ext_backup = IRB::IRBRC_EXT
|
|
IRB.__send__(:remove_const, :IRBRC_EXT)
|
|
IRB.const_set(:IRBRC_EXT, "unknown_ext")
|
|
IRB.setup(__FILE__, argv: [])
|
|
IRB.conf[:USE_MULTILINE] = false
|
|
IRB.conf[:USE_SINGLELINE] = true
|
|
IRB.conf[:VERBOSE] = false
|
|
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\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
|
|
end
|
|
end
|