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:
parent
40f8a781a3
commit
d889e810f3
1 changed files with 51 additions and 0 deletions
|
@ -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")
|
||||
|
|
Loading…
Reference in a new issue