pry 0.9.7.4-i386-mswin32 → 0.9.8-i386-mswin32
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -3
- data/CHANGELOG +43 -0
- data/README.markdown +3 -1
- data/Rakefile +51 -32
- data/bin/pry +2 -80
- data/lib/pry.rb +33 -26
- data/lib/pry/cli.rb +152 -0
- data/lib/pry/code.rb +351 -0
- data/lib/pry/command.rb +422 -0
- data/lib/pry/command_set.rb +259 -129
- data/lib/pry/commands.rb +0 -1
- data/lib/pry/config.rb +43 -9
- data/lib/pry/default_commands/context.rb +109 -92
- data/lib/pry/default_commands/documentation.rb +174 -63
- data/lib/pry/default_commands/easter_eggs.rb +26 -2
- data/lib/pry/default_commands/gems.rb +65 -37
- data/lib/pry/default_commands/input.rb +175 -243
- data/lib/pry/default_commands/introspection.rb +173 -112
- data/lib/pry/default_commands/ls.rb +96 -114
- data/lib/pry/default_commands/shell.rb +175 -70
- data/lib/pry/helpers/base_helpers.rb +7 -2
- data/lib/pry/helpers/command_helpers.rb +71 -77
- data/lib/pry/helpers/options_helpers.rb +10 -41
- data/lib/pry/helpers/text.rb +24 -4
- data/lib/pry/history.rb +55 -17
- data/lib/pry/history_array.rb +2 -0
- data/lib/pry/hooks.rb +252 -0
- data/lib/pry/indent.rb +9 -5
- data/lib/pry/method.rb +149 -50
- data/lib/pry/plugins.rb +12 -4
- data/lib/pry/pry_class.rb +69 -26
- data/lib/pry/pry_instance.rb +187 -115
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +73 -0
- data/man/pry.1 +195 -0
- data/man/pry.1.html +204 -0
- data/man/pry.1.ronn +141 -0
- data/pry.gemspec +29 -32
- data/test/helper.rb +32 -36
- data/test/test_cli.rb +78 -0
- data/test/test_code.rb +201 -0
- data/test/test_command.rb +327 -0
- data/test/test_command_integration.rb +512 -0
- data/test/test_command_set.rb +338 -12
- data/test/test_completion.rb +1 -1
- data/test/test_default_commands.rb +1 -2
- data/test/test_default_commands/test_context.rb +27 -5
- data/test/test_default_commands/test_documentation.rb +20 -8
- data/test/test_default_commands/test_input.rb +84 -45
- data/test/test_default_commands/test_introspection.rb +74 -17
- data/test/test_default_commands/test_ls.rb +9 -36
- data/test/test_default_commands/test_shell.rb +240 -13
- data/test/test_hooks.rb +490 -0
- data/test/test_indent.rb +2 -0
- data/test/test_method.rb +60 -0
- data/test/test_pry.rb +29 -904
- data/test/test_pry_defaults.rb +380 -0
- data/test/test_pry_history.rb +24 -24
- data/test/test_syntax_checking.rb +63 -0
- data/test/test_wrapped_module.rb +71 -0
- metadata +50 -39
- data/lib/pry/command_context.rb +0 -53
- data/lib/pry/command_processor.rb +0 -181
- data/lib/pry/extended_commands/user_command_api.rb +0 -65
- data/test/test_command_processor.rb +0 -176
data/test/test_command_set.rb
CHANGED
@@ -3,7 +3,10 @@ require 'helper'
|
|
3
3
|
describe Pry::CommandSet do
|
4
4
|
before do
|
5
5
|
@set = Pry::CommandSet.new
|
6
|
-
@ctx =
|
6
|
+
@ctx = {
|
7
|
+
:target => binding,
|
8
|
+
:command_set => @set
|
9
|
+
}
|
7
10
|
end
|
8
11
|
|
9
12
|
it 'should call the block used for the command when it is called' do
|
@@ -24,11 +27,11 @@ describe Pry::CommandSet do
|
|
24
27
|
@set.run_command @ctx, 'foo', 1, 2, 3
|
25
28
|
end
|
26
29
|
|
27
|
-
it 'should use the first argument as
|
30
|
+
it 'should use the first argument as context' do
|
28
31
|
ctx = @ctx
|
29
32
|
|
30
33
|
@set.command 'foo' do
|
31
|
-
self.should == ctx
|
34
|
+
self.context.should == ctx
|
32
35
|
end
|
33
36
|
|
34
37
|
@set.run_command @ctx, 'foo'
|
@@ -50,6 +53,15 @@ describe Pry::CommandSet do
|
|
50
53
|
}.should.raise(Pry::NoCommandError)
|
51
54
|
end
|
52
55
|
|
56
|
+
it 'should be able to remove its own commands, by listing name' do
|
57
|
+
@set.command(/^foo1/, 'desc', :listing => 'foo') {}
|
58
|
+
@set.delete 'foo'
|
59
|
+
|
60
|
+
lambda {
|
61
|
+
@set.run_command @ctx, /^foo1/
|
62
|
+
}.should.raise(Pry::NoCommandError)
|
63
|
+
end
|
64
|
+
|
53
65
|
it 'should be able to import some commands from other sets' do
|
54
66
|
run = false
|
55
67
|
|
@@ -68,6 +80,19 @@ describe Pry::CommandSet do
|
|
68
80
|
}.should.raise(Pry::NoCommandError)
|
69
81
|
end
|
70
82
|
|
83
|
+
it 'should be able to import some commands from other sets using listing name' do
|
84
|
+
run = false
|
85
|
+
|
86
|
+
other_set = Pry::CommandSet.new do
|
87
|
+
command(/^foo1/, 'desc', :listing => 'foo') { run = true }
|
88
|
+
end
|
89
|
+
|
90
|
+
@set.import_from(other_set, 'foo')
|
91
|
+
|
92
|
+
@set.run_command @ctx, /^foo1/
|
93
|
+
run.should == true
|
94
|
+
end
|
95
|
+
|
71
96
|
it 'should be able to import a whole set' do
|
72
97
|
run = []
|
73
98
|
|
@@ -108,16 +133,38 @@ describe Pry::CommandSet do
|
|
108
133
|
run.should == true
|
109
134
|
end
|
110
135
|
|
111
|
-
it
|
136
|
+
it "should be able to alias a method by the command's listing name" do
|
137
|
+
run = false
|
138
|
+
@set.command(/^foo1/, 'stuff', :listing => 'foo') { run = true }
|
139
|
+
|
140
|
+
@set.alias_command 'bar', 'foo'
|
141
|
+
@set.commands['bar'].name.should == 'bar'
|
142
|
+
@set.commands['bar'].description.should == ''
|
143
|
+
|
144
|
+
@set.run_command @ctx, 'bar'
|
145
|
+
run.should == true
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'should be able to change the descriptions of commands' do
|
112
149
|
@set.command('foo', 'bar') {}
|
113
150
|
@set.desc 'foo', 'baz'
|
114
151
|
|
115
152
|
@set.commands['foo'].description.should == 'baz'
|
116
153
|
end
|
117
154
|
|
118
|
-
it 'should
|
155
|
+
it 'should get the descriptions of commands' do
|
156
|
+
@set.command('foo', 'bar') {}
|
157
|
+
@set.desc('foo').should == 'bar'
|
158
|
+
end
|
159
|
+
|
160
|
+
it 'should get the descriptions of commands, by listing' do
|
161
|
+
@set.command(/^foo1/, 'bar', :listing => 'foo') {}
|
162
|
+
@set.desc('foo').should == 'bar'
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'should return Pry::Command::VOID_VALUE for commands by default' do
|
119
166
|
@set.command('foo') { 3 }
|
120
|
-
@set.run_command(@ctx, 'foo').should == Pry::
|
167
|
+
@set.run_command(@ctx, 'foo').should == Pry::Command::VOID_VALUE
|
121
168
|
end
|
122
169
|
|
123
170
|
it 'should be able to keep return values' do
|
@@ -140,7 +187,7 @@ describe Pry::CommandSet do
|
|
140
187
|
end
|
141
188
|
|
142
189
|
@set.run_command(@ctx, 'foo')
|
143
|
-
Pry::
|
190
|
+
Pry::Command.subclass('foo', '', {}, Module.new).new({:target => binding}).should.not.respond_to :my_helper
|
144
191
|
end
|
145
192
|
|
146
193
|
it 'should not recreate a new helper module when helpers is called' do
|
@@ -197,8 +244,8 @@ describe Pry::CommandSet do
|
|
197
244
|
end
|
198
245
|
|
199
246
|
it "should provide a 'help' command" do
|
200
|
-
@ctx
|
201
|
-
@ctx
|
247
|
+
@ctx[:command_set] = @set
|
248
|
+
@ctx[:output] = StringIO.new
|
202
249
|
|
203
250
|
lambda {
|
204
251
|
@set.run_command(@ctx, 'help')
|
@@ -211,12 +258,12 @@ describe Pry::CommandSet do
|
|
211
258
|
@set.command 'moo', "Mooerizes" do; end
|
212
259
|
@set.command 'boo', "Booerizes" do; end
|
213
260
|
|
214
|
-
@ctx
|
215
|
-
@ctx
|
261
|
+
@ctx[:command_set] = @set
|
262
|
+
@ctx[:output] = StringIO.new
|
216
263
|
|
217
264
|
@set.run_command(@ctx, 'help')
|
218
265
|
|
219
|
-
doc = @ctx
|
266
|
+
doc = @ctx[:output].string
|
220
267
|
|
221
268
|
order = [doc.index("boo"),
|
222
269
|
doc.index("foo"),
|
@@ -226,4 +273,283 @@ describe Pry::CommandSet do
|
|
226
273
|
|
227
274
|
order.should == order.sort
|
228
275
|
end
|
276
|
+
|
277
|
+
describe "renaming a command" do
|
278
|
+
it 'should be able to rename and run a command' do
|
279
|
+
run = false
|
280
|
+
@set.command('foo') { run = true }
|
281
|
+
@set.rename_command('bar', 'foo')
|
282
|
+
@set.run_command(@ctx, 'bar')
|
283
|
+
run.should == true
|
284
|
+
end
|
285
|
+
|
286
|
+
it 'should accept listing name when renaming a command' do
|
287
|
+
run = false
|
288
|
+
@set.command('foo', "", :listing => 'love') { run = true }
|
289
|
+
@set.rename_command('bar', 'love')
|
290
|
+
@set.run_command(@ctx, 'bar')
|
291
|
+
run.should == true
|
292
|
+
end
|
293
|
+
|
294
|
+
it 'should raise exception trying to rename non-existent command' do
|
295
|
+
lambda { @set.rename_command('bar', 'foo') }.should.raise ArgumentError
|
296
|
+
end
|
297
|
+
|
298
|
+
it 'should make old command name inaccessible' do
|
299
|
+
@set.command('foo') { }
|
300
|
+
@set.rename_command('bar', 'foo')
|
301
|
+
lambda { @set.run_command(@ctx, 'foo') }.should.raise Pry::NoCommandError
|
302
|
+
end
|
303
|
+
|
304
|
+
|
305
|
+
it 'should be able to pass in options when renaming command' do
|
306
|
+
desc = "hello"
|
307
|
+
listing = "bing"
|
308
|
+
@set.command('foo') { }
|
309
|
+
@set.rename_command('bar', 'foo', :description => desc, :listing => listing, :keep_retval => true)
|
310
|
+
@set.commands['bar'].description.should == desc
|
311
|
+
@set.commands['bar'].options[:listing].should == listing
|
312
|
+
@set.commands['bar'].options[:keep_retval].should == true
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
describe "command decorators - before_command and after_command" do
|
317
|
+
describe "before_command" do
|
318
|
+
it 'should be called before the original command' do
|
319
|
+
foo = []
|
320
|
+
@set.command('foo') { foo << 1 }
|
321
|
+
@set.before_command('foo') { foo << 2 }
|
322
|
+
@set.run_command(@ctx, 'foo')
|
323
|
+
|
324
|
+
foo.should == [2, 1]
|
325
|
+
end
|
326
|
+
|
327
|
+
it 'should be called before the original command, using listing name' do
|
328
|
+
foo = []
|
329
|
+
@set.command(/^foo1/, '', :listing => 'foo') { foo << 1 }
|
330
|
+
@set.before_command('foo') { foo << 2 }
|
331
|
+
@set.run_command(@ctx, /^foo1/)
|
332
|
+
|
333
|
+
foo.should == [2, 1]
|
334
|
+
end
|
335
|
+
|
336
|
+
it 'should share the context with the original command' do
|
337
|
+
@ctx[:target] = "test target string".__binding__
|
338
|
+
before_val = nil
|
339
|
+
orig_val = nil
|
340
|
+
@set.command('foo') { orig_val = target }
|
341
|
+
@set.before_command('foo') { before_val = target }
|
342
|
+
@set.run_command(@ctx, 'foo')
|
343
|
+
|
344
|
+
before_val.should == @ctx[:target]
|
345
|
+
orig_val.should == @ctx[:target]
|
346
|
+
end
|
347
|
+
|
348
|
+
it 'should work when applied multiple times' do
|
349
|
+
foo = []
|
350
|
+
@set.command('foo') { foo << 1 }
|
351
|
+
@set.before_command('foo') { foo << 2 }
|
352
|
+
@set.before_command('foo') { foo << 3 }
|
353
|
+
@set.before_command('foo') { foo << 4 }
|
354
|
+
@set.run_command(@ctx, 'foo')
|
355
|
+
|
356
|
+
foo.should == [4, 3, 2, 1]
|
357
|
+
end
|
358
|
+
|
359
|
+
end
|
360
|
+
|
361
|
+
describe "after_command" do
|
362
|
+
it 'should be called after the original command' do
|
363
|
+
foo = []
|
364
|
+
@set.command('foo') { foo << 1 }
|
365
|
+
@set.after_command('foo') { foo << 2 }
|
366
|
+
@set.run_command(@ctx, 'foo')
|
367
|
+
|
368
|
+
foo.should == [1, 2]
|
369
|
+
end
|
370
|
+
|
371
|
+
it 'should be called after the original command, using listing name' do
|
372
|
+
foo = []
|
373
|
+
@set.command(/^foo1/, '', :listing => 'foo') { foo << 1 }
|
374
|
+
@set.after_command('foo') { foo << 2 }
|
375
|
+
@set.run_command(@ctx, /^foo1/)
|
376
|
+
|
377
|
+
foo.should == [1, 2]
|
378
|
+
end
|
379
|
+
|
380
|
+
it 'should share the context with the original command' do
|
381
|
+
@ctx[:target] = "test target string".__binding__
|
382
|
+
after_val = nil
|
383
|
+
orig_val = nil
|
384
|
+
@set.command('foo') { orig_val = target }
|
385
|
+
@set.after_command('foo') { after_val = target }
|
386
|
+
@set.run_command(@ctx, 'foo')
|
387
|
+
|
388
|
+
after_val.should == @ctx[:target]
|
389
|
+
orig_val.should == @ctx[:target]
|
390
|
+
end
|
391
|
+
|
392
|
+
it 'should determine the return value for the command' do
|
393
|
+
@set.command('foo', 'bar', :keep_retval => true) { 1 }
|
394
|
+
@set.after_command('foo') { 2 }
|
395
|
+
@set.run_command(@ctx, 'foo').should == 2
|
396
|
+
end
|
397
|
+
|
398
|
+
it 'should work when applied multiple times' do
|
399
|
+
foo = []
|
400
|
+
@set.command('foo') { foo << 1 }
|
401
|
+
@set.after_command('foo') { foo << 2 }
|
402
|
+
@set.after_command('foo') { foo << 3 }
|
403
|
+
@set.after_command('foo') { foo << 4 }
|
404
|
+
@set.run_command(@ctx, 'foo')
|
405
|
+
|
406
|
+
foo.should == [1, 2, 3, 4]
|
407
|
+
end
|
408
|
+
end
|
409
|
+
|
410
|
+
describe "before_command and after_command" do
|
411
|
+
it 'should work when combining both before_command and after_command' do
|
412
|
+
foo = []
|
413
|
+
@set.command('foo') { foo << 1 }
|
414
|
+
@set.after_command('foo') { foo << 2 }
|
415
|
+
@set.before_command('foo') { foo << 3 }
|
416
|
+
@set.run_command(@ctx, 'foo')
|
417
|
+
|
418
|
+
foo.should == [3, 1, 2]
|
419
|
+
end
|
420
|
+
|
421
|
+
end
|
422
|
+
|
423
|
+
end
|
424
|
+
|
425
|
+
describe 'find_command' do
|
426
|
+
it 'should find commands with the right string' do
|
427
|
+
cmd = @set.command('rincewind'){ }
|
428
|
+
@set.find_command('rincewind').should == cmd
|
429
|
+
end
|
430
|
+
|
431
|
+
it 'should not find commands with spaces before' do
|
432
|
+
cmd = @set.command('luggage'){ }
|
433
|
+
@set.find_command(' luggage').should == nil
|
434
|
+
end
|
435
|
+
|
436
|
+
it 'should find commands with arguments after' do
|
437
|
+
cmd = @set.command('vetinari'){ }
|
438
|
+
@set.find_command('vetinari --knock 3').should == cmd
|
439
|
+
end
|
440
|
+
|
441
|
+
it 'should find commands with names containing spaces' do
|
442
|
+
cmd = @set.command('nobby nobbs'){ }
|
443
|
+
@set.find_command('nobby nobbs --steal petty-cash').should == cmd
|
444
|
+
end
|
445
|
+
|
446
|
+
it 'should find command defined by regex' do
|
447
|
+
cmd = @set.command(/(capt|captain) vimes/i){ }
|
448
|
+
@set.find_command('Capt Vimes').should == cmd
|
449
|
+
end
|
450
|
+
|
451
|
+
it 'should find commands defined by regex with arguments' do
|
452
|
+
cmd = @set.command(/(cpl|corporal) Carrot/i){ }
|
453
|
+
@set.find_command('cpl carrot --write-home').should == cmd
|
454
|
+
end
|
455
|
+
|
456
|
+
it 'should not find commands by listing' do
|
457
|
+
cmd = @set.command(/werewol(f|ve)s?/, 'only once a month', :listing => "angua"){ }
|
458
|
+
@set.find_command('angua').should == nil
|
459
|
+
end
|
460
|
+
|
461
|
+
it 'should not find commands without command_prefix' do
|
462
|
+
Pry.config.command_prefix = '%'
|
463
|
+
cmd = @set.command('detritus'){ }
|
464
|
+
@set.find_command('detritus').should == nil
|
465
|
+
Pry.config.command_prefix = ''
|
466
|
+
end
|
467
|
+
|
468
|
+
it "should find commands that don't use the prefix" do
|
469
|
+
Pry.config.command_prefix = '%'
|
470
|
+
cmd = @set.command('colon', 'Sergeant Fred', :use_prefix => false){ }
|
471
|
+
@set.find_command('colon').should == cmd
|
472
|
+
Pry.config.command_prefix = ''
|
473
|
+
end
|
474
|
+
end
|
475
|
+
|
476
|
+
describe '.valid_command?' do
|
477
|
+
it 'should be true for commands that can be found' do
|
478
|
+
cmd = @set.command('archchancellor')
|
479
|
+
@set.valid_command?('archchancellor of_the?(:University)').should == true
|
480
|
+
end
|
481
|
+
|
482
|
+
it 'should be false for commands that can\'' do
|
483
|
+
@set.valid_command?('def monkey(ape)').should == false
|
484
|
+
end
|
485
|
+
|
486
|
+
it 'should not cause argument interpolation' do
|
487
|
+
cmd = @set.command('hello')
|
488
|
+
lambda {
|
489
|
+
@set.valid_command?('hello #{raise "futz"}')
|
490
|
+
}.should.not.raise
|
491
|
+
end
|
492
|
+
end
|
493
|
+
|
494
|
+
describe '.process_line' do
|
495
|
+
|
496
|
+
it 'should return Result.new(false) if there is no matching command' do
|
497
|
+
result = @set.process_line('1 + 42')
|
498
|
+
result.command?.should == false
|
499
|
+
result.void_command?.should == false
|
500
|
+
result.retval.should == nil
|
501
|
+
end
|
502
|
+
|
503
|
+
it 'should return Result.new(true, VOID) if the command is not keep_retval' do
|
504
|
+
@set.create_command('mrs-cake') do
|
505
|
+
def process; 42; end
|
506
|
+
end
|
507
|
+
|
508
|
+
result = @set.process_line('mrs-cake')
|
509
|
+
result.command?.should == true
|
510
|
+
result.void_command?.should == true
|
511
|
+
result.retval.should == Pry::Command::VOID_VALUE
|
512
|
+
end
|
513
|
+
|
514
|
+
it 'should return Result.new(true, retval) if the command is keep_retval' do
|
515
|
+
@set.create_command('magrat', 'the maiden', :keep_retval => true) do
|
516
|
+
def process; 42; end
|
517
|
+
end
|
518
|
+
|
519
|
+
result = @set.process_line('magrat')
|
520
|
+
result.command?.should == true
|
521
|
+
result.void_command?.should == false
|
522
|
+
result.retval.should == 42
|
523
|
+
end
|
524
|
+
|
525
|
+
it 'should pass through context' do
|
526
|
+
ctx = {
|
527
|
+
:eval_string => "bloomers",
|
528
|
+
:pry_instance => Object.new,
|
529
|
+
:output => StringIO.new,
|
530
|
+
:target => binding
|
531
|
+
}
|
532
|
+
@set.create_command('agnes') do
|
533
|
+
define_method(:process) do
|
534
|
+
eval_string.should == ctx[:eval_string]
|
535
|
+
output.should == ctx[:output]
|
536
|
+
target.should == ctx[:target]
|
537
|
+
_pry_.should == ctx[:pry_instance]
|
538
|
+
end
|
539
|
+
end
|
540
|
+
|
541
|
+
@set.process_line('agnes', ctx)
|
542
|
+
end
|
543
|
+
|
544
|
+
it 'should add command_set to context' do
|
545
|
+
set = @set
|
546
|
+
@set.create_command(/nann+y ogg+/) do
|
547
|
+
define_method(:process) do
|
548
|
+
command_set.should == set
|
549
|
+
end
|
550
|
+
end
|
551
|
+
|
552
|
+
@set.process_line('nannnnnny oggggg')
|
553
|
+
end
|
554
|
+
end
|
229
555
|
end
|
data/test/test_completion.rb
CHANGED
@@ -16,7 +16,7 @@ describe Pry::InputCompleter do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
# another jruby hack :((
|
19
|
-
if !jruby?
|
19
|
+
if !Pry::Helpers::BaseHelpers.jruby?
|
20
20
|
it "should not crash if there's a Module that has a symbolic name." do
|
21
21
|
completer = Pry::InputCompleter.build_completion_proc(Pry.binding_for(Object.new))
|
22
22
|
lambda{ completer.call "a.to_s." }.should.not.raise Exception
|
@@ -7,8 +7,7 @@ describe "Pry::Commands" do
|
|
7
7
|
redirect_pry_io(InputTester.new("help ls", "exit-all"), str_output) do
|
8
8
|
pry
|
9
9
|
end
|
10
|
-
str_output.string.
|
11
|
-
str_output.string.should =~ /ls --help/
|
10
|
+
str_output.string.should =~ /Usage: ls/
|
12
11
|
end
|
13
12
|
|
14
13
|
it 'should display help for a regex command with a "listing"' do
|
@@ -2,9 +2,9 @@ require 'helper'
|
|
2
2
|
|
3
3
|
describe "Pry::DefaultCommands::Context" do
|
4
4
|
describe "exit-all" do
|
5
|
-
it 'should break out of the repl loop of Pry instance
|
5
|
+
it 'should break out of the repl loop of Pry instance and return nil' do
|
6
6
|
redirect_pry_io(InputTester.new("exit-all"), StringIO.new) do
|
7
|
-
Pry.new.repl(0).should ==
|
7
|
+
Pry.new.repl(0).should == nil
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
@@ -31,6 +31,21 @@ describe "Pry::DefaultCommands::Context" do
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
describe "whereami" do
|
35
|
+
it 'should work with methods that have been undefined' do
|
36
|
+
class Cor
|
37
|
+
def blimey!
|
38
|
+
Cor.send :undef_method, :blimey!
|
39
|
+
# using [.] so the regex doesn't match itself
|
40
|
+
mock_pry(binding, 'whereami').should =~ /self[.]blimey!/
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
Cor.new.blimey!
|
45
|
+
Object.remove_const(:Cor)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
34
49
|
describe "exit" do
|
35
50
|
it 'should pop a binding with exit' do
|
36
51
|
b = Pry.binding_for(:outer)
|
@@ -44,7 +59,7 @@ describe "Pry::DefaultCommands::Context" do
|
|
44
59
|
end
|
45
60
|
|
46
61
|
it 'should break out of the repl loop of Pry instance when binding_stack has only one binding with exit' do
|
47
|
-
Pry.start(0, :input => StringIO.new("exit")).should ==
|
62
|
+
Pry.start(0, :input => StringIO.new("exit")).should == nil
|
48
63
|
end
|
49
64
|
|
50
65
|
it 'should break out of the repl loop of Pry instance when binding_stack has only one binding with exit, and return user-given value' do
|
@@ -126,8 +141,15 @@ describe "Pry::DefaultCommands::Context" do
|
|
126
141
|
$outer.should == :outer
|
127
142
|
end
|
128
143
|
|
129
|
-
it
|
130
|
-
Pry.
|
144
|
+
it "should not leave the REPL session when given 'cd ..'" do
|
145
|
+
b = Pry.binding_for(Object.new)
|
146
|
+
input = InputTester.new "cd ..", "$obj = self", "exit-all"
|
147
|
+
|
148
|
+
redirect_pry_io(input, StringIO.new) do
|
149
|
+
b.pry
|
150
|
+
end
|
151
|
+
|
152
|
+
$obj.should == b.eval("self")
|
131
153
|
end
|
132
154
|
|
133
155
|
it 'should break out to outer-most session with cd /' do
|