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

[ruby/irb] Add test for the help command

This commit is contained in:
st0012 2022-10-24 22:52:52 +01:00 committed by Peter Zhu
parent 40f8a781a3
commit d889e810f3

View file

@ -406,6 +406,57 @@ module TestIRB
], out)
end
def test_help
IRB.init_config(nil)
input = TestInputMethod.new([
"help 'String#gsub'\n",
"\n",
])
IRB.conf[:VERBOSE] = false
IRB.conf[:PROMPT_MODE] = :SIMPLE
irb = IRB::Irb.new(IRB::WorkSpace.new(self), input)
IRB.conf[:MAIN_CONTEXT] = irb.context
out, err = capture_output do
irb.eval_input
end
# the help command lazily loads rdoc by redefining the execute method
assert_match(/discarding old execute/, err) unless RUBY_ENGINE == 'truffleruby'
# the former is what we'd get without document content installed, like on CI
# the latter is what we may get locally
possible_rdoc_output = [/Nothing known about String#gsub/, /Returns a copy of self with all occurrences of the given pattern/]
assert(possible_rdoc_output.any? { |output| output.match?(out) }, "Expect the help command to match one of the possible outputs")
ensure
# this is the only way to reset the redefined method without coupling the test with its implementation
load "irb/cmd/help.rb"
end
def test_help_without_rdoc
IRB.init_config(nil)
input = TestInputMethod.new([
"help 'String#gsub'\n",
"\n",
])
IRB.conf[:VERBOSE] = false
IRB.conf[:PROMPT_MODE] = :SIMPLE
irb = IRB::Irb.new(IRB::WorkSpace.new(self), input)
IRB.conf[:MAIN_CONTEXT] = irb.context
out, err = capture_output do
without_rdoc do
irb.eval_input
end
end
# since LoadError will be raised, the execute won't be redefined
assert_no_match(/discarding old execute/, err)
# if it fails to require rdoc, it only returns the command object
assert_match(/=> IRB::ExtendCommand::Help\n/, out)
ensure
# this is the only way to reset the redefined method without coupling the test with its implementation
load "irb/cmd/help.rb"
end
def test_irb_load
IRB.init_config(nil)
File.write("#{@tmpdir}/a.rb", "a = 'hi'\n")