pry 0.9.8.4-i386-mswin32 → 0.9.9-i386-mswin32
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/.gitignore +1 -0
- data/CHANGELOG +26 -0
- data/README.markdown +3 -3
- data/lib/pry.rb +9 -1
- data/lib/pry/code.rb +93 -0
- data/lib/pry/command.rb +35 -22
- data/lib/pry/command_set.rb +97 -67
- data/lib/pry/config.rb +63 -10
- data/lib/pry/core_extensions.rb +24 -18
- data/lib/pry/default_commands/context.rb +72 -12
- data/lib/pry/default_commands/easter_eggs.rb +4 -0
- data/lib/pry/default_commands/editing.rb +43 -15
- data/lib/pry/default_commands/find_method.rb +171 -0
- data/lib/pry/default_commands/hist.rb +10 -6
- data/lib/pry/default_commands/introspection.rb +183 -30
- data/lib/pry/default_commands/ls.rb +77 -7
- data/lib/pry/default_commands/misc.rb +1 -0
- data/lib/pry/default_commands/navigating_pry.rb +1 -8
- data/lib/pry/helpers/base_helpers.rb +10 -2
- data/lib/pry/helpers/command_helpers.rb +23 -40
- data/lib/pry/helpers/documentation_helpers.rb +65 -0
- data/lib/pry/indent.rb +17 -4
- data/lib/pry/method.rb +61 -45
- data/lib/pry/pry_class.rb +9 -3
- data/lib/pry/pry_instance.rb +99 -65
- data/lib/pry/rbx_method.rb +2 -9
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +236 -1
- data/pry.gemspec +5 -5
- data/test/helper.rb +22 -0
- data/test/test_command.rb +29 -0
- data/test/test_command_integration.rb +193 -10
- data/test/test_command_set.rb +82 -17
- data/test/test_default_commands/test_cd.rb +16 -0
- data/test/test_default_commands/test_context.rb +61 -0
- data/test/test_default_commands/test_documentation.rb +163 -43
- data/test/test_default_commands/test_find_method.rb +42 -0
- data/test/test_default_commands/test_input.rb +32 -0
- data/test/test_default_commands/test_introspection.rb +50 -197
- data/test/test_default_commands/test_ls.rb +22 -0
- data/test/test_default_commands/test_show_source.rb +306 -0
- data/test/test_pry.rb +3 -3
- data/test/test_pry_defaults.rb +21 -0
- data/test/test_sticky_locals.rb +81 -1
- data/test/test_syntax_checking.rb +7 -6
- metadata +24 -16
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe 'Pry::DefaultCommands::CD' do
|
4
|
+
describe 'cd' do
|
5
|
+
# Regression test for ticket #516.
|
6
|
+
#it 'should be able to cd into the Object BasicObject.' do
|
7
|
+
# mock_pry('cd BasicObject.new').should.not =~ /\Aundefined method `__binding__'/
|
8
|
+
#end
|
9
|
+
|
10
|
+
# Regression test for ticket #516
|
11
|
+
# Possibly move higher up.
|
12
|
+
it 'should not fail with undefined BasicObject#is_a?' do
|
13
|
+
mock_pry('cd BasicObject.new').should.not =~ /undefined method `is_a\?'/
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -44,6 +44,18 @@ describe "Pry::DefaultCommands::Context" do
|
|
44
44
|
Cor.new.blimey!
|
45
45
|
Object.remove_const(:Cor)
|
46
46
|
end
|
47
|
+
|
48
|
+
it 'should work in objects with no method methods' do
|
49
|
+
class Cor
|
50
|
+
def blimey!
|
51
|
+
mock_pry(binding, 'whereami').should =~ /Cor[#]blimey!/
|
52
|
+
end
|
53
|
+
|
54
|
+
def method; "moo"; end
|
55
|
+
end
|
56
|
+
Cor.new.blimey!
|
57
|
+
Object.remove_const(:Cor)
|
58
|
+
end
|
47
59
|
end
|
48
60
|
|
49
61
|
describe "exit" do
|
@@ -267,4 +279,53 @@ describe "Pry::DefaultCommands::Context" do
|
|
267
279
|
$obj.should == :mon_ouie
|
268
280
|
end
|
269
281
|
end
|
282
|
+
|
283
|
+
describe "raise-up" do
|
284
|
+
it "should raise the exception with raise-up" do
|
285
|
+
redirect_pry_io(InputTester.new("raise NoMethodError", "raise-up NoMethodError"),StringIO.new) do
|
286
|
+
lambda { Pry.new.repl(0) }.should.raise NoMethodError
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
it "should raise an unamed exception with raise-up" do
|
291
|
+
redirect_pry_io(InputTester.new("raise 'stop'","raise-up 'noreally'"),StringIO.new) do
|
292
|
+
lambda { Pry.new.repl(0) }.should.raise RuntimeError, "noreally"
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
it "should eat the exception at the last new pry instance on raise-up" do
|
297
|
+
b = Pry.binding_for(:outer)
|
298
|
+
b.eval("x = :inner")
|
299
|
+
|
300
|
+
redirect_pry_io(InputTester.new("x.pry", "raise NoMethodError",
|
301
|
+
"$inner = self", "raise-up NoMethodError", "$outer = self", "exit-all"),StringIO.new) do
|
302
|
+
b.pry
|
303
|
+
end
|
304
|
+
$inner.should == :inner
|
305
|
+
$outer.should == :outer
|
306
|
+
end
|
307
|
+
|
308
|
+
it "should raise the most recently raised exception" do
|
309
|
+
lambda { mock_pry("raise NameError, 'homographery'","raise-up") }.should.raise NameError, 'homographery'
|
310
|
+
end
|
311
|
+
|
312
|
+
it "should allow you to cd up and (eventually) out" do
|
313
|
+
$deep = $inner = $outer = nil
|
314
|
+
b = Pry.binding_for(:outer)
|
315
|
+
b.eval("x = :inner")
|
316
|
+
redirect_pry_io(InputTester.new("cd x", "raise NoMethodError","$inner = self",
|
317
|
+
"deep = :deep", "cd deep","$deep = self","raise-up NoMethodError", "raise-up", "$outer = self", "raise-up", "exit-all"),StringIO.new) do
|
318
|
+
lambda { b.pry }.should.raise NoMethodError
|
319
|
+
end
|
320
|
+
$deep.should == :deep
|
321
|
+
$inner.should == :inner
|
322
|
+
$outer.should == :outer
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
describe "raise-up!" do
|
327
|
+
it "should jump immediately out of nested context's" do
|
328
|
+
lambda { mock_pry("cd 1", "cd 2", "cd 3", "raise-up! 'fancy that...'") }.should.raise RuntimeError, 'fancy that...'
|
329
|
+
end
|
330
|
+
end
|
270
331
|
end
|
@@ -1,66 +1,186 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
|
4
|
-
describe "
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
if !mri18_and_no_real_source_location?
|
4
|
+
describe "Pry::DefaultCommands::Documentation" do
|
5
|
+
describe "show-doc" do
|
6
|
+
it 'should output a method\'s documentation' do
|
7
|
+
redirect_pry_io(InputTester.new("show-doc sample_method", "exit-all"), str_output=StringIO.new) do
|
8
|
+
pry
|
9
|
+
end
|
10
|
+
|
11
|
+
str_output.string.should =~ /sample doc/
|
8
12
|
end
|
9
13
|
|
10
|
-
|
11
|
-
|
14
|
+
it 'should output a method\'s documentation with line numbers' do
|
15
|
+
redirect_pry_io(InputTester.new("show-doc sample_method -l", "exit-all"), str_output=StringIO.new) do
|
16
|
+
pry
|
17
|
+
end
|
12
18
|
|
13
|
-
|
14
|
-
redirect_pry_io(InputTester.new("show-doc sample_method -l", "exit-all"), str_output=StringIO.new) do
|
15
|
-
pry
|
19
|
+
str_output.string.should =~ /\d: sample doc/
|
16
20
|
end
|
17
21
|
|
18
|
-
|
19
|
-
|
22
|
+
it 'should output a method\'s documentation with line numbers (base one)' do
|
23
|
+
redirect_pry_io(InputTester.new("show-doc sample_method -b", "exit-all"), str_output=StringIO.new) do
|
24
|
+
pry
|
25
|
+
end
|
20
26
|
|
21
|
-
|
22
|
-
redirect_pry_io(InputTester.new("show-doc sample_method -b", "exit-all"), str_output=StringIO.new) do
|
23
|
-
pry
|
27
|
+
str_output.string.should =~ /1: sample doc/
|
24
28
|
end
|
25
29
|
|
26
|
-
|
27
|
-
|
30
|
+
it 'should output a method\'s documentation if inside method without needing to use method name' do
|
31
|
+
o = Object.new
|
32
|
+
|
33
|
+
# sample comment
|
34
|
+
def o.sample
|
35
|
+
redirect_pry_io(InputTester.new("show-doc", "exit-all"), $out=StringIO.new) do
|
36
|
+
binding.pry
|
37
|
+
end
|
38
|
+
end
|
39
|
+
o.sample
|
40
|
+
$out.string.should =~ /sample comment/
|
41
|
+
$out = nil
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should be able to find super methods" do
|
45
|
+
|
46
|
+
c = Class.new{
|
47
|
+
# classy initialize!
|
48
|
+
def initialize(*args); end
|
49
|
+
}
|
50
|
+
|
51
|
+
d = Class.new(c){
|
52
|
+
# grungy initialize??
|
53
|
+
def initialize(*args, &block); end
|
54
|
+
}
|
28
55
|
|
29
|
-
|
30
|
-
o = Object.new
|
56
|
+
o = d.new
|
31
57
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
58
|
+
# instancey initialize!
|
59
|
+
def o.initialize; end
|
60
|
+
|
61
|
+
mock_pry(binding, "show-doc o.initialize").should =~ /instancey initialize/
|
62
|
+
mock_pry(binding, "show-doc --super o.initialize").should =~ /grungy initialize/
|
63
|
+
mock_pry(binding, "show-doc o.initialize -ss").should =~ /classy initialize/
|
64
|
+
mock_pry(binding, "show-doc --super o.initialize -ss").should == mock_pry("show-doc Object#initialize")
|
37
65
|
end
|
38
|
-
o.sample
|
39
|
-
$out.string.should =~ /sample comment/
|
40
|
-
$out = nil
|
41
66
|
end
|
42
67
|
|
43
|
-
|
68
|
+
describe "on modules" do
|
69
|
+
before do
|
70
|
+
# god this is boring1
|
71
|
+
class ShowSourceTestClass
|
72
|
+
def alpha
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# god this is boring2
|
77
|
+
module ShowSourceTestModule
|
78
|
+
def alpha
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# god this is boring3
|
83
|
+
ShowSourceTestClassWeirdSyntax = Class.new do
|
84
|
+
def beta
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# god this is boring4
|
89
|
+
ShowSourceTestModuleWeirdSyntax = Module.new do
|
90
|
+
def beta
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
after do
|
96
|
+
Object.remove_const :ShowSourceTestClass
|
97
|
+
Object.remove_const :ShowSourceTestClassWeirdSyntax
|
98
|
+
Object.remove_const :ShowSourceTestModule
|
99
|
+
Object.remove_const :ShowSourceTestModuleWeirdSyntax
|
100
|
+
end
|
44
101
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
102
|
+
describe "basic functionality, should show docs for top-level module definitions" do
|
103
|
+
it 'should show docs for a class' do
|
104
|
+
mock_pry("show-doc ShowSourceTestClass").should =~ /god this is boring1/
|
105
|
+
end
|
49
106
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
}
|
107
|
+
it 'should show docs for a module' do
|
108
|
+
mock_pry("show-doc ShowSourceTestModule").should =~ /god this is boring2/
|
109
|
+
end
|
54
110
|
|
55
|
-
|
111
|
+
it 'should show docs for a class when Const = Class.new syntax is used' do
|
112
|
+
mock_pry("show-doc ShowSourceTestClassWeirdSyntax").should =~ /god this is boring3/
|
113
|
+
end
|
56
114
|
|
57
|
-
|
58
|
-
|
115
|
+
it 'should show docs for a module when Const = Module.new syntax is used' do
|
116
|
+
mock_pry("show-doc ShowSourceTestModuleWeirdSyntax").should =~ /god this is boring4/
|
117
|
+
end
|
118
|
+
end
|
59
119
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
120
|
+
if !Pry::Helpers::BaseHelpers.mri_18?
|
121
|
+
describe "in REPL" do
|
122
|
+
it 'should find class defined in repl' do
|
123
|
+
mock_pry("# hello tobina", "class TobinaMyDog", "def woof", "end", "end", "show-doc TobinaMyDog").should =~ /hello tobina/
|
124
|
+
Object.remove_const :TobinaMyDog
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'should lookup module name with respect to current context' do
|
130
|
+
constant_scope(:AlphaClass, :BetaClass) do
|
131
|
+
|
132
|
+
# top-level beta
|
133
|
+
class BetaClass
|
134
|
+
def alpha
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
class AlphaClass
|
139
|
+
|
140
|
+
# nested beta
|
141
|
+
class BetaClass
|
142
|
+
def beta
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
redirect_pry_io(InputTester.new("show-doc BetaClass", "exit-all"), out=StringIO.new) do
|
148
|
+
AlphaClass.pry
|
149
|
+
end
|
150
|
+
|
151
|
+
out.string.should =~ /nested beta/
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'should lookup nested modules' do
|
156
|
+
constant_scope(:AlphaClass) do
|
157
|
+
class AlphaClass
|
158
|
+
|
159
|
+
# nested beta
|
160
|
+
class BetaClass
|
161
|
+
def beta
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
mock_pry("show-doc AlphaClass::BetaClass").should =~ /nested beta/
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
describe "show-doc -a" do
|
171
|
+
it 'should show the docs for all monkeypatches defined in different files' do
|
172
|
+
|
173
|
+
# local monkeypatch
|
174
|
+
class TestClassForShowSource
|
175
|
+
def beta
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
result = mock_pry("show-doc TestClassForShowSource -a")
|
180
|
+
result.should =~ /used by/
|
181
|
+
result.should =~ /local monkeypatch/
|
182
|
+
end
|
183
|
+
end
|
64
184
|
end
|
65
185
|
end
|
66
186
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
# we turn off the test for MRI 1.8 because our source_location hack
|
4
|
+
# for C methods actually runs the methods - and since it runs ALL
|
5
|
+
# methods (in an attempt to find a match) it runs 'exit' and aborts
|
6
|
+
# the test, causing a failure. We should fix this in the future by
|
7
|
+
# blacklisting certain methods for 1.8 MRI (such as exit, fork, and so on)
|
8
|
+
unless Pry::Helpers::BaseHelpers.mri_18?
|
9
|
+
MyKlass = Class.new do
|
10
|
+
def hello
|
11
|
+
"timothy"
|
12
|
+
end
|
13
|
+
def goodbye
|
14
|
+
"jenny"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "find-command" do
|
19
|
+
describe "find matching methods by name regex (-n option)" do
|
20
|
+
it "should find a method by regex" do
|
21
|
+
mock_pry("find-method hell MyKlass").should =~ /MyKlass.*?hello/m
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should NOT match a method that does not match the regex" do
|
25
|
+
mock_pry("find-method hell MyKlass").should.not =~ /MyKlass.*?goodbye/m
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "find matching methods by content regex (-c option)" do
|
30
|
+
it "should find a method by regex" do
|
31
|
+
mock_pry("find-method -c timothy MyKlass").should =~ /MyKlass.*?hello/m
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should NOT match a method that does not match the regex" do
|
35
|
+
mock_pry("find-method timothy MyKlass").should.not =~ /MyKlass.*?goodbye/m
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
Object.remove_const(:MyKlass)
|
42
|
+
end
|
@@ -347,6 +347,38 @@ describe "Pry::DefaultCommands::Input" do
|
|
347
347
|
str_output.string.should =~ /x\n\d+:.*y\n\d+:.*z/
|
348
348
|
end
|
349
349
|
|
350
|
+
it 'should apply --tail after --grep' do
|
351
|
+
@hist.push "print 1"
|
352
|
+
@hist.push "print 2"
|
353
|
+
@hist.push "puts 3"
|
354
|
+
@hist.push "print 4"
|
355
|
+
@hist.push "puts 5"
|
356
|
+
|
357
|
+
str_output = StringIO.new
|
358
|
+
redirect_pry_io(InputTester.new("hist --tail 2 --grep print", "exit-all"), str_output) do
|
359
|
+
pry
|
360
|
+
end
|
361
|
+
|
362
|
+
str_output.string.each_line.count.should == 2
|
363
|
+
str_output.string.should =~ /\d:.*?print 2\n\d:.*?print 4/
|
364
|
+
end
|
365
|
+
|
366
|
+
it 'should apply --head after --grep' do
|
367
|
+
@hist.push "puts 1"
|
368
|
+
@hist.push "print 2"
|
369
|
+
@hist.push "puts 3"
|
370
|
+
@hist.push "print 4"
|
371
|
+
@hist.push "print 5"
|
372
|
+
|
373
|
+
str_output = StringIO.new
|
374
|
+
redirect_pry_io(InputTester.new("hist --head 2 --grep print", "exit-all"), str_output) do
|
375
|
+
pry
|
376
|
+
end
|
377
|
+
|
378
|
+
str_output.string.each_line.count.should == 2
|
379
|
+
str_output.string.should =~ /\d:.*?print 2\n\d:.*?print 4/
|
380
|
+
end
|
381
|
+
|
350
382
|
# strangeness in this test is due to bug in Readline::HISTORY not
|
351
383
|
# always registering first line of input
|
352
384
|
it 'should return first N lines in history with --head switch' do
|
@@ -83,6 +83,23 @@ describe "Pry::DefaultCommands::Introspection" do
|
|
83
83
|
tf.close(true)
|
84
84
|
end
|
85
85
|
end
|
86
|
+
|
87
|
+
describe do
|
88
|
+
before do
|
89
|
+
@reloading = nil
|
90
|
+
Pry.config.editor = lambda do |file, line, reloading|
|
91
|
+
@file = file; @line = line; @reloading = reloading
|
92
|
+
nil
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should pass the editor a reloading arg" do
|
97
|
+
mock_pry("edit foo.rb")
|
98
|
+
@reloading.should == true
|
99
|
+
mock_pry("edit -n foo.rb")
|
100
|
+
@reloading.should == false
|
101
|
+
end
|
102
|
+
end
|
86
103
|
end
|
87
104
|
|
88
105
|
describe "with --ex" do
|
@@ -244,203 +261,6 @@ describe "Pry::DefaultCommands::Introspection" do
|
|
244
261
|
end
|
245
262
|
end
|
246
263
|
|
247
|
-
describe "show-method" do
|
248
|
-
it 'should output a method\'s source' do
|
249
|
-
str_output = StringIO.new
|
250
|
-
redirect_pry_io(InputTester.new("show-method sample_method", "exit-all"), str_output) do
|
251
|
-
pry
|
252
|
-
end
|
253
|
-
|
254
|
-
str_output.string.should =~ /def sample/
|
255
|
-
end
|
256
|
-
|
257
|
-
it 'should output help' do
|
258
|
-
mock_pry('show-method -h').should =~ /Usage: show-method/
|
259
|
-
end
|
260
|
-
|
261
|
-
it 'should output a method\'s source with line numbers' do
|
262
|
-
str_output = StringIO.new
|
263
|
-
redirect_pry_io(InputTester.new("show-method -l sample_method", "exit-all"), str_output) do
|
264
|
-
pry
|
265
|
-
end
|
266
|
-
|
267
|
-
str_output.string.should =~ /\d+: def sample/
|
268
|
-
end
|
269
|
-
|
270
|
-
it 'should output a method\'s source with line numbers starting at 1' do
|
271
|
-
str_output = StringIO.new
|
272
|
-
redirect_pry_io(InputTester.new("show-method -b sample_method", "exit-all"), str_output) do
|
273
|
-
pry
|
274
|
-
end
|
275
|
-
|
276
|
-
str_output.string.should =~ /1: def sample/
|
277
|
-
end
|
278
|
-
|
279
|
-
it 'should output a method\'s source if inside method without needing to use method name' do
|
280
|
-
$str_output = StringIO.new
|
281
|
-
|
282
|
-
o = Object.new
|
283
|
-
def o.sample
|
284
|
-
redirect_pry_io(InputTester.new("show-method", "exit-all"), $str_output) do
|
285
|
-
binding.pry
|
286
|
-
end
|
287
|
-
end
|
288
|
-
o.sample
|
289
|
-
|
290
|
-
$str_output.string.should =~ /def o.sample/
|
291
|
-
$str_output = nil
|
292
|
-
end
|
293
|
-
|
294
|
-
it 'should output a method\'s source if inside method without needing to use method name, and using the -l switch' do
|
295
|
-
$str_output = StringIO.new
|
296
|
-
|
297
|
-
o = Object.new
|
298
|
-
def o.sample
|
299
|
-
redirect_pry_io(InputTester.new("show-method -l", "exit-all"), $str_output) do
|
300
|
-
binding.pry
|
301
|
-
end
|
302
|
-
end
|
303
|
-
o.sample
|
304
|
-
|
305
|
-
$str_output.string.should =~ /\d+: def o.sample/
|
306
|
-
$str_output = nil
|
307
|
-
end
|
308
|
-
|
309
|
-
it "should find methods even if there are spaces in the arguments" do
|
310
|
-
o = Object.new
|
311
|
-
def o.foo(*bars);
|
312
|
-
"Mr flibble"
|
313
|
-
self;
|
314
|
-
end
|
315
|
-
|
316
|
-
str_output = StringIO.new
|
317
|
-
redirect_pry_io(InputTester.new("show-method o.foo('bar', 'baz bam').foo", "exit-all"), str_output) do
|
318
|
-
binding.pry
|
319
|
-
end
|
320
|
-
str_output.string.should =~ /Mr flibble/
|
321
|
-
end
|
322
|
-
|
323
|
-
it "should find methods even if the object has an overridden method method" do
|
324
|
-
c = Class.new{
|
325
|
-
def method;
|
326
|
-
98
|
327
|
-
end
|
328
|
-
}
|
329
|
-
|
330
|
-
mock_pry(binding, "show-method c.new.method").should =~ /98/
|
331
|
-
end
|
332
|
-
|
333
|
-
it "should find instance_methods even if the class has an override instance_method method" do
|
334
|
-
c = Class.new{
|
335
|
-
def method;
|
336
|
-
98
|
337
|
-
end
|
338
|
-
|
339
|
-
def self.instance_method; 789; end
|
340
|
-
}
|
341
|
-
|
342
|
-
mock_pry(binding, "show-method c#method").should =~ /98/
|
343
|
-
|
344
|
-
end
|
345
|
-
|
346
|
-
it "should find instance methods with -M" do
|
347
|
-
c = Class.new{ def moo; "ve over!"; end }
|
348
|
-
mock_pry(binding, "cd c","show-method -M moo").should =~ /ve over/
|
349
|
-
end
|
350
|
-
|
351
|
-
it "should not find instance methods with -m" do
|
352
|
-
c = Class.new{ def moo; "ve over!"; end }
|
353
|
-
mock_pry(binding, "cd c", "show-method -m moo").should =~ /could not be found/
|
354
|
-
end
|
355
|
-
|
356
|
-
it "should find normal methods with -m" do
|
357
|
-
c = Class.new{ def self.moo; "ve over!"; end }
|
358
|
-
mock_pry(binding, "cd c", "show-method -m moo").should =~ /ve over/
|
359
|
-
end
|
360
|
-
|
361
|
-
it "should not find normal methods with -M" do
|
362
|
-
c = Class.new{ def self.moo; "ve over!"; end }
|
363
|
-
mock_pry(binding, "cd c", "show-method -M moo").should =~ /could not be found/
|
364
|
-
end
|
365
|
-
|
366
|
-
it "should find normal methods with no -M or -m" do
|
367
|
-
c = Class.new{ def self.moo; "ve over!"; end }
|
368
|
-
mock_pry(binding, "cd c", "show-method moo").should =~ /ve over/
|
369
|
-
end
|
370
|
-
|
371
|
-
it "should find instance methods with no -M or -m" do
|
372
|
-
c = Class.new{ def moo; "ve over!"; end }
|
373
|
-
mock_pry(binding, "cd c", "show-method moo").should =~ /ve over/
|
374
|
-
end
|
375
|
-
|
376
|
-
it "should find super methods" do
|
377
|
-
class Foo
|
378
|
-
def foo(*bars)
|
379
|
-
:super_wibble
|
380
|
-
end
|
381
|
-
end
|
382
|
-
o = Foo.new
|
383
|
-
Object.remove_const(:Foo)
|
384
|
-
def o.foo(*bars)
|
385
|
-
:wibble
|
386
|
-
end
|
387
|
-
|
388
|
-
mock_pry(binding, "show-method --super o.foo").should =~ /:super_wibble/
|
389
|
-
|
390
|
-
end
|
391
|
-
|
392
|
-
it "should not raise an exception when a non-extant super method is requested" do
|
393
|
-
o = Object.new
|
394
|
-
def o.foo(*bars); end
|
395
|
-
|
396
|
-
mock_pry(binding, "show-method --super o.foo").should =~ /'self.foo' has no super method/
|
397
|
-
end
|
398
|
-
|
399
|
-
# dynamically defined method source retrieval is only supported in
|
400
|
-
# 1.9 - where Method#source_location is native
|
401
|
-
if RUBY_VERSION =~ /1.9/
|
402
|
-
it 'should output a method\'s source for a method defined inside pry' do
|
403
|
-
str_output = StringIO.new
|
404
|
-
redirect_pry_io(InputTester.new("def dyna_method", ":testing", "end", "show-method dyna_method"), str_output) do
|
405
|
-
TOPLEVEL_BINDING.pry
|
406
|
-
end
|
407
|
-
|
408
|
-
str_output.string.should =~ /def dyna_method/
|
409
|
-
Object.remove_method :dyna_method
|
410
|
-
end
|
411
|
-
|
412
|
-
it 'should output a method\'s source for a method defined inside pry, even if exceptions raised before hand' do
|
413
|
-
str_output = StringIO.new
|
414
|
-
redirect_pry_io(InputTester.new("bad code", "123", "bad code 2", "1 + 2", "def dyna_method", ":testing", "end", "show-method dyna_method"), str_output) do
|
415
|
-
TOPLEVEL_BINDING.pry
|
416
|
-
end
|
417
|
-
|
418
|
-
str_output.string.should =~ /def dyna_method/
|
419
|
-
Object.remove_method :dyna_method
|
420
|
-
end
|
421
|
-
|
422
|
-
it 'should output an instance method\'s source for a method defined inside pry' do
|
423
|
-
str_output = StringIO.new
|
424
|
-
redirect_pry_io(InputTester.new("class A", "def yo", "end", "end", "show-method A#yo"), str_output) do
|
425
|
-
TOPLEVEL_BINDING.pry
|
426
|
-
end
|
427
|
-
|
428
|
-
str_output.string.should =~ /def yo/
|
429
|
-
Object.remove_const :A
|
430
|
-
end
|
431
|
-
|
432
|
-
it 'should output an instance method\'s source for a method defined inside pry using define_method' do
|
433
|
-
str_output = StringIO.new
|
434
|
-
redirect_pry_io(InputTester.new("class A", "define_method(:yup) {}", "end", "show-method A#yup"), str_output) do
|
435
|
-
TOPLEVEL_BINDING.pry
|
436
|
-
end
|
437
|
-
|
438
|
-
str_output.string.should =~ /define_method\(:yup\)/
|
439
|
-
Object.remove_const :A
|
440
|
-
end
|
441
|
-
end
|
442
|
-
end
|
443
|
-
|
444
264
|
describe "edit-method" do
|
445
265
|
describe "on a method defined in a file" do
|
446
266
|
before do
|
@@ -471,6 +291,10 @@ describe "Pry::DefaultCommands::Introspection" do
|
|
471
291
|
super
|
472
292
|
end
|
473
293
|
alias c b
|
294
|
+
|
295
|
+
def y?
|
296
|
+
:because
|
297
|
+
end
|
474
298
|
end
|
475
299
|
EOS
|
476
300
|
@tempfile.flush
|
@@ -572,6 +396,13 @@ describe "Pry::DefaultCommands::Introspection" do
|
|
572
396
|
X.instance_method(:a).owner.should == A
|
573
397
|
X.new.a.should == :maybe
|
574
398
|
end
|
399
|
+
|
400
|
+
it "should successfully replace a method with a question mark" do
|
401
|
+
mock_pry("edit-method -p X#y?")
|
402
|
+
|
403
|
+
X.instance_method(:y?).owner.should == X
|
404
|
+
X.new.y?.should == :maybe
|
405
|
+
end
|
575
406
|
end
|
576
407
|
|
577
408
|
describe 'on an aliased method' do
|
@@ -599,6 +430,28 @@ describe "Pry::DefaultCommands::Introspection" do
|
|
599
430
|
X.new.c.should == :kindaaa
|
600
431
|
end
|
601
432
|
end
|
433
|
+
|
434
|
+
describe 'with three-arg editor' do
|
435
|
+
before do
|
436
|
+
@old_editor = Pry.config.editor
|
437
|
+
@file, @line, @reloading = nil, nil, nil
|
438
|
+
Pry.config.editor = lambda do |file, line, reloading|
|
439
|
+
@file = file; @line = line; @reloading = reloading
|
440
|
+
nil
|
441
|
+
end
|
442
|
+
end
|
443
|
+
after do
|
444
|
+
Pry.config.editor = @old_editor
|
445
|
+
end
|
446
|
+
|
447
|
+
it "should pass the editor a reloading arg" do
|
448
|
+
mock_pry('edit-method X.x')
|
449
|
+
@reloading.should == true
|
450
|
+
mock_pry('edit-method -n X.x')
|
451
|
+
@reloading.should == false
|
452
|
+
end
|
453
|
+
end
|
454
|
+
|
602
455
|
end
|
603
456
|
end
|
604
457
|
|