pry--pry/spec/control_d_handler_spec.rb

59 lines
1.5 KiB
Ruby

require 'helper'
describe Pry::DEFAULT_CONTROL_D_HANDLER do
describe "control-d press" do
before do
# Simulates a ^D press.
@control_d = "Pry::DEFAULT_CONTROL_D_HANDLER.call('', _pry_)"
end
describe "in an expression" do
it "should clear out passed string" do
str = 'hello world'
Pry::DEFAULT_CONTROL_D_HANDLER.call(str, nil)
str.should == ''
end
end
describe "at top-level session" do
it "breaks out of a REPL" do
pry_tester(0).simulate_repl do |t|
t.eval @control_d
end.should == nil
end
end
describe "in a nested session" do
it "pops last binding from the binding stack" do
pry_tester(0).simulate_repl { |t|
t.eval 'cd :foo'
t.eval('_pry_.binding_stack.size').should == 2
t.eval(@control_d)
t.eval('_pry_.binding_stack.size').should == 1
t.eval 'exit-all'
}
end
it "breaks out of the parent session" do
pry_tester(:outer).simulate_repl do |o|
o.context = :inner
o.simulate_repl { |i|
i.eval('_pry_.current_context.eval("self")').should == :inner
i.eval('_pry_.binding_stack.size').should == 2
i.eval @control_d
i.eval('_pry_.binding_stack.size').should == 1
i.eval('_pry_.current_context.eval("self")').should == :outer
i.eval 'throw :breakout'
}
o.eval 'exit-all'
end
end
end
end
end