pry 0.9.8pre2-java → 0.9.8pre3-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +8 -6
- data/lib/pry.rb +5 -4
- data/lib/pry/command.rb +396 -0
- data/lib/pry/command_set.rb +112 -95
- data/lib/pry/default_commands/documentation.rb +153 -82
- data/lib/pry/default_commands/easter_eggs.rb +25 -1
- data/lib/pry/default_commands/input.rb +4 -30
- data/lib/pry/default_commands/introspection.rb +69 -66
- data/lib/pry/default_commands/ls.rb +91 -94
- data/lib/pry/default_commands/shell.rb +1 -1
- data/lib/pry/helpers/base_helpers.rb +7 -2
- data/lib/pry/helpers/command_helpers.rb +29 -4
- data/lib/pry/helpers/options_helpers.rb +6 -40
- data/lib/pry/helpers/text.rb +1 -1
- data/lib/pry/method.rb +42 -4
- data/lib/pry/pry_class.rb +16 -6
- data/lib/pry/pry_instance.rb +15 -7
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +1 -1
- data/pry.gemspec +11 -11
- data/test/helper.rb +8 -12
- data/test/test_command.rb +317 -0
- data/test/test_command_set.rb +152 -18
- data/test/test_completion.rb +1 -1
- data/test/test_default_commands.rb +1 -2
- data/test/test_default_commands/test_introspection.rb +6 -6
- data/test/test_default_commands/test_ls.rb +1 -1
- data/test/test_default_commands/test_shell.rb +4 -2
- data/test/test_hooks.rb +16 -0
- data/test/test_method.rb +50 -0
- data/test/test_pry.rb +37 -39
- data/test/test_syntax_checking.rb +1 -1
- metadata +80 -75
- data/lib/pry/command_context.rb +0 -53
- data/lib/pry/command_processor.rb +0 -194
- data/test/test_command_processor.rb +0 -176
@@ -0,0 +1,317 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe "Pry::Command" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@set = Pry::CommandSet.new
|
7
|
+
end
|
8
|
+
|
9
|
+
describe 'call_safely' do
|
10
|
+
|
11
|
+
it 'should display a message if gems are missing' do
|
12
|
+
cmd = @set.command_class "ford-prefect", "From a planet near Beetlegeuse", :requires_gem => %w(ghijkl) do
|
13
|
+
#
|
14
|
+
end
|
15
|
+
|
16
|
+
mock_command(cmd, %w(hello world)).output.should =~ /install-command ford-prefect/
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should abort early if arguments are required' do
|
20
|
+
cmd = @set.command_class 'arthur-dent', "Doesn't understand Thursdays", :argument_required => true do
|
21
|
+
#
|
22
|
+
end
|
23
|
+
|
24
|
+
lambda {
|
25
|
+
mock_command(cmd, %w())
|
26
|
+
}.should.raise(Pry::CommandError)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should return VOID without keep_retval' do
|
30
|
+
cmd = @set.command_class 'zaphod-beeblebrox', "Likes pan-Galactic Gargle Blasters" do
|
31
|
+
def process
|
32
|
+
3
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
mock_command(cmd).return.should == Pry::Command::VOID_VALUE
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should return the return value with keep_retval' do
|
40
|
+
cmd = @set.command_class 'tricia-mcmillian', "a.k.a Trillian", :keep_retval => true do
|
41
|
+
def process
|
42
|
+
5
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
mock_command(cmd).return.should == 5
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should call hooks in the right order' do
|
50
|
+
cmd = @set.command_class 'marvin', "Pained by the diodes in his left side" do
|
51
|
+
def process
|
52
|
+
output.puts 3 + args[0].to_i
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
@set.before_command 'marvin' do |i|
|
57
|
+
output.puts 2 + i.to_i
|
58
|
+
end
|
59
|
+
@set.before_command 'marvin' do |i|
|
60
|
+
output.puts 1 + i.to_i
|
61
|
+
end
|
62
|
+
|
63
|
+
@set.after_command 'marvin' do |i|
|
64
|
+
output.puts 4 + i.to_i
|
65
|
+
end
|
66
|
+
|
67
|
+
@set.after_command 'marvin' do |i|
|
68
|
+
output.puts 5 + i.to_i
|
69
|
+
end
|
70
|
+
|
71
|
+
mock_command(cmd, %w(2)).output.should == "3\n4\n5\n6\n7\n"
|
72
|
+
end
|
73
|
+
|
74
|
+
# TODO: This strikes me as rather silly...
|
75
|
+
it 'should return the value from the last hook with keep_retval' do
|
76
|
+
cmd = @set.command_class 'slartibartfast', "Designs Fjords", :keep_retval => true do
|
77
|
+
def process
|
78
|
+
22
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
@set.after_command 'slartibartfast' do
|
83
|
+
10
|
84
|
+
end
|
85
|
+
|
86
|
+
mock_command(cmd).return.should == 10
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe 'help' do
|
91
|
+
it 'should default to the description for blocky commands' do
|
92
|
+
@set.command 'oolon-colluphid', "Raving Atheist" do
|
93
|
+
#
|
94
|
+
end
|
95
|
+
|
96
|
+
mock_command(@set.commands['help'], %w(oolon-colluphid), :command_set => @set).output.should =~ /Raving Atheist/
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'should use slop to generate the help for classy commands' do
|
100
|
+
@set.command_class 'eddie', "The ship-board computer" do
|
101
|
+
def options(opt)
|
102
|
+
opt.banner "Over-cheerful, and makes a ticking noise."
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
mock_command(@set.commands['help'], %w(eddie), :command_set => @set).output.should =~ /Over-cheerful/
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'should provide --help for classy commands' do
|
110
|
+
cmd = @set.command_class 'agrajag', "Killed many times by Arthur" do
|
111
|
+
def options(opt)
|
112
|
+
opt.on :r, :retaliate, "Try to get Arthur back"
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
mock_command(cmd, %w(--help)).output.should =~ /--retaliate/
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'should provide a -h for classy commands' do
|
120
|
+
cmd = @set.command_class 'zarniwoop', "On an intergalactic cruise, in his office." do
|
121
|
+
def options(opt)
|
122
|
+
opt.on :e, :escape, "Help zaphod escape the Total Perspective Vortex"
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
mock_command(cmd, %w(--help)).output.should =~ /Total Perspective Vortex/
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'should use the banner provided' do
|
130
|
+
cmd = @set.command_class 'deep-thought', "The second-best computer ever" do
|
131
|
+
banner <<-BANNER
|
132
|
+
Who's merest operational parameters, I am not worthy to compute.
|
133
|
+
BANNER
|
134
|
+
end
|
135
|
+
|
136
|
+
mock_command(cmd, %w(--help)).output.should =~ /Who\'s merest/
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
|
141
|
+
describe 'context' do
|
142
|
+
context = {
|
143
|
+
:target => binding,
|
144
|
+
:output => StringIO.new,
|
145
|
+
:eval_string => "eval-string",
|
146
|
+
:command_set => @set,
|
147
|
+
:pry_instance => Object.new
|
148
|
+
}
|
149
|
+
|
150
|
+
it 'should capture lots of stuff from the hash passed to new before setup' do
|
151
|
+
cmd = @set.command_class 'fenchurch', "Floats slightly off the ground" do
|
152
|
+
define_method(:setup) do
|
153
|
+
self.context.should == context
|
154
|
+
target.should == context[:target]
|
155
|
+
target_self.should == context[:target].eval('self')
|
156
|
+
output.should == context[:output]
|
157
|
+
end
|
158
|
+
|
159
|
+
define_method(:process) do
|
160
|
+
eval_string.should == "eval-string"
|
161
|
+
command_set.should == @set
|
162
|
+
_pry_.should == context[:pry_instance]
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
cmd.new(context).call
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
describe 'classy api' do
|
171
|
+
|
172
|
+
it 'should call setup, then options, then process' do
|
173
|
+
cmd = @set.command_class 'rooster', "Has a tasty towel" do
|
174
|
+
def setup
|
175
|
+
output.puts "setup"
|
176
|
+
end
|
177
|
+
|
178
|
+
def options(opt)
|
179
|
+
output.puts "options"
|
180
|
+
end
|
181
|
+
|
182
|
+
def process
|
183
|
+
output.puts "process"
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
mock_command(cmd).output.should == "setup\noptions\nprocess\n"
|
188
|
+
end
|
189
|
+
|
190
|
+
it 'should raise a command error if process is not overridden' do
|
191
|
+
cmd = @set.command_class 'jeltz', "Commander of a Vogon constructor fleet" do
|
192
|
+
def proccces
|
193
|
+
#
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
lambda {
|
198
|
+
mock_command(cmd)
|
199
|
+
}.should.raise(Pry::CommandError)
|
200
|
+
end
|
201
|
+
|
202
|
+
it 'should work if neither options, nor setup is overridden' do
|
203
|
+
cmd = @set.command_class 'wowbagger', "Immortal, insulting.", :keep_retval => true do
|
204
|
+
def process
|
205
|
+
5
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
mock_command(cmd).return.should == 5
|
210
|
+
end
|
211
|
+
|
212
|
+
it 'should provide opts and args as provided by slop' do
|
213
|
+
cmd = @set.command_class 'lintilla', "One of 800,000,000 clones" do
|
214
|
+
def options(opt)
|
215
|
+
opt.on :f, :four, "A numeric four", :as => Integer, :optional => true
|
216
|
+
end
|
217
|
+
|
218
|
+
def process
|
219
|
+
args.should == ['four']
|
220
|
+
opts[:f].should == 4
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
mock_command(cmd, %w(--four 4 four))
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
describe 'tokenize' do
|
229
|
+
it 'should interpolate string with #{} in them' do
|
230
|
+
cmd = @set.command 'random-dent' do |*args|
|
231
|
+
args.should == ["3", "8"]
|
232
|
+
end
|
233
|
+
|
234
|
+
foo = 5
|
235
|
+
|
236
|
+
cmd.new(:target => binding).process_line 'random-dent #{1 + 2} #{3 + foo}'
|
237
|
+
end
|
238
|
+
|
239
|
+
it 'should not fail if interpolation is not needed and target is not set' do
|
240
|
+
cmd = @set.command 'the-book' do |*args|
|
241
|
+
args.should == ['--help']
|
242
|
+
end
|
243
|
+
|
244
|
+
cmd.new.process_line 'the-book --help'
|
245
|
+
end
|
246
|
+
|
247
|
+
it 'should not interpolate commands with :interpolate => false' do
|
248
|
+
cmd = @set.command 'thor', 'norse god', :interpolate => false do |*args|
|
249
|
+
args.should == ['%(#{foo})']
|
250
|
+
end
|
251
|
+
|
252
|
+
cmd.new.process_line 'thor %(#{foo})'
|
253
|
+
end
|
254
|
+
|
255
|
+
it 'should use shell-words to split strings' do
|
256
|
+
cmd = @set.command 'eccentrica' do |*args|
|
257
|
+
args.should == ['gallumbits', 'eroticon', '6']
|
258
|
+
end
|
259
|
+
|
260
|
+
cmd.new.process_line %(eccentrica "gallumbits" 'erot''icon' 6)
|
261
|
+
end
|
262
|
+
|
263
|
+
it 'should split on spaces if shellwords is not used' do
|
264
|
+
cmd = @set.command 'bugblatter-beast', 'would eat its grandmother', :shellwords => false do |*args|
|
265
|
+
args.should == ['"of', 'traal"']
|
266
|
+
end
|
267
|
+
|
268
|
+
cmd.new.process_line %(bugblatter-beast "of traal")
|
269
|
+
end
|
270
|
+
|
271
|
+
it 'should add captures to arguments for regex commands' do
|
272
|
+
cmd = @set.command /perfectly (normal)( beast)?/i do |*args|
|
273
|
+
args.should == ['Normal', ' Beast', '(honest!)']
|
274
|
+
end
|
275
|
+
|
276
|
+
cmd.new.process_line %(Perfectly Normal Beast (honest!))
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
describe 'process_line' do
|
281
|
+
it 'should check for command name collisions if configured' do
|
282
|
+
old = Pry.config.collision_warning
|
283
|
+
Pry.config.collision_warning = true
|
284
|
+
|
285
|
+
cmd = @set.command 'frankie' do
|
286
|
+
|
287
|
+
end
|
288
|
+
|
289
|
+
frankie = 'boyle'
|
290
|
+
output = StringIO.new
|
291
|
+
cmd.new(:target => binding, :output => output).process_line %(frankie mouse)
|
292
|
+
|
293
|
+
output.string.should =~ /Command name collision/
|
294
|
+
|
295
|
+
Pry.config.collision_warning = old
|
296
|
+
end
|
297
|
+
|
298
|
+
it "should set the commands' arg_string and captures" do
|
299
|
+
|
300
|
+
cmd = @set.command /benj(ie|ei)/ do |*args|
|
301
|
+
self.arg_string.should == "mouse"
|
302
|
+
self.captures.should == ['ie']
|
303
|
+
args.should == ['ie', 'mouse']
|
304
|
+
end
|
305
|
+
|
306
|
+
cmd.new.process_line %(benjie mouse)
|
307
|
+
end
|
308
|
+
|
309
|
+
it "should raise an error if the line doesn't match the command" do
|
310
|
+
cmd = @set.command 'grunthos', 'the flatulent'
|
311
|
+
|
312
|
+
lambda {
|
313
|
+
cmd.new.process_line %(grumpos)
|
314
|
+
}.should.raise(Pry::CommandError)
|
315
|
+
end
|
316
|
+
end
|
317
|
+
end
|
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'
|
@@ -159,9 +162,9 @@ describe Pry::CommandSet do
|
|
159
162
|
@set.desc('foo').should == 'bar'
|
160
163
|
end
|
161
164
|
|
162
|
-
it 'should return Pry::
|
165
|
+
it 'should return Pry::Command::VOID_VALUE for commands by default' do
|
163
166
|
@set.command('foo') { 3 }
|
164
|
-
@set.run_command(@ctx, 'foo').should == Pry::
|
167
|
+
@set.run_command(@ctx, 'foo').should == Pry::Command::VOID_VALUE
|
165
168
|
end
|
166
169
|
|
167
170
|
it 'should be able to keep return values' do
|
@@ -184,7 +187,7 @@ describe Pry::CommandSet do
|
|
184
187
|
end
|
185
188
|
|
186
189
|
@set.run_command(@ctx, 'foo')
|
187
|
-
Pry::
|
190
|
+
Pry::Command.subclass('foo', '', {}, Module.new).new({:target => binding}).should.not.respond_to :my_helper
|
188
191
|
end
|
189
192
|
|
190
193
|
it 'should not recreate a new helper module when helpers is called' do
|
@@ -241,8 +244,8 @@ describe Pry::CommandSet do
|
|
241
244
|
end
|
242
245
|
|
243
246
|
it "should provide a 'help' command" do
|
244
|
-
@ctx
|
245
|
-
@ctx
|
247
|
+
@ctx[:command_set] = @set
|
248
|
+
@ctx[:output] = StringIO.new
|
246
249
|
|
247
250
|
lambda {
|
248
251
|
@set.run_command(@ctx, 'help')
|
@@ -255,12 +258,12 @@ describe Pry::CommandSet do
|
|
255
258
|
@set.command 'moo', "Mooerizes" do; end
|
256
259
|
@set.command 'boo', "Booerizes" do; end
|
257
260
|
|
258
|
-
@ctx
|
259
|
-
@ctx
|
261
|
+
@ctx[:command_set] = @set
|
262
|
+
@ctx[:output] = StringIO.new
|
260
263
|
|
261
264
|
@set.run_command(@ctx, 'help')
|
262
265
|
|
263
|
-
doc = @ctx
|
266
|
+
doc = @ctx[:output].string
|
264
267
|
|
265
268
|
order = [doc.index("boo"),
|
266
269
|
doc.index("foo"),
|
@@ -331,15 +334,15 @@ describe Pry::CommandSet do
|
|
331
334
|
end
|
332
335
|
|
333
336
|
it 'should share the context with the original command' do
|
334
|
-
@ctx
|
337
|
+
@ctx[:target] = "test target string".__binding__
|
335
338
|
before_val = nil
|
336
339
|
orig_val = nil
|
337
340
|
@set.command('foo') { orig_val = target }
|
338
341
|
@set.before_command('foo') { before_val = target }
|
339
342
|
@set.run_command(@ctx, 'foo')
|
340
343
|
|
341
|
-
before_val.should == @ctx
|
342
|
-
orig_val.should == @ctx
|
344
|
+
before_val.should == @ctx[:target]
|
345
|
+
orig_val.should == @ctx[:target]
|
343
346
|
end
|
344
347
|
|
345
348
|
it 'should work when applied multiple times' do
|
@@ -375,15 +378,15 @@ describe Pry::CommandSet do
|
|
375
378
|
end
|
376
379
|
|
377
380
|
it 'should share the context with the original command' do
|
378
|
-
@ctx
|
379
|
-
after_val
|
381
|
+
@ctx[:target] = "test target string".__binding__
|
382
|
+
after_val = nil
|
380
383
|
orig_val = nil
|
381
384
|
@set.command('foo') { orig_val = target }
|
382
385
|
@set.after_command('foo') { after_val = target }
|
383
386
|
@set.run_command(@ctx, 'foo')
|
384
387
|
|
385
|
-
after_val.should == @ctx
|
386
|
-
orig_val.should == @ctx
|
388
|
+
after_val.should == @ctx[:target]
|
389
|
+
orig_val.should == @ctx[:target]
|
387
390
|
end
|
388
391
|
|
389
392
|
it 'should determine the return value for the command' do
|
@@ -418,4 +421,135 @@ describe Pry::CommandSet do
|
|
418
421
|
end
|
419
422
|
|
420
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.command_class('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.command_class('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.command_class('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.command_class(/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
|
421
555
|
end
|