pry 0.9.9.6pre2-java → 0.9.10-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/CHANGELOG +41 -0
- data/CONTRIBUTORS +27 -26
- data/README.markdown +4 -4
- data/Rakefile +2 -2
- data/lib/pry.rb +25 -19
- data/lib/pry/cli.rb +31 -10
- data/lib/pry/code.rb +41 -83
- data/lib/pry/command.rb +87 -76
- data/lib/pry/command_set.rb +13 -20
- data/lib/pry/completion.rb +139 -121
- data/lib/pry/config.rb +4 -0
- data/lib/pry/core_extensions.rb +88 -31
- data/lib/pry/default_commands/cd.rb +31 -8
- data/lib/pry/default_commands/context.rb +4 -58
- data/lib/pry/default_commands/easter_eggs.rb +1 -1
- data/lib/pry/default_commands/editing.rb +21 -14
- data/lib/pry/default_commands/find_method.rb +5 -7
- data/lib/pry/default_commands/gist.rb +187 -0
- data/lib/pry/default_commands/hist.rb +6 -6
- data/lib/pry/default_commands/input_and_output.rb +73 -129
- data/lib/pry/default_commands/introspection.rb +107 -52
- data/lib/pry/default_commands/ls.rb +1 -1
- data/lib/pry/default_commands/misc.rb +0 -5
- data/lib/pry/default_commands/whereami.rb +92 -0
- data/lib/pry/helpers/base_helpers.rb +6 -1
- data/lib/pry/helpers/command_helpers.rb +30 -9
- data/lib/pry/helpers/documentation_helpers.rb +7 -7
- data/lib/pry/helpers/options_helpers.rb +1 -1
- data/lib/pry/helpers/text.rb +7 -9
- data/lib/pry/history.rb +15 -2
- data/lib/pry/hooks.rb +1 -1
- data/lib/pry/indent.rb +17 -10
- data/lib/pry/method.rb +35 -19
- data/lib/pry/module_candidate.rb +130 -0
- data/lib/pry/pry_class.rb +54 -22
- data/lib/pry/pry_instance.rb +71 -14
- data/lib/pry/repl_file_loader.rb +80 -0
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +121 -142
- data/pry.gemspec +13 -13
- data/test/candidate_helper1.rb +11 -0
- data/test/candidate_helper2.rb +8 -0
- data/test/helper.rb +16 -0
- data/test/test_code.rb +1 -1
- data/test/test_command.rb +364 -270
- data/test/test_command_integration.rb +235 -267
- data/test/test_completion.rb +36 -0
- data/test/test_control_d_handler.rb +45 -0
- data/test/test_default_commands/example.erb +5 -0
- data/test/test_default_commands/test_cd.rb +316 -11
- data/test/test_default_commands/test_context.rb +143 -192
- data/test/test_default_commands/test_documentation.rb +81 -14
- data/test/test_default_commands/test_find_method.rb +10 -2
- data/test/test_default_commands/test_input.rb +102 -111
- data/test/test_default_commands/test_introspection.rb +17 -12
- data/test/test_default_commands/test_ls.rb +8 -6
- data/test/test_default_commands/test_shell.rb +18 -15
- data/test/test_default_commands/test_show_source.rb +170 -44
- data/test/test_exception_whitelist.rb +6 -2
- data/test/test_hooks.rb +32 -0
- data/test/test_input_stack.rb +19 -16
- data/test/test_method.rb +0 -4
- data/test/test_prompt.rb +60 -0
- data/test/test_pry.rb +23 -31
- data/test/test_pry_defaults.rb +75 -57
- data/test/test_syntax_checking.rb +12 -11
- data/test/test_wrapped_module.rb +103 -0
- metadata +72 -26
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
describe "Pry::DefaultCommands::Introspection" do
|
4
|
-
|
5
4
|
describe "edit" do
|
6
5
|
before do
|
7
6
|
@old_editor = Pry.config.editor
|
@@ -11,6 +10,7 @@ describe "Pry::DefaultCommands::Introspection" do
|
|
11
10
|
nil
|
12
11
|
end
|
13
12
|
end
|
13
|
+
|
14
14
|
after do
|
15
15
|
Pry.config.editor = @old_editor
|
16
16
|
end
|
@@ -458,6 +458,10 @@ describe "Pry::DefaultCommands::Introspection" do
|
|
458
458
|
# show-command only works in implementations that support Proc#source_location
|
459
459
|
if Proc.method_defined?(:source_location)
|
460
460
|
describe "show-command" do
|
461
|
+
before do
|
462
|
+
@str_output = StringIO.new
|
463
|
+
end
|
464
|
+
|
461
465
|
it 'should show source for an ordinary command' do
|
462
466
|
set = Pry::CommandSet.new do
|
463
467
|
import_from Pry::Commands, "show-command"
|
@@ -465,11 +469,12 @@ describe "Pry::DefaultCommands::Introspection" do
|
|
465
469
|
:body_of_foo
|
466
470
|
end
|
467
471
|
end
|
468
|
-
|
469
|
-
redirect_pry_io(InputTester.new("show-command foo"), str_output) do
|
472
|
+
|
473
|
+
redirect_pry_io(InputTester.new("show-command foo"), @str_output) do
|
470
474
|
Pry.new(:commands => set).rep
|
471
475
|
end
|
472
|
-
|
476
|
+
|
477
|
+
@str_output.string.should =~ /:body_of_foo/
|
473
478
|
end
|
474
479
|
|
475
480
|
it 'should show source for a command with spaces in its name' do
|
@@ -479,11 +484,12 @@ describe "Pry::DefaultCommands::Introspection" do
|
|
479
484
|
:body_of_foo_bar
|
480
485
|
end
|
481
486
|
end
|
482
|
-
|
483
|
-
redirect_pry_io(InputTester.new("show-command \"foo bar\""), str_output) do
|
487
|
+
|
488
|
+
redirect_pry_io(InputTester.new("show-command \"foo bar\""), @str_output) do
|
484
489
|
Pry.new(:commands => set).rep
|
485
490
|
end
|
486
|
-
|
491
|
+
|
492
|
+
@str_output.string.should =~ /:body_of_foo_bar/
|
487
493
|
end
|
488
494
|
|
489
495
|
it 'should show source for a command by listing name' do
|
@@ -493,14 +499,13 @@ describe "Pry::DefaultCommands::Introspection" do
|
|
493
499
|
:body_of_foo_regex
|
494
500
|
end
|
495
501
|
end
|
496
|
-
|
497
|
-
redirect_pry_io(InputTester.new("show-command bar"), str_output) do
|
502
|
+
|
503
|
+
redirect_pry_io(InputTester.new("show-command bar"), @str_output) do
|
498
504
|
Pry.new(:commands => set).rep
|
499
505
|
end
|
500
|
-
|
506
|
+
|
507
|
+
@str_output.string.should =~ /:body_of_foo_regex/
|
501
508
|
end
|
502
509
|
end
|
503
510
|
end
|
504
|
-
|
505
|
-
|
506
511
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'helper'
|
2
|
+
|
2
3
|
describe "ls" do
|
3
4
|
describe "below ceiling" do
|
4
5
|
it "should stop before Object by default" do
|
@@ -30,21 +31,21 @@ describe "ls" do
|
|
30
31
|
|
31
32
|
describe "methods" do
|
32
33
|
it "should show public methods by default" do
|
33
|
-
mock_pry("ls Class.new{ def goo; end }.new").should =~ /goo/
|
34
|
+
mock_pry("ls Class.new{ def goo; end }.new").should =~ /methods: goo/
|
34
35
|
end
|
35
36
|
|
36
37
|
it "should not show protected/private by default" do
|
37
|
-
mock_pry("ls -M Class.new{ def goo; end; private :goo }").should.not =~ /goo/
|
38
|
-
mock_pry("ls Class.new{ def goo; end; protected :goo }.new").should.not =~ /goo/
|
38
|
+
mock_pry("ls -M Class.new{ def goo; end; private :goo }").should.not =~ /methods: goo/
|
39
|
+
mock_pry("ls Class.new{ def goo; end; protected :goo }.new").should.not =~ /methods: goo/
|
39
40
|
end
|
40
41
|
|
41
42
|
it "should show public methods with -p" do
|
42
|
-
mock_pry("ls -p Class.new{ def goo; end }.new").should =~ /goo/
|
43
|
+
mock_pry("ls -p Class.new{ def goo; end }.new").should =~ /methods: goo/
|
43
44
|
end
|
44
45
|
|
45
46
|
it "should show protected/private methods with -p" do
|
46
|
-
mock_pry("ls -pM Class.new{ def goo; end; protected :goo }").should =~ /goo/
|
47
|
-
mock_pry("ls -p Class.new{ def goo; end; private :goo }.new").should =~ /goo/
|
47
|
+
mock_pry("ls -pM Class.new{ def goo; end; protected :goo }").should =~ /methods: goo/
|
48
|
+
mock_pry("ls -p Class.new{ def goo; end; private :goo }.new").should =~ /methods: goo/
|
48
49
|
end
|
49
50
|
|
50
51
|
it "should work for objects with an overridden method method" do
|
@@ -92,6 +93,7 @@ describe "ls" do
|
|
92
93
|
mock_pry("ls -c").should =~ /ArgumentError/
|
93
94
|
mock_pry("ls -c --grep Run").should.not =~ /ArgumentError/
|
94
95
|
end
|
96
|
+
|
95
97
|
it "should still output matching things" do
|
96
98
|
mock_pry("ls -c --grep Run").should =~ /RuntimeError/
|
97
99
|
end
|
@@ -154,7 +154,7 @@ describe "Pry::DefaultCommands::Shell" do
|
|
154
154
|
|
155
155
|
describe "-c" do
|
156
156
|
it 'should save a command to a file' do
|
157
|
-
redirect_pry_io(InputTester.new("save-file #{@path} -
|
157
|
+
redirect_pry_io(InputTester.new("save-file #{@path} -k show-method",
|
158
158
|
"exit-all")) do
|
159
159
|
Pry.start(@o)
|
160
160
|
end
|
@@ -192,6 +192,9 @@ describe "Pry::DefaultCommands::Shell" do
|
|
192
192
|
end
|
193
193
|
|
194
194
|
describe "cat" do
|
195
|
+
before do
|
196
|
+
@str_output = StringIO.new
|
197
|
+
end
|
195
198
|
|
196
199
|
describe "on receiving a file that does not exist" do
|
197
200
|
it 'should display an error message' do
|
@@ -250,7 +253,7 @@ describe "Pry::DefaultCommands::Shell" do
|
|
250
253
|
|
251
254
|
describe "with --ex N" do
|
252
255
|
it 'should cat first level of backtrace when --ex used with no argument ' do
|
253
|
-
pry_instance = Pry.new(:input => StringIO.new("cat --ex"), :output => str_output
|
256
|
+
pry_instance = Pry.new(:input => StringIO.new("cat --ex"), :output => @str_output)
|
254
257
|
|
255
258
|
temp_file do |f|
|
256
259
|
f << "bt number 1"
|
@@ -259,11 +262,11 @@ describe "Pry::DefaultCommands::Shell" do
|
|
259
262
|
pry_instance.rep(self)
|
260
263
|
end
|
261
264
|
|
262
|
-
str_output.string.should =~ /bt number 1/
|
265
|
+
@str_output.string.should =~ /bt number 1/
|
263
266
|
end
|
264
267
|
|
265
268
|
it 'should cat first level of backtrace when --ex 0 used ' do
|
266
|
-
pry_instance = Pry.new(:input => StringIO.new("cat --ex 0"), :output => str_output
|
269
|
+
pry_instance = Pry.new(:input => StringIO.new("cat --ex 0"), :output => @str_output)
|
267
270
|
|
268
271
|
temp_file do |f|
|
269
272
|
f << "bt number 1"
|
@@ -272,11 +275,11 @@ describe "Pry::DefaultCommands::Shell" do
|
|
272
275
|
pry_instance.rep(self)
|
273
276
|
end
|
274
277
|
|
275
|
-
str_output.string.should =~ /bt number 1/
|
278
|
+
@str_output.string.should =~ /bt number 1/
|
276
279
|
end
|
277
280
|
|
278
281
|
it 'should cat second level of backtrace when --ex 1 used ' do
|
279
|
-
pry_instance = Pry.new(:input => StringIO.new("cat --ex 1"), :output => str_output
|
282
|
+
pry_instance = Pry.new(:input => StringIO.new("cat --ex 1"), :output => @str_output)
|
280
283
|
|
281
284
|
temp_file do |f|
|
282
285
|
f << "bt number 2"
|
@@ -285,11 +288,11 @@ describe "Pry::DefaultCommands::Shell" do
|
|
285
288
|
pry_instance.rep(self)
|
286
289
|
end
|
287
290
|
|
288
|
-
str_output.string.should =~ /bt number 2/
|
291
|
+
@str_output.string.should =~ /bt number 2/
|
289
292
|
end
|
290
293
|
|
291
294
|
it 'should cat third level of backtrace when --ex 2 used' do
|
292
|
-
pry_instance = Pry.new(:input => StringIO.new("cat --ex 2"), :output => str_output
|
295
|
+
pry_instance = Pry.new(:input => StringIO.new("cat --ex 2"), :output => @str_output)
|
293
296
|
|
294
297
|
temp_file do |f|
|
295
298
|
f << "bt number 3"
|
@@ -298,14 +301,14 @@ describe "Pry::DefaultCommands::Shell" do
|
|
298
301
|
pry_instance.rep(self)
|
299
302
|
end
|
300
303
|
|
301
|
-
str_output.string.should =~ /bt number 3/
|
304
|
+
@str_output.string.should =~ /bt number 3/
|
302
305
|
end
|
303
306
|
|
304
307
|
it 'should show error when backtrace level out of bounds' do
|
305
|
-
pry_instance = Pry.new(:input => StringIO.new("cat --ex 3"), :output => str_output
|
308
|
+
pry_instance = Pry.new(:input => StringIO.new("cat --ex 3"), :output => @str_output)
|
306
309
|
pry_instance.last_exception = mock_exception("x", "x", "x")
|
307
310
|
pry_instance.rep(self)
|
308
|
-
str_output.string.should =~ /out of bounds/
|
311
|
+
@str_output.string.should =~ /out of bounds/
|
309
312
|
end
|
310
313
|
|
311
314
|
it 'each successive cat --ex should show the next level of backtrace, and going past the final level should return to the first' do
|
@@ -317,18 +320,18 @@ describe "Pry::DefaultCommands::Shell" do
|
|
317
320
|
end
|
318
321
|
|
319
322
|
pry_instance = Pry.new(:input => StringIO.new("cat --ex\n" * 4),
|
320
|
-
:output =>
|
323
|
+
:output => @str_output)
|
321
324
|
|
322
325
|
pry_instance.last_exception = mock_exception(*temp_files.map { |f| "#{f.path}:1" })
|
323
326
|
|
324
327
|
3.times do |i|
|
325
328
|
pry_instance.rep(self)
|
326
|
-
str_output.string.should =~ /bt number #{i}/
|
329
|
+
@str_output.string.should =~ /bt number #{i}/
|
327
330
|
end
|
328
331
|
|
329
|
-
str_output.reopen
|
332
|
+
@str_output.reopen
|
330
333
|
pry_instance.rep(self)
|
331
|
-
str_output.string.should =~ /bt number 0/
|
334
|
+
@str_output.string.should =~ /bt number 0/
|
332
335
|
|
333
336
|
temp_files.each do |file|
|
334
337
|
file.close(true)
|
@@ -2,13 +2,21 @@ require 'helper'
|
|
2
2
|
|
3
3
|
if !mri18_and_no_real_source_location?
|
4
4
|
describe "show-source" do
|
5
|
+
before do
|
6
|
+
@str_output = StringIO.new
|
7
|
+
@o = Object.new
|
8
|
+
end
|
9
|
+
|
10
|
+
after do
|
11
|
+
Pad.clear
|
12
|
+
end
|
13
|
+
|
5
14
|
it 'should output a method\'s source' do
|
6
|
-
str_output
|
7
|
-
redirect_pry_io(InputTester.new("show-source sample_method", "exit-all"), str_output) do
|
15
|
+
redirect_pry_io(InputTester.new("show-source sample_method", "exit-all"), @str_output) do
|
8
16
|
pry
|
9
17
|
end
|
10
18
|
|
11
|
-
str_output.string.should =~ /def sample/
|
19
|
+
@str_output.string.should =~ /def sample/
|
12
20
|
end
|
13
21
|
|
14
22
|
it 'should output help' do
|
@@ -16,65 +24,59 @@ if !mri18_and_no_real_source_location?
|
|
16
24
|
end
|
17
25
|
|
18
26
|
it 'should output a method\'s source with line numbers' do
|
19
|
-
str_output
|
20
|
-
redirect_pry_io(InputTester.new("show-source -l sample_method", "exit-all"), str_output) do
|
27
|
+
redirect_pry_io(InputTester.new("show-source -l sample_method", "exit-all"), @str_output) do
|
21
28
|
pry
|
22
29
|
end
|
23
30
|
|
24
|
-
str_output.string.should =~ /\d+: def sample/
|
31
|
+
@str_output.string.should =~ /\d+: def sample/
|
25
32
|
end
|
26
33
|
|
27
34
|
it 'should output a method\'s source with line numbers starting at 1' do
|
28
|
-
str_output
|
29
|
-
redirect_pry_io(InputTester.new("show-source -b sample_method", "exit-all"), str_output) do
|
35
|
+
redirect_pry_io(InputTester.new("show-source -b sample_method", "exit-all"), @str_output) do
|
30
36
|
pry
|
31
37
|
end
|
32
38
|
|
33
|
-
str_output.string.should =~ /1: def sample/
|
39
|
+
@str_output.string.should =~ /1: def sample/
|
34
40
|
end
|
35
41
|
|
36
42
|
it 'should output a method\'s source if inside method without needing to use method name' do
|
37
|
-
|
43
|
+
Pad.str_output = @str_output
|
38
44
|
|
39
|
-
o
|
40
|
-
|
41
|
-
redirect_pry_io(InputTester.new("show-source", "exit-all"), $str_output) do
|
45
|
+
def @o.sample
|
46
|
+
redirect_pry_io(InputTester.new("show-source", "exit-all"), Pad.str_output) do
|
42
47
|
binding.pry
|
43
48
|
end
|
44
49
|
end
|
45
|
-
o.sample
|
50
|
+
@o.sample
|
46
51
|
|
47
|
-
|
48
|
-
$str_output = nil
|
52
|
+
Pad.str_output.string.should =~ /def @o.sample/
|
49
53
|
end
|
50
54
|
|
51
55
|
it 'should output a method\'s source if inside method without needing to use method name, and using the -l switch' do
|
52
|
-
|
56
|
+
Pad.str_output = @str_output
|
53
57
|
|
54
|
-
o
|
55
|
-
|
56
|
-
redirect_pry_io(InputTester.new("show-source -l", "exit-all"), $str_output) do
|
58
|
+
def @o.sample
|
59
|
+
redirect_pry_io(InputTester.new("show-source -l", "exit-all"), Pad.str_output) do
|
57
60
|
binding.pry
|
58
61
|
end
|
59
62
|
end
|
60
|
-
o.sample
|
63
|
+
@o.sample
|
61
64
|
|
62
|
-
|
63
|
-
$str_output = nil
|
65
|
+
Pad.str_output.string.should =~ /def @o.sample/
|
64
66
|
end
|
65
67
|
|
66
68
|
it "should find methods even if there are spaces in the arguments" do
|
67
|
-
o
|
68
|
-
def o.foo(*bars);
|
69
|
+
def @o.foo(*bars)
|
69
70
|
"Mr flibble"
|
70
|
-
self
|
71
|
+
self
|
71
72
|
end
|
72
73
|
|
73
|
-
|
74
|
-
|
74
|
+
redirect_pry_io(InputTester.new("show-source @o.foo('bar', 'baz bam').foo",
|
75
|
+
"exit-all"), @str_output) do
|
75
76
|
binding.pry
|
76
77
|
end
|
77
|
-
|
78
|
+
|
79
|
+
@str_output.string.should =~ /Mr flibble/
|
78
80
|
end
|
79
81
|
|
80
82
|
it "should find methods even if the object has an overridden method method" do
|
@@ -145,54 +147,49 @@ if !mri18_and_no_real_source_location?
|
|
145
147
|
end
|
146
148
|
|
147
149
|
it "should not raise an exception when a non-extant super method is requested" do
|
148
|
-
o
|
149
|
-
def o.foo(*bars); end
|
150
|
+
def @o.foo(*bars); end
|
150
151
|
|
151
|
-
mock_pry(binding, "show-source --super o.foo").should =~ /'self.foo' has no super method/
|
152
|
+
mock_pry(binding, "show-source --super @o.foo").should =~ /'self.foo' has no super method/
|
152
153
|
end
|
153
154
|
|
154
155
|
# dynamically defined method source retrieval is only supported in
|
155
156
|
# 1.9 - where Method#source_location is native
|
156
157
|
if RUBY_VERSION =~ /1.9/
|
157
158
|
it 'should output a method\'s source for a method defined inside pry' do
|
158
|
-
str_output
|
159
|
-
redirect_pry_io(InputTester.new("def dyna_method", ":testing", "end", "show-source dyna_method"), str_output) do
|
159
|
+
redirect_pry_io(InputTester.new("def dyna_method", ":testing", "end", "show-source dyna_method"), @str_output) do
|
160
160
|
TOPLEVEL_BINDING.pry
|
161
161
|
end
|
162
162
|
|
163
|
-
str_output.string.should =~ /def dyna_method/
|
163
|
+
@str_output.string.should =~ /def dyna_method/
|
164
164
|
Object.remove_method :dyna_method
|
165
165
|
end
|
166
166
|
|
167
167
|
it 'should output a method\'s source for a method defined inside pry, even if exceptions raised before hand' do
|
168
|
-
str_output
|
169
|
-
redirect_pry_io(InputTester.new("bad code", "123", "bad code 2", "1 + 2", "def dyna_method", ":testing", "end", "show-source dyna_method"), str_output) do
|
168
|
+
redirect_pry_io(InputTester.new("bad code", "123", "bad code 2", "1 + 2", "def dyna_method", ":testing", "end", "show-source dyna_method"), @str_output) do
|
170
169
|
TOPLEVEL_BINDING.pry
|
171
170
|
end
|
172
171
|
|
173
|
-
str_output.string.should =~ /def dyna_method/
|
172
|
+
@str_output.string.should =~ /def dyna_method/
|
174
173
|
Object.remove_method :dyna_method
|
175
174
|
end
|
176
175
|
|
177
176
|
it 'should output an instance method\'s source for a method defined inside pry' do
|
178
|
-
str_output = StringIO.new
|
179
177
|
Object.remove_const :A if defined?(A)
|
180
|
-
redirect_pry_io(InputTester.new("class A", "def yo", "end", "end", "show-source A#yo"), str_output) do
|
178
|
+
redirect_pry_io(InputTester.new("class A", "def yo", "end", "end", "show-source A#yo"), @str_output) do
|
181
179
|
TOPLEVEL_BINDING.pry
|
182
180
|
end
|
183
181
|
|
184
|
-
str_output.string.should =~ /def yo/
|
182
|
+
@str_output.string.should =~ /def yo/
|
185
183
|
Object.remove_const :A
|
186
184
|
end
|
187
185
|
|
188
186
|
it 'should output an instance method\'s source for a method defined inside pry using define_method' do
|
189
|
-
str_output = StringIO.new
|
190
187
|
Object.remove_const :A if defined?(A)
|
191
|
-
redirect_pry_io(InputTester.new("class A", "define_method(:yup) {}", "end", "show-source A#yup"), str_output) do
|
188
|
+
redirect_pry_io(InputTester.new("class A", "define_method(:yup) {}", "end", "show-source A#yup"), @str_output) do
|
192
189
|
TOPLEVEL_BINDING.pry
|
193
190
|
end
|
194
191
|
|
195
|
-
str_output.string.should =~ /define_method\(:yup\)/
|
192
|
+
@str_output.string.should =~ /define_method\(:yup\)/
|
196
193
|
Object.remove_const :A
|
197
194
|
end
|
198
195
|
end
|
@@ -289,6 +286,9 @@ if !mri18_and_no_real_source_location?
|
|
289
286
|
end
|
290
287
|
end
|
291
288
|
|
289
|
+
# note that pry assumes a class is only monkey-patched at most
|
290
|
+
# ONCE per file, so will not find multiple monkeypatches in the
|
291
|
+
# SAME file.
|
292
292
|
describe "show-source -a" do
|
293
293
|
it 'should show the source for all monkeypatches defined in different files' do
|
294
294
|
class TestClassForShowSource
|
@@ -300,7 +300,133 @@ if !mri18_and_no_real_source_location?
|
|
300
300
|
result.should =~ /def alpha/
|
301
301
|
result.should =~ /def beta/
|
302
302
|
end
|
303
|
+
|
304
|
+
it 'should show the source for a class_eval-based monkeypatch' do
|
305
|
+
TestClassForShowSourceClassEval.class_eval do
|
306
|
+
def class_eval_method
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
result = mock_pry("show-source TestClassForShowSourceClassEval -a")
|
311
|
+
result.should =~ /def class_eval_method/
|
312
|
+
end
|
313
|
+
|
314
|
+
it 'should show the source for an instance_eval-based monkeypatch' do
|
315
|
+
TestClassForShowSourceInstanceEval.instance_eval do
|
316
|
+
def instance_eval_method
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
320
|
+
result = mock_pry("show-source TestClassForShowSourceInstanceEval -a")
|
321
|
+
result.should =~ /def instance_eval_method/
|
322
|
+
end
|
323
|
+
end
|
324
|
+
|
325
|
+
describe "when show-source is invoked without a method or class argument" do
|
326
|
+
before do
|
327
|
+
module TestHost
|
328
|
+
class M
|
329
|
+
def alpha; end
|
330
|
+
def beta; end
|
331
|
+
end
|
332
|
+
|
333
|
+
module C
|
334
|
+
end
|
335
|
+
|
336
|
+
module D
|
337
|
+
def self.invoked_in_method
|
338
|
+
redirect_pry_io(InputTester.new("show-source", "exit-all"), out = StringIO.new) do
|
339
|
+
Pry.start(binding)
|
340
|
+
end
|
341
|
+
out.string
|
342
|
+
end
|
343
|
+
end
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
347
|
+
after do
|
348
|
+
Object.remove_const(:TestHost)
|
349
|
+
end
|
350
|
+
|
351
|
+
describe "inside a module" do
|
352
|
+
it 'should display module source by default' do
|
353
|
+
redirect_pry_io(InputTester.new("show-source", "exit-all"), out = StringIO.new) do
|
354
|
+
Pry.start(TestHost::M)
|
355
|
+
end
|
356
|
+
|
357
|
+
out.string.should =~ /class M/
|
358
|
+
out.string.should =~ /def alpha/
|
359
|
+
out.string.should =~ /def beta/
|
360
|
+
end
|
361
|
+
|
362
|
+
it 'should be unable to find module source if no methods defined' do
|
363
|
+
redirect_pry_io(InputTester.new("show-source", "exit-all"), out = StringIO.new) do
|
364
|
+
Pry.start(TestHost::C)
|
365
|
+
end
|
366
|
+
|
367
|
+
out.string.should.should =~ /Cannot find a definition for/
|
368
|
+
end
|
369
|
+
|
370
|
+
it 'should display method code (rather than class) if Pry started inside method binding' do
|
371
|
+
string = TestHost::D.invoked_in_method
|
372
|
+
string.should =~ /invoked_in_method/
|
373
|
+
string.should.not =~ /module D/
|
374
|
+
end
|
375
|
+
|
376
|
+
it 'should display class source when inside instance' do
|
377
|
+
redirect_pry_io(InputTester.new("show-source", "exit-all"), out = StringIO.new) do
|
378
|
+
Pry.start(TestHost::M.new)
|
379
|
+
end
|
380
|
+
|
381
|
+
out.string.should =~ /class M/
|
382
|
+
out.string.should =~ /def alpha/
|
383
|
+
out.string.should =~ /def beta/
|
384
|
+
end
|
385
|
+
|
386
|
+
it 'should allow options to be passed' do
|
387
|
+
redirect_pry_io(InputTester.new("show-source -b", "exit-all"), out = StringIO.new) do
|
388
|
+
Pry.start(TestHost::M)
|
389
|
+
end
|
390
|
+
|
391
|
+
out.string.should =~ /\d:\s*class M/
|
392
|
+
out.string.should =~ /\d:\s*def alpha/
|
393
|
+
out.string.should =~ /\d:\s*def beta/
|
394
|
+
end
|
395
|
+
|
396
|
+
describe "should skip over broken modules" do
|
397
|
+
before do
|
398
|
+
module BabyDuck
|
399
|
+
|
400
|
+
module Muesli
|
401
|
+
binding.eval("def a; end", "dummy.rb", 1)
|
402
|
+
binding.eval("def b; end", "dummy.rb", 2)
|
403
|
+
binding.eval("def c; end", "dummy.rb", 3)
|
404
|
+
end
|
405
|
+
|
406
|
+
module Muesli
|
407
|
+
def d; end
|
408
|
+
def e; end
|
409
|
+
end
|
410
|
+
end
|
411
|
+
end
|
412
|
+
|
413
|
+
after do
|
414
|
+
Object.remove_const(:BabyDuck)
|
415
|
+
end
|
416
|
+
|
417
|
+
it 'should return source for first valid module' do
|
418
|
+
redirect_pry_io(InputTester.new("show-source BabyDuck::Muesli"), out = StringIO.new) do
|
419
|
+
Pry.start
|
420
|
+
end
|
421
|
+
|
422
|
+
out.string.should =~ /def d; end/
|
423
|
+
out.string.should.not =~ /def a; end/
|
424
|
+
end
|
425
|
+
|
426
|
+
end
|
427
|
+
end
|
303
428
|
end
|
304
429
|
end
|
305
430
|
end
|
306
431
|
end
|
432
|
+
|