[ruby/irb] Simplify info command's tests

(https://github.com/ruby/irb/pull/440)

https://github.com/ruby/irb/commit/5942949226
This commit is contained in:
Stan Lo 2022-11-11 21:05:31 +00:00 committed by git
parent a48e01ccba
commit 14a1394bcd

View File

@ -5,7 +5,7 @@ require "irb/extend-command"
require_relative "helper" require_relative "helper"
module TestIRB module TestIRB
class ExtendCommand < TestCase class ExtendCommandTest < TestCase
class TestInputMethod < ::IRB::InputMethod class TestInputMethod < ::IRB::InputMethod
attr_reader :list, :line_no attr_reader :list, :line_no
@ -58,18 +58,26 @@ module TestIRB
restore_encodings restore_encodings
end end
class InfoCommandTest < ExtendCommandTest
def setup
super
@locals_backup = ENV.delete("LANG"), ENV.delete("LC_ALL")
end
def teardown
super
ENV["LANG"], ENV["LC_ALL"] = @locals_backup
end
def test_irb_info_multiline def test_irb_info_multiline
FileUtils.touch("#{@tmpdir}/.inputrc") FileUtils.touch("#{@tmpdir}/.inputrc")
FileUtils.touch("#{@tmpdir}/.irbrc") FileUtils.touch("#{@tmpdir}/.irbrc")
IRB.setup(__FILE__, argv: [])
IRB.conf[:USE_MULTILINE] = true out, err = execute_lines(
IRB.conf[:USE_SINGLELINE] = false "irb_info",
IRB.conf[:VERBOSE] = false conf: { USE_MULTILINE: true, USE_SINGLELINE: false }
lang_backup = ENV.delete("LANG") )
lc_all_backup = ENV.delete("LC_ALL")
workspace = IRB::WorkSpace.new(self)
irb = IRB::Irb.new(workspace, TestInputMethod.new([]))
IRB.conf[:MAIN_CONTEXT] = irb.context
expected = %r{ expected = %r{
Ruby\sversion:\s.+\n Ruby\sversion:\s.+\n
IRB\sversion:\sirb\s.+\n IRB\sversion:\sirb\s.+\n
@ -79,24 +87,20 @@ module TestIRB
East\sAsian\sAmbiguous\sWidth:\s\d\n East\sAsian\sAmbiguous\sWidth:\s\d\n
#{@is_win ? 'Code\spage:\s\d+\n' : ''} #{@is_win ? 'Code\spage:\s\d+\n' : ''}
}x }x
assert_match expected, irb.context.main.irb_info.to_s
ensure assert_empty err
ENV["LANG"] = lang_backup assert_match expected, out
ENV["LC_ALL"] = lc_all_backup
end end
def test_irb_info_singleline def test_irb_info_singleline
FileUtils.touch("#{@tmpdir}/.inputrc") FileUtils.touch("#{@tmpdir}/.inputrc")
FileUtils.touch("#{@tmpdir}/.irbrc") FileUtils.touch("#{@tmpdir}/.irbrc")
IRB.setup(__FILE__, argv: [])
IRB.conf[:USE_MULTILINE] = false out, err = execute_lines(
IRB.conf[:USE_SINGLELINE] = true "irb_info",
IRB.conf[:VERBOSE] = false conf: { USE_MULTILINE: false, USE_SINGLELINE: true }
lang_backup = ENV.delete("LANG") )
lc_all_backup = ENV.delete("LC_ALL")
workspace = IRB::WorkSpace.new(self)
irb = IRB::Irb.new(workspace, TestInputMethod.new([]))
IRB.conf[:MAIN_CONTEXT] = irb.context
expected = %r{ expected = %r{
Ruby\sversion:\s.+\n Ruby\sversion:\s.+\n
IRB\sversion:\sirb\s.+\n IRB\sversion:\sirb\s.+\n
@ -106,20 +110,9 @@ module TestIRB
East\sAsian\sAmbiguous\sWidth:\s\d\n East\sAsian\sAmbiguous\sWidth:\s\d\n
#{@is_win ? 'Code\spage:\s\d+\n' : ''} #{@is_win ? 'Code\spage:\s\d+\n' : ''}
}x }x
info = irb.context.main.irb_info
capture_output do assert_empty err
# Reline::Core#ambiguous_width may access STDOUT, not $stdout assert_match expected, out
stdout = STDOUT.dup
STDOUT.reopen(IO::NULL, "w")
info = info.to_s
ensure
STDOUT.reopen(stdout)
stdout.close
end
assert_match expected, info
ensure
ENV["LANG"] = lang_backup
ENV["LC_ALL"] = lc_all_backup
end end
def test_irb_info_multiline_without_rc_files def test_irb_info_multiline_without_rc_files
@ -128,15 +121,12 @@ module TestIRB
ext_backup = IRB::IRBRC_EXT ext_backup = IRB::IRBRC_EXT
IRB.__send__(:remove_const, :IRBRC_EXT) IRB.__send__(:remove_const, :IRBRC_EXT)
IRB.const_set(:IRBRC_EXT, "unknown_ext") IRB.const_set(:IRBRC_EXT, "unknown_ext")
IRB.setup(__FILE__, argv: [])
IRB.conf[:USE_MULTILINE] = true out, err = execute_lines(
IRB.conf[:USE_SINGLELINE] = false "irb_info",
IRB.conf[:VERBOSE] = false conf: { USE_MULTILINE: true, USE_SINGLELINE: false }
lang_backup = ENV.delete("LANG") )
lc_all_backup = ENV.delete("LC_ALL")
workspace = IRB::WorkSpace.new(self)
irb = IRB::Irb.new(workspace, TestInputMethod.new([]))
IRB.conf[:MAIN_CONTEXT] = irb.context
expected = %r{ expected = %r{
Ruby\sversion:\s.+\n Ruby\sversion:\s.+\n
IRB\sversion:\sirb\s.+\n IRB\sversion:\sirb\s.+\n
@ -144,15 +134,14 @@ module TestIRB
RUBY_PLATFORM:\s.+\n RUBY_PLATFORM:\s.+\n
East\sAsian\sAmbiguous\sWidth:\s\d\n East\sAsian\sAmbiguous\sWidth:\s\d\n
#{@is_win ? 'Code\spage:\s\d+\n' : ''} #{@is_win ? 'Code\spage:\s\d+\n' : ''}
\z
}x }x
assert_match expected, irb.context.main.irb_info.to_s
assert_empty err
assert_match expected, out
ensure ensure
ENV["INPUTRC"] = inputrc_backup ENV["INPUTRC"] = inputrc_backup
IRB.__send__(:remove_const, :IRBRC_EXT) IRB.__send__(:remove_const, :IRBRC_EXT)
IRB.const_set(:IRBRC_EXT, ext_backup) IRB.const_set(:IRBRC_EXT, ext_backup)
ENV["LANG"] = lang_backup
ENV["LC_ALL"] = lc_all_backup
end end
def test_irb_info_singleline_without_rc_files def test_irb_info_singleline_without_rc_files
@ -161,15 +150,12 @@ module TestIRB
ext_backup = IRB::IRBRC_EXT ext_backup = IRB::IRBRC_EXT
IRB.__send__(:remove_const, :IRBRC_EXT) IRB.__send__(:remove_const, :IRBRC_EXT)
IRB.const_set(:IRBRC_EXT, "unknown_ext") IRB.const_set(:IRBRC_EXT, "unknown_ext")
IRB.setup(__FILE__, argv: [])
IRB.conf[:USE_MULTILINE] = false out, err = execute_lines(
IRB.conf[:USE_SINGLELINE] = true "irb_info",
IRB.conf[:VERBOSE] = false conf: { USE_MULTILINE: false, USE_SINGLELINE: true }
lang_backup = ENV.delete("LANG") )
lc_all_backup = ENV.delete("LC_ALL")
workspace = IRB::WorkSpace.new(self)
irb = IRB::Irb.new(workspace, TestInputMethod.new([]))
IRB.conf[:MAIN_CONTEXT] = irb.context
expected = %r{ expected = %r{
Ruby\sversion:\s.+\n Ruby\sversion:\s.+\n
IRB\sversion:\sirb\s.+\n IRB\sversion:\sirb\s.+\n
@ -177,31 +163,27 @@ module TestIRB
RUBY_PLATFORM:\s.+\n RUBY_PLATFORM:\s.+\n
East\sAsian\sAmbiguous\sWidth:\s\d\n East\sAsian\sAmbiguous\sWidth:\s\d\n
#{@is_win ? 'Code\spage:\s\d+\n' : ''} #{@is_win ? 'Code\spage:\s\d+\n' : ''}
\z
}x }x
assert_match expected, irb.context.main.irb_info.to_s
assert_empty err
assert_match expected, out
ensure ensure
ENV["INPUTRC"] = inputrc_backup ENV["INPUTRC"] = inputrc_backup
IRB.__send__(:remove_const, :IRBRC_EXT) IRB.__send__(:remove_const, :IRBRC_EXT)
IRB.const_set(:IRBRC_EXT, ext_backup) IRB.const_set(:IRBRC_EXT, ext_backup)
ENV["LANG"] = lang_backup
ENV["LC_ALL"] = lc_all_backup
end end
def test_irb_info_lang def test_irb_info_lang
FileUtils.touch("#{@tmpdir}/.inputrc") FileUtils.touch("#{@tmpdir}/.inputrc")
FileUtils.touch("#{@tmpdir}/.irbrc") FileUtils.touch("#{@tmpdir}/.irbrc")
IRB.setup(__FILE__, argv: [])
IRB.conf[:USE_MULTILINE] = true
IRB.conf[:USE_SINGLELINE] = false
IRB.conf[:VERBOSE] = false
lang_backup = ENV.delete("LANG")
lc_all_backup = ENV.delete("LC_ALL")
ENV["LANG"] = "ja_JP.UTF-8" ENV["LANG"] = "ja_JP.UTF-8"
ENV["LC_ALL"] = "en_US.UTF-8" ENV["LC_ALL"] = "en_US.UTF-8"
workspace = IRB::WorkSpace.new(self)
irb = IRB::Irb.new(workspace, TestInputMethod.new([])) out, err = execute_lines(
IRB.conf[:MAIN_CONTEXT] = irb.context "irb_info",
conf: { USE_MULTILINE: true, USE_SINGLELINE: false }
)
expected = %r{ expected = %r{
Ruby\sversion: .+\n Ruby\sversion: .+\n
IRB\sversion:\sirb .+\n IRB\sversion:\sirb .+\n
@ -212,10 +194,10 @@ module TestIRB
LC_ALL\senv:\sen_US\.UTF-8\n LC_ALL\senv:\sen_US\.UTF-8\n
East\sAsian\sAmbiguous\sWidth:\s\d\n East\sAsian\sAmbiguous\sWidth:\s\d\n
}x }x
assert_match expected, irb.context.main.irb_info.to_s
ensure assert_empty err
ENV["LANG"] = lang_backup assert_match expected, out
ENV["LC_ALL"] = lc_all_backup end
end end
def test_measure def test_measure
@ -571,7 +553,7 @@ module TestIRB
EOS EOS
out, err = execute_lines( out, err = execute_lines(
"show_source 'TestIRB::ExtendCommand#show_source_test_method'\n", "show_source 'TestIRB::ExtendCommandTest#show_source_test_method'\n",
) )
assert_empty err assert_empty err