summaryrefslogtreecommitdiff
path: root/test/irb/test_cmd.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/irb/test_cmd.rb')
-rw-r--r--test/irb/test_cmd.rb127
1 files changed, 127 insertions, 0 deletions
diff --git a/test/irb/test_cmd.rb b/test/irb/test_cmd.rb
new file mode 100644
index 0000000000..bb33f535b6
--- /dev/null
+++ b/test/irb/test_cmd.rb
@@ -0,0 +1,127 @@
+# 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
+ @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["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