pry 0.9.9.6pre2-i386-mingw32 → 0.9.10-i386-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. data/CHANGELOG +41 -0
  2. data/CONTRIBUTORS +27 -26
  3. data/README.markdown +4 -4
  4. data/Rakefile +2 -2
  5. data/lib/pry.rb +25 -19
  6. data/lib/pry/cli.rb +31 -10
  7. data/lib/pry/code.rb +41 -83
  8. data/lib/pry/command.rb +87 -76
  9. data/lib/pry/command_set.rb +13 -20
  10. data/lib/pry/completion.rb +139 -121
  11. data/lib/pry/config.rb +4 -0
  12. data/lib/pry/core_extensions.rb +88 -31
  13. data/lib/pry/default_commands/cd.rb +31 -8
  14. data/lib/pry/default_commands/context.rb +4 -58
  15. data/lib/pry/default_commands/easter_eggs.rb +1 -1
  16. data/lib/pry/default_commands/editing.rb +21 -14
  17. data/lib/pry/default_commands/find_method.rb +5 -7
  18. data/lib/pry/default_commands/gist.rb +187 -0
  19. data/lib/pry/default_commands/hist.rb +6 -6
  20. data/lib/pry/default_commands/input_and_output.rb +73 -129
  21. data/lib/pry/default_commands/introspection.rb +107 -52
  22. data/lib/pry/default_commands/ls.rb +1 -1
  23. data/lib/pry/default_commands/misc.rb +0 -5
  24. data/lib/pry/default_commands/whereami.rb +92 -0
  25. data/lib/pry/helpers/base_helpers.rb +6 -1
  26. data/lib/pry/helpers/command_helpers.rb +30 -9
  27. data/lib/pry/helpers/documentation_helpers.rb +7 -7
  28. data/lib/pry/helpers/options_helpers.rb +1 -1
  29. data/lib/pry/helpers/text.rb +7 -9
  30. data/lib/pry/history.rb +15 -2
  31. data/lib/pry/hooks.rb +1 -1
  32. data/lib/pry/indent.rb +17 -10
  33. data/lib/pry/method.rb +35 -19
  34. data/lib/pry/module_candidate.rb +130 -0
  35. data/lib/pry/pry_class.rb +54 -22
  36. data/lib/pry/pry_instance.rb +71 -14
  37. data/lib/pry/repl_file_loader.rb +80 -0
  38. data/lib/pry/version.rb +1 -1
  39. data/lib/pry/wrapped_module.rb +121 -142
  40. data/pry.gemspec +13 -13
  41. data/test/candidate_helper1.rb +11 -0
  42. data/test/candidate_helper2.rb +8 -0
  43. data/test/helper.rb +16 -0
  44. data/test/test_code.rb +1 -1
  45. data/test/test_command.rb +364 -270
  46. data/test/test_command_integration.rb +235 -267
  47. data/test/test_completion.rb +36 -0
  48. data/test/test_control_d_handler.rb +45 -0
  49. data/test/test_default_commands/example.erb +5 -0
  50. data/test/test_default_commands/test_cd.rb +316 -11
  51. data/test/test_default_commands/test_context.rb +143 -192
  52. data/test/test_default_commands/test_documentation.rb +81 -14
  53. data/test/test_default_commands/test_find_method.rb +10 -2
  54. data/test/test_default_commands/test_input.rb +102 -111
  55. data/test/test_default_commands/test_introspection.rb +17 -12
  56. data/test/test_default_commands/test_ls.rb +8 -6
  57. data/test/test_default_commands/test_shell.rb +18 -15
  58. data/test/test_default_commands/test_show_source.rb +170 -44
  59. data/test/test_exception_whitelist.rb +6 -2
  60. data/test/test_hooks.rb +32 -0
  61. data/test/test_input_stack.rb +19 -16
  62. data/test/test_method.rb +0 -4
  63. data/test/test_prompt.rb +60 -0
  64. data/test/test_pry.rb +23 -31
  65. data/test/test_pry_defaults.rb +75 -57
  66. data/test/test_syntax_checking.rb +12 -11
  67. data/test/test_wrapped_module.rb +103 -0
  68. metadata +72 -26
@@ -1,5 +1,23 @@
1
1
  require 'helper'
2
+
2
3
  describe "commands" do
4
+ before do
5
+ @str_output = StringIO.new
6
+ @o = Object.new
7
+
8
+ # Shortcuts. They save a lot of typing.
9
+ @bs1 = "Pad.bs1 = _pry_.binding_stack.dup"
10
+ @bs2 = "Pad.bs2 = _pry_.binding_stack.dup"
11
+ @bs3 = "Pad.bs3 = _pry_.binding_stack.dup"
12
+
13
+ @self = "Pad.self = self"
14
+
15
+ Pad.bong = "bong"
16
+ end
17
+
18
+ after do
19
+ Pad.clear
20
+ end
3
21
 
4
22
  describe "alias_command" do
5
23
  it 'should make an aliasd command behave like its original' do
@@ -112,56 +130,186 @@ describe "commands" do
112
130
  end
113
131
  end
114
132
 
133
+ describe "Pry::Command#run" do
134
+ it 'should allow running of commands with following whitespace' do
135
+ set = Pry::CommandSet.new do
136
+ import Pry::Commands
137
+ command "test-run" do
138
+ run "cd / "
139
+ end
140
+ end
141
+ redirect_pry_io(InputTester.new("cd 1/2/3/4/5/6", @bs1, "test-run",
142
+ @self, @bs2, "exit-all")) do
143
+ Pry.start(@o, :commands => set)
144
+ end
145
+
146
+ Pad.bs1.size.should == 7
147
+ Pad.self.should == @o
148
+ Pad.bs2.size.should == 1
149
+ end
150
+
151
+ it 'should allow running of cd command when contained in a single string' do
152
+ set = Pry::CommandSet.new do
153
+ import Pry::Commands
154
+ command "test-run" do
155
+ run "cd /"
156
+ end
157
+ end
158
+ redirect_pry_io(InputTester.new("cd 1/2/3/4/5/6", @bs1, "test-run",
159
+ @self, @bs2, "exit-all")) do
160
+ Pry.start(@o, :commands => set)
161
+ end
162
+
163
+ Pad.bs1.size.should == 7
164
+ Pad.self.should == @o
165
+ Pad.bs2.size.should == 1
166
+ end
167
+
168
+ it 'should allow running of cd command when split into array' do
169
+ set = Pry::CommandSet.new do
170
+ import Pry::Commands
171
+ command "test-run" do
172
+ run "cd", "/"
173
+ end
174
+ end
175
+ redirect_pry_io(InputTester.new("cd 1/2/3/4/5/6", @bs1, "test-run",
176
+ @self, @bs2, "exit-all")) do
177
+ Pry.start(@o, :commands => set)
178
+ end
179
+
180
+ Pad.bs1.size.should == 7
181
+ Pad.self.should == @o
182
+ Pad.bs2.size.should == 1
183
+ end
184
+
185
+ it 'should run a command from within a command' do
186
+ klass = Pry::CommandSet.new do
187
+ command "v" do
188
+ output.puts "v command"
189
+ end
190
+
191
+ command "run_v" do
192
+ run "v"
193
+ end
194
+ end
195
+
196
+ Pry.new(:input => InputTester.new("run_v"), :output => @str_output, :commands => klass).rep
197
+
198
+ @str_output.string.should =~ /v command/
199
+ end
200
+
201
+ it 'should run a regex command from within a command' do
202
+ klass = Pry::CommandSet.new do
203
+ command /v(.*)?/ do |arg|
204
+ output.puts "v #{arg}"
205
+ end
206
+
207
+ command "run_v" do
208
+ run "vbaby"
209
+ end
210
+ end
211
+
212
+ redirect_pry_io(InputTester.new("run_v"), @str_output) do
213
+ Pry.new(:commands => klass).rep
214
+ end
215
+
216
+ @str_output.string.should =~ /v baby/
217
+ end
218
+
219
+ it 'should run a command from within a command with arguments' do
220
+ klass = Pry::CommandSet.new do
221
+ command /v(\w+)/ do |arg1, arg2|
222
+ output.puts "v #{arg1} #{arg2}"
223
+ end
224
+
225
+ command "run_v_explicit_parameter" do
226
+ run "vbaby", "param"
227
+ end
228
+
229
+ command "run_v_embedded_parameter" do
230
+ run "vbaby param"
231
+ end
232
+ end
233
+
234
+ ["run_v_explicit_parameter", "run_v_embedded_parameter"].each do |cmd|
235
+ redirect_pry_io(InputTester.new(cmd), @str_output) do
236
+ Pry.new(:commands => klass).rep
237
+ end
238
+ @str_output.string.should =~ /v baby param/
239
+ end
240
+ end
241
+ end
242
+
243
+ describe "Pry#run_command" do
244
+ it 'should run a command in a specified context' do
245
+ b = Pry.binding_for(7)
246
+ p = Pry.new(:output => @str_output)
247
+ p.run_command("ls -m", "", b)
248
+ p.output.string.should =~ /divmod/
249
+ end
250
+
251
+ it 'should run a command that modifies the passed in eval_string' do
252
+ b = Pry.binding_for(7)
253
+ p = Pry.new(:output => @str_output)
254
+ eval_string = "def hello\npeter pan\n"
255
+ p.run_command("amend-line !", eval_string, b)
256
+ eval_string.should =~ /def hello/
257
+ eval_string.should.not =~ /peter pan/
258
+ end
259
+
260
+ it 'should run a command in the context of a session' do
261
+ mock_pry("@session_ivar = 10", "_pry_.run_command('ls')").should =~ /@session_ivar/
262
+ end
263
+ end
264
+
115
265
  it 'should interpolate ruby code into commands' do
116
- klass = Pry::CommandSet.new do
266
+ set = Pry::CommandSet.new do
117
267
  command "hello", "", :keep_retval => true do |arg|
118
268
  arg
119
269
  end
120
270
  end
121
271
 
122
- $test_interpolation = "bing"
123
- str_output = StringIO.new
124
- Pry.new(:input => StringIO.new('hello #{$test_interpolation}'), :output => str_output, :commands => klass).rep
125
- str_output.string.should =~ /bing/
126
- $test_interpolation = nil
272
+ str_input = StringIO.new('hello #{Pad.bong}')
273
+ Pry.new(:input => str_input, :output => @str_output, :commands => set).rep
274
+
275
+ @str_output.string.should =~ /bong/
127
276
  end
128
277
 
129
278
  # bug fix for https://github.com/pry/pry/issues/170
130
279
  it 'should not choke on complex string interpolation when checking if ruby code is a command' do
131
- redirect_pry_io(InputTester.new('/#{Regexp.escape(File.expand_path("."))}/'), str_output = StringIO.new) do
280
+ redirect_pry_io(InputTester.new('/#{Regexp.escape(File.expand_path("."))}/'), @str_output) do
132
281
  pry
133
282
  end
134
283
 
135
- str_output.string.should.not =~ /SyntaxError/
284
+ @str_output.string.should.not =~ /SyntaxError/
136
285
  end
137
286
 
138
287
  it 'should NOT interpolate ruby code into commands if :interpolate => false' do
139
- klass = Pry::CommandSet.new do
288
+ set = Pry::CommandSet.new do
140
289
  command "hello", "", :keep_retval => true, :interpolate => false do |arg|
141
290
  arg
142
291
  end
143
292
  end
144
293
 
145
- $test_interpolation = "bing"
146
- str_output = StringIO.new
147
- Pry.new(:input => StringIO.new('hello #{$test_interpolation}'), :output => str_output, :commands => klass).rep
148
- str_output.string.should =~ /test_interpolation/
149
- $test_interpolation = nil
294
+ str_input = StringIO.new('hello #{Pad.bong}')
295
+ Pry.new(:input => str_input, :output => @str_output, :commands => set).rep
296
+
297
+ @str_output.string.should =~ /Pad\.bong/
150
298
  end
151
299
 
152
300
  it 'should NOT try to interpolate pure ruby code (no commands) ' do
153
- str_output = StringIO.new
154
- Pry.new(:input => StringIO.new('format \'#{aggy}\''), :output => str_output).rep
155
- str_output.string.should.not =~ /NameError/
301
+ Pry.new(:input => StringIO.new('format \'#{aggy}\''), :output => @str_output).rep
302
+ @str_output.string.should.not =~ /NameError/
156
303
 
157
- Pry.new(:input => StringIO.new('format #{aggy}'), :output => str_output).rep
158
- str_output.string.should.not =~ /NameError/
304
+ @str_output = StringIO.new
305
+ Pry.new(:input => StringIO.new('format #{aggy}'), :output => @str_output).rep
306
+ @str_output.string.should.not =~ /NameError/
159
307
 
160
- $test_interpolation = "blah"
161
- Pry.new(:input => StringIO.new('format \'#{$test_interpolation}\''), :output => str_output).rep
308
+ @str_output = StringIO.new
309
+ Pad.interp = "bong"
310
+ Pry.new(:input => StringIO.new('format \'#{Pad.interp}\''), :output => @str_output).rep
162
311
 
163
- str_output.string.should.not =~ /blah/
164
- $test_interpolation = nil
312
+ @str_output.string.should.not =~ /bong/
165
313
  end
166
314
 
167
315
  it 'should create a command with a space in its name' do
@@ -171,12 +319,11 @@ describe "commands" do
171
319
  end
172
320
  end
173
321
 
174
- str_output = StringIO.new
175
- redirect_pry_io(InputTester.new("hello baby", "exit-all"), str_output) do
322
+ redirect_pry_io(InputTester.new("hello baby", "exit-all"), @str_output) do
176
323
  Pry.new(:commands => set).rep
177
324
  end
178
325
 
179
- str_output.string.should =~ /hello baby command/
326
+ @str_output.string.should =~ /hello baby command/
180
327
  end
181
328
 
182
329
  it 'should create a command with a space in its name and pass an argument' do
@@ -186,12 +333,11 @@ describe "commands" do
186
333
  end
187
334
  end
188
335
 
189
- str_output = StringIO.new
190
- redirect_pry_io(InputTester.new("hello baby john"), str_output) do
336
+ redirect_pry_io(InputTester.new("hello baby john"), @str_output) do
191
337
  Pry.new(:commands => set).rep
192
338
  end
193
339
 
194
- str_output.string.should =~ /hello baby command john/
340
+ @str_output.string.should =~ /hello baby command john/
195
341
  end
196
342
 
197
343
  it 'should create a regex command and be able to invoke it' do
@@ -202,12 +348,11 @@ describe "commands" do
202
348
  end
203
349
  end
204
350
 
205
- str_output = StringIO.new
206
- redirect_pry_io(InputTester.new("hello1"), str_output) do
351
+ redirect_pry_io(InputTester.new("hello1"), @str_output) do
207
352
  Pry.new(:commands => set).rep
208
353
  end
209
354
 
210
- str_output.string.should =~ /hello1/
355
+ @str_output.string.should =~ /hello1/
211
356
  end
212
357
 
213
358
  it 'should create a regex command and pass captures into the args list before regular arguments' do
@@ -217,12 +362,11 @@ describe "commands" do
217
362
  end
218
363
  end
219
364
 
220
- str_output = StringIO.new
221
- redirect_pry_io(InputTester.new("hello1 baby"), str_output) do
365
+ redirect_pry_io(InputTester.new("hello1 baby"), @str_output) do
222
366
  Pry.new(:commands => set).rep
223
367
  end
224
368
 
225
- str_output.string.should =~ /hello 1 baby/
369
+ @str_output.string.should =~ /hello 1 baby/
226
370
  end
227
371
 
228
372
  it 'should create a regex command and interpolate the captures' do
@@ -232,14 +376,11 @@ describe "commands" do
232
376
  end
233
377
  end
234
378
 
235
- str_output = StringIO.new
236
- $obj = "bing"
237
- redirect_pry_io(InputTester.new('hello #{$obj}'), str_output) do
379
+ redirect_pry_io(InputTester.new('hello #{Pad.bong}'), @str_output) do
238
380
  Pry.new(:commands => set).rep
239
381
  end
240
382
 
241
- str_output.string.should =~ /hello bing/
242
- $obj = nil
383
+ @str_output.string.should =~ /hello bong/
243
384
  end
244
385
 
245
386
  it 'should create a regex command and arg_string should be interpolated' do
@@ -249,22 +390,16 @@ describe "commands" do
249
390
  end
250
391
  end
251
392
 
252
- str_output = StringIO.new
253
- $a1 = "bing"
254
- $a2 = "bong"
255
- $a3 = "bang"
256
- redirect_pry_io(InputTester.new('hellojohn #{$a1} #{$a2} #{$a3}'), str_output) do
393
+ Pad.bing = "bing"
394
+ Pad.bang = "bang"
395
+ redirect_pry_io(InputTester.new('hellojohn #{Pad.bing} #{Pad.bong} #{Pad.bang}'),
396
+ @str_output) do
257
397
  Pry.new(:commands => set).rep
258
398
  end
259
399
 
260
- str_output.string.should =~ /hello john bing bong bang/
261
-
262
- $a1 = nil
263
- $a2 = nil
264
- $a3 = nil
400
+ @str_output.string.should =~ /hello john bing bong bang/
265
401
  end
266
402
 
267
-
268
403
  it 'if a regex capture is missing it should be nil' do
269
404
  set = Pry::CommandSet.new do
270
405
  command /hello(.)?/, "" do |c1, a1|
@@ -272,22 +407,20 @@ describe "commands" do
272
407
  end
273
408
  end
274
409
 
275
- str_output = StringIO.new
276
- redirect_pry_io(InputTester.new("hello baby"), str_output) do
410
+ redirect_pry_io(InputTester.new("hello baby"), @str_output) do
277
411
  Pry.new(:commands => set).rep
278
412
  end
279
413
 
280
- str_output.string.should =~ /hello nil baby/
414
+ @str_output.string.should =~ /hello nil baby/
281
415
  end
282
416
 
283
- it 'should create a command in a nested context and that command should be accessible from the parent' do
284
- str_output = StringIO.new
417
+ it 'should create a command in a nested context and that command should be accessible from the parent' do
285
418
  x = "@x=nil\ncd 7\n_pry_.commands.instance_eval {\ncommand('bing') { |arg| run arg }\n}\ncd ..\nbing ls\nexit-all"
286
- redirect_pry_io(StringIO.new("@x=nil\ncd 7\n_pry_.commands.instance_eval {\ncommand('bing') { |arg| run arg }\n}\ncd ..\nbing ls\nexit-all"), str_output) do
419
+ redirect_pry_io(StringIO.new("@x=nil\ncd 7\n_pry_.commands.instance_eval {\ncommand('bing') { |arg| run arg }\n}\ncd ..\nbing ls\nexit-all"), @str_output) do
287
420
  Pry.new.repl(0)
288
421
  end
289
422
 
290
- str_output.string.should =~ /@x/
423
+ @str_output.string.should =~ /@x/
291
424
  end
292
425
 
293
426
  it 'should define a command that keeps its return value' do
@@ -296,10 +429,10 @@ describe "commands" do
296
429
  :kept_hello
297
430
  end
298
431
  end
299
- str_output = StringIO.new
300
- Pry.new(:input => StringIO.new("hello\n"), :output => str_output, :commands => klass).rep
301
- str_output.string.should =~ /:kept_hello/
302
- str_output.string.should =~ /=>/
432
+
433
+ Pry.new(:input => StringIO.new("hello\n"), :output => @str_output, :commands => klass).rep
434
+ @str_output.string.should =~ /:kept_hello/
435
+ @str_output.string.should =~ /=>/
303
436
  end
304
437
 
305
438
  it 'should define a command that does NOT keep its return value' do
@@ -308,10 +441,10 @@ describe "commands" do
308
441
  :kept_hello
309
442
  end
310
443
  end
311
- str_output = StringIO.new
312
- Pry.new(:input => StringIO.new("hello\n"), :output => str_output, :commands => klass).rep
313
- (str_output.string =~ /:kept_hello/).should == nil
314
- str_output.string !~ /=>/
444
+
445
+ Pry.new(:input => StringIO.new("hello\n"), :output => @str_output, :commands => klass).rep
446
+ (@str_output.string =~ /:kept_hello/).should == nil
447
+ @str_output.string !~ /=>/
315
448
  end
316
449
 
317
450
  it 'should define a command that keeps its return value even when nil' do
@@ -320,10 +453,11 @@ str_output.string !~ /=>/
320
453
  nil
321
454
  end
322
455
  end
323
- str_output = StringIO.new
324
- Pry.new(:input => StringIO.new("hello\n"), :output => str_output, :commands => klass).rep
325
- str_output.string.should =~ /nil/
326
- str_output.string.should =~ /=>/
456
+
457
+ Pry.new(:input => StringIO.new("hello\n"), :output => @str_output, :commands => klass).rep
458
+
459
+ @str_output.string.should =~ /nil/
460
+ @str_output.string.should =~ /=>/
327
461
  end
328
462
 
329
463
  it 'should define a command that keeps its return value but does not return when value is void' do
@@ -332,9 +466,9 @@ str_output.string !~ /=>/
332
466
  void
333
467
  end
334
468
  end
335
- str_output = StringIO.new
336
- Pry.new(:input => StringIO.new("hello\n"), :output => str_output, :commands => klass).rep
337
- str_output.string.empty?.should == true
469
+
470
+ Pry.new(:input => StringIO.new("hello\n"), :output => @str_output, :commands => klass).rep
471
+ @str_output.string.empty?.should == true
338
472
  end
339
473
 
340
474
  it 'a command (with :keep_retval => false) that replaces eval_string with a valid expression should not have the expression value suppressed' do
@@ -343,9 +477,9 @@ str_output.string !~ /=>/
343
477
  eval_string.replace("6")
344
478
  end
345
479
  end
346
- str_output = StringIO.new
347
- Pry.new(:input => StringIO.new("def yo\nhello\n"), :output => str_output, :commands => klass).rep
348
- str_output.string.should =~ /6/
480
+
481
+ Pry.new(:input => StringIO.new("def yo\nhello\n"), :output => @str_output, :commands => klass).rep
482
+ @str_output.string.should =~ /6/
349
483
  end
350
484
 
351
485
 
@@ -356,10 +490,11 @@ str_output.string !~ /=>/
356
490
  7
357
491
  end
358
492
  end
359
- str_output = StringIO.new
360
- Pry.new(:input => StringIO.new("def yo\nhello\n"), :output => str_output, :commands => klass).rep
361
- str_output.string.should =~ /7/
362
- str_output.string.should.not =~ /6/
493
+
494
+ Pry.new(:input => StringIO.new("def yo\nhello\n"), :output => @str_output, :commands => klass).rep
495
+
496
+ @str_output.string.should =~ /7/
497
+ @str_output.string.should.not =~ /6/
363
498
  end
364
499
 
365
500
  it 'a command that return a value in a multi-line expression should clear the expression and return the value' do
@@ -368,11 +503,11 @@ str_output.string !~ /=>/
368
503
  5
369
504
  end
370
505
  end
371
- str_output = StringIO.new
372
- Pry.new(:input => StringIO.new("def yo\nhello\n"), :output => str_output, :commands => klass).rep
373
- str_output.string.should =~ /5/
374
- end
375
506
 
507
+ Pry.new(:input => StringIO.new("def yo\nhello\n"), :output => @str_output, :commands => klass).rep
508
+
509
+ @str_output.string.should =~ /5/
510
+ end
376
511
 
377
512
  it 'should set the commands default, and the default should be overridable' do
378
513
  klass = Pry::CommandSet.new do
@@ -383,9 +518,8 @@ str_output.string !~ /=>/
383
518
 
384
519
  Pry.commands = klass
385
520
 
386
- str_output = StringIO.new
387
- Pry.new(:input => InputTester.new("hello"), :output => str_output).rep
388
- str_output.string.should =~ /hello world/
521
+ Pry.new(:input => InputTester.new("hello"), :output => @str_output).rep
522
+ @str_output.string.should =~ /hello world/
389
523
 
390
524
  other_klass = Pry::CommandSet.new do
391
525
  command "goodbye", "" do
@@ -393,10 +527,10 @@ str_output.string !~ /=>/
393
527
  end
394
528
  end
395
529
 
396
- str_output = StringIO.new
530
+ @str_output = StringIO.new
397
531
 
398
- Pry.new(:input => InputTester.new("goodbye"), :output => str_output, :commands => other_klass).rep
399
- str_output.string.should =~ /goodbye world/
532
+ Pry.new(:input => InputTester.new("goodbye"), :output => @str_output, :commands => other_klass).rep
533
+ @str_output.string.should =~ /goodbye world/
400
534
  end
401
535
 
402
536
  it 'should inherit commands from Pry::Commands' do
@@ -421,144 +555,6 @@ str_output.string !~ /=>/
421
555
  klass.commands["help"].description.should == "blah"
422
556
  end
423
557
 
424
-
425
- describe "Pry::Command#run" do
426
- it 'should allow running of commands with following whitespace' do
427
- $_scratch = Object.new
428
- o = Object.new
429
-
430
- set = Pry::CommandSet.new do
431
- import Pry::Commands
432
- command "test-run" do
433
- run "cd / "
434
- end
435
- end
436
- redirect_pry_io(InputTester.new("cd 1/2/3/4/5/6/$_scratch",
437
- "@nesting1 = _pry_.binding_stack.size",
438
- "test-run",
439
- "@obj = self",
440
- "@nesting2 = _pry_.binding_stack.size",
441
- "exit-all")) do
442
- Pry.start(o, :commands => set)
443
- end
444
-
445
- $_scratch.instance_variable_get(:@nesting1).should == 8
446
- o.instance_variable_get(:@obj).should == o
447
- o.instance_variable_get(:@nesting2).should == 1
448
- $_scratch = nil
449
- end
450
-
451
- it 'should allow running of cd command when contained in a single string' do
452
- $_scratch = Object.new
453
- o = Object.new
454
-
455
- set = Pry::CommandSet.new do
456
- import Pry::Commands
457
- command "test-run" do
458
- run "cd /"
459
- end
460
- end
461
- redirect_pry_io(InputTester.new("cd 1/2/3/4/5/6/$_scratch",
462
- "@nesting1 = _pry_.binding_stack.size",
463
- "test-run",
464
- "@obj = self",
465
- "@nesting2 = _pry_.binding_stack.size",
466
- "exit-all")) do
467
- Pry.start(o, :commands => set)
468
- end
469
-
470
- $_scratch.instance_variable_get(:@nesting1).should == 8
471
- o.instance_variable_get(:@obj).should == o
472
- o.instance_variable_get(:@nesting2).should == 1
473
- $_scratch = nil
474
- end
475
-
476
- it 'should allow running of cd command when split into array' do
477
- $_scratch = Object.new
478
- o = Object.new
479
-
480
- set = Pry::CommandSet.new do
481
- import Pry::Commands
482
- command "test-run" do
483
- run "cd", "/"
484
- end
485
- end
486
- redirect_pry_io(InputTester.new("cd 1/2/3/4/5/6/$_scratch",
487
- "@nesting1 = _pry_.binding_stack.size",
488
- "test-run",
489
- "@obj = self",
490
- "@nesting2 = _pry_.binding_stack.size",
491
- "exit-all")) do
492
- Pry.start(o, :commands => set)
493
- end
494
-
495
- $_scratch.instance_variable_get(:@nesting1).should == 8
496
- o.instance_variable_get(:@obj).should == o
497
- o.instance_variable_get(:@nesting2).should == 1
498
- $_scratch = nil
499
- end
500
-
501
- it 'should run a command from within a command' do
502
- klass = Pry::CommandSet.new do
503
- command "v" do
504
- output.puts "v command"
505
- end
506
-
507
- command "run_v" do
508
- run "v"
509
- end
510
- end
511
-
512
- str_output = StringIO.new
513
- Pry.new(:input => InputTester.new("run_v"), :output => str_output, :commands => klass).rep
514
- str_output.string.should =~ /v command/
515
- end
516
-
517
- it 'should run a regex command from within a command' do
518
- klass = Pry::CommandSet.new do
519
- command /v(.*)?/ do |arg|
520
- output.puts "v #{arg}"
521
- end
522
-
523
- command "run_v" do
524
- run "vbaby"
525
- end
526
- end
527
-
528
- str_output = StringIO.new
529
- redirect_pry_io(InputTester.new("run_v"), str_output) do
530
- Pry.new(:commands => klass).rep
531
- end
532
-
533
- str_output.string.should =~ /v baby/
534
- end
535
-
536
- it 'should run a command from within a command with arguments' do
537
- klass = Pry::CommandSet.new do
538
- command /v(\w+)/ do |arg1, arg2|
539
- output.puts "v #{arg1} #{arg2}"
540
- end
541
-
542
- command "run_v_explicit_parameter" do
543
- run "vbaby", "param"
544
- end
545
-
546
- command "run_v_embedded_parameter" do
547
- run "vbaby param"
548
- end
549
- end
550
-
551
- ["run_v_explicit_parameter", "run_v_embedded_parameter"].each do |cmd|
552
- str_output = StringIO.new
553
- redirect_pry_io(InputTester.new(cmd), str_output) do
554
- Pry.new(:commands => klass).rep
555
- end
556
- str_output.string.should =~ /v baby param/
557
- end
558
- end
559
-
560
- end
561
-
562
558
  it 'should enable an inherited method to access opts and output and target, due to instance_exec' do
563
559
  klass = Pry::CommandSet.new do
564
560
  command "v" do
@@ -569,11 +565,10 @@ end
569
565
  child_klass = Pry::CommandSet.new klass do
570
566
  end
571
567
 
572
- str_output = StringIO.new
573
568
  Pry.new(:print => proc {}, :input => InputTester.new("v"),
574
- :output => str_output, :commands => child_klass).rep("john")
569
+ :output => @str_output, :commands => child_klass).rep("john")
575
570
 
576
- str_output.string.rstrip.should == "john"
571
+ @str_output.string.rstrip.should == "john"
577
572
  end
578
573
 
579
574
  it 'should import commands from another command object' do
@@ -617,13 +612,12 @@ end
617
612
  # suppress evaluation output
618
613
  Pry.print = proc {}
619
614
 
620
- str_output = StringIO.new
621
- Pry.new(:input => InputTester.new("jump-to"), :output => str_output, :commands => klass).rep
622
- str_output.string.rstrip.should == "jump-to the music"
615
+ Pry.new(:input => InputTester.new("jump-to"), :output => @str_output, :commands => klass).rep
616
+ @str_output.string.rstrip.should == "jump-to the music"
623
617
 
624
- str_output = StringIO.new
625
- Pry.new(:input => InputTester.new("help"), :output => str_output, :commands => klass).rep
626
- str_output.string.should == "help to the music\n"
618
+ @str_output = StringIO.new
619
+ Pry.new(:input => InputTester.new("help"), :output => @str_output, :commands => klass).rep
620
+ @str_output.string.should == "help to the music\n"
627
621
 
628
622
 
629
623
  Pry.reset_defaults
@@ -636,12 +630,11 @@ end
636
630
  pry_tester.input = InputTester.new("command1", "exit-all")
637
631
  pry_tester.commands = CommandTester
638
632
 
639
- str_output = StringIO.new
640
- pry_tester.output = str_output
633
+ pry_tester.output = @str_output
641
634
 
642
635
  pry_tester.rep
643
636
 
644
- str_output.string.should =~ /command1/
637
+ @str_output.string.should =~ /command1/
645
638
  end
646
639
 
647
640
  it 'should run a command with one parameter' do
@@ -650,35 +643,10 @@ end
650
643
  pry_tester.input = InputTester.new("command2 horsey", "exit-all")
651
644
  pry_tester.commands = CommandTester
652
645
 
653
- str_output = StringIO.new
654
- pry_tester.output = str_output
646
+ pry_tester.output = @str_output
655
647
 
656
648
  pry_tester.rep
657
649
 
658
- str_output.string.should =~ /horsey/
650
+ @str_output.string.should =~ /horsey/
659
651
  end
660
652
  end
661
-
662
- describe "Pry#run_command" do
663
- it 'should run a command in a specified context' do
664
- b = Pry.binding_for(7)
665
- p = Pry.new(:output => StringIO.new)
666
- p.run_command("ls -m", "", b)
667
- p.output.string.should =~ /divmod/
668
- end
669
-
670
- it 'should run a command that modifies the passed in eval_string' do
671
- b = Pry.binding_for(7)
672
- p = Pry.new(:output => StringIO.new)
673
- eval_string = "def hello\npeter pan\n"
674
- p.run_command("amend-line !", eval_string, b)
675
- eval_string.should =~ /def hello/
676
- eval_string.should.not =~ /peter pan/
677
- end
678
-
679
- it 'should run a command in the context of a session' do
680
- mock_pry("@session_ivar = 10", "_pry_.run_command('ls')").should =~ /@session_ivar/
681
- end
682
- end
683
-
684
-