1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/irb/test_cmd.rb
nagachika c02f4c1c5a merge revision(s) e0dd072978e6c2c8180e75617e7ee37830caefa3,85f99f4b715a5954124d5014002c16652995b128:
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(+)
2021-03-20 15:01:48 +09:00

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