mirror of
https://github.com/pry/pry.git
synced 2022-11-09 12:35:05 -05:00
e61354693f
Just discovered this nice feature of RSpec where it can load all files for us. Works with `bundle exec rake` and `bundle exec rspec spec/file_spec.rb`, which covers all use cases.
116 lines
2.4 KiB
Ruby
116 lines
2.4 KiB
Ruby
describe "watch expression" do
|
|
# Custom eval that will:
|
|
# 1) Create an instance of pry that can use for multiple calls
|
|
# 2) Exercise the after_eval hook
|
|
# 3) Return the output
|
|
def eval(expr)
|
|
output = @tester.eval expr
|
|
@tester.pry.hooks.exec_hook :after_eval, nil, @tester.pry
|
|
output
|
|
end
|
|
|
|
before do
|
|
@tester = pry_tester
|
|
@tester.pry.hooks.clear_event_hooks(:after_eval)
|
|
eval "watch --delete"
|
|
end
|
|
|
|
it "registers the after_eval hook" do
|
|
eval 'watch 1+1'
|
|
expect(@tester.pry.hooks.hook_exists?(:after_eval, :watch_expression)).to eq(true)
|
|
end
|
|
|
|
it "prints no watched expressions" do
|
|
expect(eval('watch')).to match(/No watched expressions/)
|
|
end
|
|
|
|
it "watches an expression" do
|
|
eval "watch 1+1"
|
|
expect(eval('watch')).to match(/=> 2/)
|
|
end
|
|
|
|
it "watches a local variable" do
|
|
eval 'foo = :bar'
|
|
eval 'watch foo'
|
|
expect(eval('watch')).to match(/=> :bar/)
|
|
end
|
|
|
|
it "prints when an expression changes" do
|
|
ReplTester.start do
|
|
input 'a = 1'
|
|
output '=> 1'
|
|
|
|
input 'watch a'
|
|
output "Watching a\nwatch: a => 1"
|
|
|
|
input "a = 2"
|
|
output "watch: a => 2\n=> 2"
|
|
end
|
|
end
|
|
|
|
it "prints when an expression is mutated" do
|
|
ReplTester.start do
|
|
input 'a = "one"'
|
|
output '=> "one"'
|
|
|
|
input 'watch a'
|
|
output %(Watching a\nwatch: a => "one")
|
|
|
|
input "a.sub! 'o', 'p'"
|
|
output %(watch: a => "pne"\n=> "pne")
|
|
end
|
|
end
|
|
|
|
it "doesn't print when an expresison remains the same" do
|
|
ReplTester.start do
|
|
input 'a = 1'
|
|
output '=> 1'
|
|
|
|
input 'watch a'
|
|
output "Watching a\nwatch: a => 1"
|
|
|
|
input "a = 1"
|
|
output "=> 1"
|
|
end
|
|
end
|
|
|
|
it "continues to work if you start a second pry instance" do
|
|
ReplTester.start do
|
|
input 'a = 1'
|
|
output '=> 1'
|
|
|
|
input 'watch a'
|
|
output "Watching a\nwatch: a => 1"
|
|
|
|
input "a = 2"
|
|
output "watch: a => 2\n=> 2"
|
|
end
|
|
|
|
ReplTester.start do
|
|
input 'b = 1'
|
|
output '=> 1'
|
|
|
|
input 'watch b'
|
|
output "Watching b\nwatch: b => 1"
|
|
|
|
input "b = 2"
|
|
output "watch: b => 2\n=> 2"
|
|
end
|
|
end
|
|
|
|
describe "deleting expressions" do
|
|
before do
|
|
eval 'watch :keeper'
|
|
eval 'watch :delete'
|
|
eval 'watch -d 2'
|
|
end
|
|
|
|
it "keeps keeper" do
|
|
expect(eval('watch')).to match(/keeper/)
|
|
end
|
|
|
|
it "deletes delete" do
|
|
expect(eval('watch')).not_to match(/delete/)
|
|
end
|
|
end
|
|
end
|