mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
a923203811
conveniently (https://github.com/ruby/irb/pull/429) * Create a base TestIRB::TestCase class * Save/restore encodings for tests that initializes InputMethod classes Because `RelineInputMethod#initializes` calls `set_encoding`, which changes stdio/out/err and Encoding's default encoding values, we need to make sure any test that directly or indirectly (e.g. through Context) initializes `RelineInputMethod` restores encodings. `ReadlineInputMethod` also changes encodings but currently no tests cover it. * Remove unnecessary TestHelper module Since we now have a base TestCase, without_rdoc can just live there. https://github.com/ruby/irb/commit/c2874ec121
153 lines
4.5 KiB
Ruby
153 lines
4.5 KiB
Ruby
# frozen_string_literal: false
|
|
require "irb"
|
|
require "fileutils"
|
|
|
|
require_relative "helper"
|
|
|
|
module TestIRB
|
|
class TestInit < TestCase
|
|
def setup
|
|
# IRBRC is for RVM...
|
|
@backup_env = %w[HOME XDG_CONFIG_HOME IRBRC].each_with_object({}) do |env, hash|
|
|
hash[env] = ENV.delete(env)
|
|
end
|
|
ENV["HOME"] = @tmpdir = Dir.mktmpdir("test_irb_init_#{$$}")
|
|
end
|
|
|
|
def teardown
|
|
ENV.update(@backup_env)
|
|
FileUtils.rm_rf(@tmpdir)
|
|
IRB.conf.delete(:SCRIPT)
|
|
end
|
|
|
|
def test_setup_with_argv_preserves_global_argv
|
|
argv = ["foo", "bar"]
|
|
with_argv(argv) do
|
|
IRB.setup(eval("__FILE__"), argv: %w[-f])
|
|
assert_equal argv, ARGV
|
|
end
|
|
end
|
|
|
|
def test_setup_with_minimum_argv_does_not_change_dollar0
|
|
orig = $0.dup
|
|
IRB.setup(eval("__FILE__"), argv: %w[-f])
|
|
assert_equal orig, $0
|
|
end
|
|
|
|
def test_rc_file
|
|
tmpdir = @tmpdir
|
|
Dir.chdir(tmpdir) do
|
|
ENV["XDG_CONFIG_HOME"] = "#{tmpdir}/xdg"
|
|
IRB.conf[:RC_NAME_GENERATOR] = nil
|
|
assert_equal(tmpdir+"/.irb#{IRB::IRBRC_EXT}", IRB.rc_file)
|
|
assert_equal(tmpdir+"/.irb_history", IRB.rc_file("_history"))
|
|
assert_file.not_exist?(tmpdir+"/xdg")
|
|
IRB.conf[:RC_NAME_GENERATOR] = nil
|
|
FileUtils.touch(tmpdir+"/.irb#{IRB::IRBRC_EXT}")
|
|
assert_equal(tmpdir+"/.irb#{IRB::IRBRC_EXT}", IRB.rc_file)
|
|
assert_equal(tmpdir+"/.irb_history", IRB.rc_file("_history"))
|
|
assert_file.not_exist?(tmpdir+"/xdg")
|
|
end
|
|
end
|
|
|
|
def test_rc_file_in_subdir
|
|
tmpdir = @tmpdir
|
|
Dir.chdir(tmpdir) do
|
|
FileUtils.mkdir_p("#{tmpdir}/mydir")
|
|
Dir.chdir("#{tmpdir}/mydir") do
|
|
IRB.conf[:RC_NAME_GENERATOR] = nil
|
|
assert_equal(tmpdir+"/.irb#{IRB::IRBRC_EXT}", IRB.rc_file)
|
|
assert_equal(tmpdir+"/.irb_history", IRB.rc_file("_history"))
|
|
IRB.conf[:RC_NAME_GENERATOR] = nil
|
|
FileUtils.touch(tmpdir+"/.irb#{IRB::IRBRC_EXT}")
|
|
assert_equal(tmpdir+"/.irb#{IRB::IRBRC_EXT}", IRB.rc_file)
|
|
assert_equal(tmpdir+"/.irb_history", IRB.rc_file("_history"))
|
|
end
|
|
end
|
|
end
|
|
|
|
def test_recovery_sigint
|
|
pend "This test gets stuck on Solaris for unknown reason; contribution is welcome" if RUBY_PLATFORM =~ /solaris/
|
|
bundle_exec = ENV.key?('BUNDLE_GEMFILE') ? ['-rbundler/setup'] : []
|
|
status = assert_in_out_err(bundle_exec + %w[-W0 -rirb -e binding.irb;loop{Process.kill("SIGINT",$$)} -- -f --], "exit\n", //, //)
|
|
Process.kill("SIGKILL", status.pid) if !status.exited? && !status.stopped? && !status.signaled?
|
|
end
|
|
|
|
def test_no_color_environment_variable
|
|
orig_no_color = ENV['NO_COLOR']
|
|
orig_use_colorize = IRB.conf[:USE_COLORIZE]
|
|
IRB.conf[:USE_COLORIZE] = true
|
|
|
|
assert IRB.conf[:USE_COLORIZE]
|
|
|
|
ENV['NO_COLOR'] = 'true'
|
|
IRB.setup(__FILE__)
|
|
refute IRB.conf[:USE_COLORIZE]
|
|
|
|
ENV['NO_COLOR'] = ''
|
|
IRB.setup(__FILE__)
|
|
assert IRB.conf[:USE_COLORIZE]
|
|
|
|
ENV['NO_COLOR'] = nil
|
|
IRB.setup(__FILE__)
|
|
assert IRB.conf[:USE_COLORIZE]
|
|
ensure
|
|
ENV['NO_COLOR'] = orig_no_color
|
|
IRB.conf[:USE_COLORIZE] = orig_use_colorize
|
|
end
|
|
|
|
def test_noscript
|
|
argv = %w[--noscript -- -f]
|
|
IRB.setup(eval("__FILE__"), argv: argv)
|
|
assert_nil IRB.conf[:SCRIPT]
|
|
assert_equal(['-f'], argv)
|
|
|
|
argv = %w[--noscript -- a]
|
|
IRB.setup(eval("__FILE__"), argv: argv)
|
|
assert_nil IRB.conf[:SCRIPT]
|
|
assert_equal(['a'], argv)
|
|
|
|
argv = %w[--noscript a]
|
|
IRB.setup(eval("__FILE__"), argv: argv)
|
|
assert_nil IRB.conf[:SCRIPT]
|
|
assert_equal(['a'], argv)
|
|
|
|
argv = %w[--script --noscript a]
|
|
IRB.setup(eval("__FILE__"), argv: argv)
|
|
assert_nil IRB.conf[:SCRIPT]
|
|
assert_equal(['a'], argv)
|
|
|
|
argv = %w[--noscript --script a]
|
|
IRB.setup(eval("__FILE__"), argv: argv)
|
|
assert_equal('a', IRB.conf[:SCRIPT])
|
|
assert_equal([], argv)
|
|
end
|
|
|
|
def test_dash
|
|
argv = %w[-]
|
|
IRB.setup(eval("__FILE__"), argv: argv)
|
|
assert_equal('-', IRB.conf[:SCRIPT])
|
|
assert_equal([], argv)
|
|
|
|
argv = %w[-- -]
|
|
IRB.setup(eval("__FILE__"), argv: argv)
|
|
assert_equal('-', IRB.conf[:SCRIPT])
|
|
assert_equal([], argv)
|
|
|
|
argv = %w[-- - -f]
|
|
IRB.setup(eval("__FILE__"), argv: argv)
|
|
assert_equal('-', IRB.conf[:SCRIPT])
|
|
assert_equal(['-f'], argv)
|
|
end
|
|
|
|
private
|
|
|
|
def with_argv(argv)
|
|
orig = ARGV.dup
|
|
ARGV.replace(argv)
|
|
yield
|
|
ensure
|
|
ARGV.replace(orig)
|
|
end
|
|
end
|
|
end
|