Allow PryTester to test commands that mutate eval_string

This commit is contained in:
Ryan Fitzgerald 2012-08-18 15:17:26 -07:00
parent 90b3f807f0
commit 997fe6af07
2 changed files with 38 additions and 10 deletions

View File

@ -219,19 +219,17 @@ class PryTester
if context
@pry.binding_stack << Pry.binding_for(context)
end
reset_output
end
def eval(*strs)
@out = StringIO.new
@pry.output = @out
reset_output
result = nil
strs.flatten.each do |str|
if @pry.process_command(str)
result = last_command_result
if result == Pry::Command::VOID_VALUE
result = last_output
end
result = last_command_result_or_output
else
result = @pry.evaluate_ruby(str)
end
@ -244,12 +242,31 @@ class PryTester
@out.string if @out
end
def process_command(command_str, eval_str = '')
@pry.process_command(command_str, eval_str) or raise "Not a valid command"
last_command_result_or_output
end
protected
def last_command_result
result = Thread.current[:__pry_cmd_result__]
result.retval if result
end
def last_command_result_or_output
result = last_command_result
if result != Pry::Command::VOID_VALUE
result
else
last_output
end
end
def reset_output
@out = StringIO.new
@pry.output = @out
end
end
CommandTester = Pry::CommandSet.new do
@ -262,6 +279,10 @@ CommandTester = Pry::CommandSet.new do
end
end
def unindent(*args)
Pry::Helpers::CommandHelpers.unindent(*args)
end
# to help with tracking down bugs that cause an infinite loop in the test suite
if ENV["SET_TRACE_FUNC"]
require 'set_trace' if Pry::Helpers::BaseHelpers.rbx?

View File

@ -3,15 +3,22 @@ require 'helper'
describe "Pry::DefaultCommands::Input" do
before do
@str_output = StringIO.new
@t = pry_tester
end
describe "amend-line" do
it 'should correctly amend the last line of input when no line number specified ' do
redirect_pry_io(InputTester.new("def hello", "puts :bing", "amend-line puts :blah", "show-input", "exit-all"), @str_output) do
pry
end
eval_str = unindent(<<-STR)
def hello
puts :bing
STR
@str_output.string.should =~ /\A\d+: def hello\n\d+: puts :blah/
@t.process_command 'amend-line puts :blah', eval_str
eval_str.should == unindent(<<-STR)
def hello
puts :blah
STR
end
it 'should correctly amend the specified line of input when line number given ' do