1
0
Fork 0
mirror of https://github.com/pry/pry.git synced 2022-11-09 12:35:05 -05:00
pry--pry/spec/pry_repl_spec.rb

125 lines
2.8 KiB
Ruby
Raw Normal View History

require_relative 'helper'
describe Pry::REPL do
it "should let you run commands in the middle of multiline expressions" do
2012-12-24 01:06:06 -05:00
ReplTester.start do
input 'def a'
input '!'
2015-01-22 16:52:20 -05:00
output(/^Input buffer cleared/)
2012-12-24 01:06:06 -05:00
input '5'
output '=> 5'
end
end
2012-12-23 03:03:29 -05:00
it "should rescue exceptions" do
ReplTester.start do
input 'raise "lorum"'
2015-01-22 16:52:20 -05:00
output(/^RuntimeError: lorum/)
2013-11-23 21:11:29 -05:00
if defined?(java)
input 'raise java.lang.Exception.new("foo")'
2015-01-22 16:52:20 -05:00
output(/Exception: foo/)
2013-11-23 21:11:29 -05:00
input 'raise java.io.IOException.new("bar")'
2015-01-22 16:52:20 -05:00
output(/IOException: bar/)
2013-11-23 21:11:29 -05:00
end
end
end
describe "eval_string and binding_stack" do
2012-12-23 22:58:18 -05:00
it "shouldn't break if we start a nested REPL" do
ReplTester.start do
input 'Pry::REPL.new(_pry_, :target => 10).start'
output ''
2015-01-22 16:52:20 -05:00
prompt(/10.*> $/)
2012-12-23 03:03:29 -05:00
input 'self'
output '=> 10'
2012-12-23 03:03:29 -05:00
input nil # Ctrl-D
output ''
2012-12-23 03:03:29 -05:00
input 'self'
output '=> main'
end
end
2012-12-23 22:58:18 -05:00
it "shouldn't break if we start a nested instance" do
ReplTester.start do
input 'Pry.start(10, _pry_.config)'
2012-12-23 22:58:18 -05:00
output ''
2015-01-22 16:52:20 -05:00
prompt(/10.*> $/)
2012-12-23 22:58:18 -05:00
input 'self'
output '=> 10'
input nil # Ctrl-D
output '=> nil' # return value of Pry session
input 'self'
output '=> main'
end
end
it "shouldn't break if we pop bindings in Ruby" do
ReplTester.start do
input 'cd 10'
output ''
2015-01-22 16:52:20 -05:00
prompt(/10.*> $/)
input '_pry_.binding_stack.pop'
2015-01-22 16:52:20 -05:00
output(/^=> #<Binding/)
prompt(/main.*> $/)
input '_pry_.binding_stack.pop'
2015-01-22 16:52:20 -05:00
output(/^=> #<Binding/)
assert_exited
end
end
it "should immediately evaluate eval_string after cmd if complete" do
set = Pry::CommandSet.new do
import Pry::Commands
command 'hello!' do
eval_string.replace('"hello"')
end
end
ReplTester.start(:commands => set) do
input 'def x'
output ''
2015-01-22 16:52:20 -05:00
prompt(/\* $/)
input 'hello!'
output '=> "hello"'
2015-01-22 16:52:20 -05:00
prompt(/> $/)
end
2012-12-23 03:03:29 -05:00
end
end
describe "space prefix" do
describe "with 1 space" do
it "it prioritizes variables over commands" do
expect(pry_eval(' ls = 2+2', ' ls')).to eq(4)
end
end
describe "with more than 1 space" do
it "prioritizes commands over variables" do
expect(mock_pry(' ls = 2+2')).to match(/SyntaxError.+unexpected '='/)
end
end
end
describe "#piping?" do
it "returns false when $stdout is a non-IO object" do
repl = described_class.new(Pry.new, {})
old_stdout = $stdout
$stdout = Class.new { def write(*) end }.new
expect(repl.send(:piping?)).to eq(false)
$stdout = old_stdout
end
end
end