mirror of
https://github.com/pry/pry.git
synced 2022-11-09 12:35:05 -05:00
c7b28efc24
The interesting moment is that `cd -` is still a bit dorky. [1] pry(main)> _pry_.repl :a [2] pry(:a):1> _pry_.repl :b [3] pry(:b):2> cd - [4] pry(:b):2> cd - [5] pry(:b):2> The problem is that `_pry_.repl` pushes a new binding onto `binding_stack`, however, it knows nothing about `old_stack`. Well, there is a workaround for this. [1] pry(main)> _pry_.repl :a [2] pry(:a):1> ^D [3] pry(main)> cd - [4] pry(:a):1> cd - [5] pry(main)> Fix "undefined method `old_stack=' for nil:NilClass" error in this commit, when you press ^D in a nested REPL. Add a test case for this. Rewrite some comments and old Control-D units tests (so they use newer test API). Signed-off-by: Kyrylo Silin <kyrylosilin@gmail.com>
58 lines
1.5 KiB
Ruby
58 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
|