pry 0.10.2-i386-mingw32 → 1.0.0.pre1-i386-mingw32

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.
Files changed (189) hide show
  1. data/.document +2 -0
  2. data/.gitignore +16 -0
  3. data/.travis.yml +21 -0
  4. data/.yardopts +3 -0
  5. data/CHANGELOG +503 -0
  6. data/CONTRIBUTORS +55 -0
  7. data/Gemfile +9 -0
  8. data/Guardfile +62 -0
  9. data/LICENSE +2 -2
  10. data/{README.md → README.markdown} +31 -37
  11. data/Rakefile +144 -0
  12. data/TODO +117 -0
  13. data/lib/pry.rb +146 -33
  14. data/lib/pry/cli.rb +13 -35
  15. data/lib/pry/code.rb +63 -24
  16. data/lib/pry/code/loc.rb +2 -2
  17. data/lib/pry/code_object.rb +21 -40
  18. data/lib/pry/command.rb +6 -9
  19. data/lib/pry/command_set.rb +37 -80
  20. data/lib/pry/commands.rb +1 -1
  21. data/lib/pry/commands/amend_line.rb +1 -1
  22. data/lib/pry/commands/bang.rb +1 -1
  23. data/lib/pry/commands/cat.rb +2 -11
  24. data/lib/pry/commands/cat/abstract_formatter.rb +1 -1
  25. data/lib/pry/commands/cat/exception_formatter.rb +7 -6
  26. data/lib/pry/commands/cat/file_formatter.rb +32 -15
  27. data/lib/pry/commands/cat/input_expression_formatter.rb +1 -1
  28. data/lib/pry/commands/cd.rb +3 -14
  29. data/lib/pry/commands/code_collector.rb +4 -4
  30. data/lib/pry/commands/easter_eggs.rb +3 -3
  31. data/lib/pry/commands/edit.rb +22 -10
  32. data/lib/pry/commands/edit/exception_patcher.rb +1 -1
  33. data/lib/pry/commands/edit/file_and_line_locator.rb +2 -0
  34. data/lib/pry/{method/patcher.rb → commands/edit/method_patcher.rb} +37 -40
  35. data/lib/pry/commands/find_method.rb +22 -16
  36. data/lib/pry/commands/gem_install.rb +2 -5
  37. data/lib/pry/commands/gem_open.rb +1 -1
  38. data/lib/pry/commands/gist.rb +11 -10
  39. data/lib/pry/commands/help.rb +14 -14
  40. data/lib/pry/commands/hist.rb +5 -24
  41. data/lib/pry/commands/ls.rb +287 -56
  42. data/lib/pry/commands/play.rb +10 -44
  43. data/lib/pry/commands/pry_backtrace.rb +2 -1
  44. data/lib/pry/commands/raise_up.rb +1 -1
  45. data/lib/pry/commands/reload_code.rb +15 -31
  46. data/lib/pry/commands/ri.rb +3 -7
  47. data/lib/pry/commands/shell_command.rb +12 -17
  48. data/lib/pry/commands/shell_mode.rb +2 -2
  49. data/lib/pry/commands/show_doc.rb +0 -5
  50. data/lib/pry/commands/show_info.rb +10 -11
  51. data/lib/pry/commands/show_source.rb +3 -15
  52. data/lib/pry/commands/simple_prompt.rb +1 -1
  53. data/lib/pry/commands/toggle_color.rb +4 -8
  54. data/lib/pry/commands/whereami.rb +10 -18
  55. data/lib/pry/completion.rb +293 -0
  56. data/lib/pry/config.rb +233 -20
  57. data/lib/pry/core_extensions.rb +19 -29
  58. data/lib/pry/custom_completions.rb +6 -0
  59. data/lib/pry/editor.rb +103 -109
  60. data/lib/pry/helpers/base_helpers.rb +109 -22
  61. data/lib/pry/helpers/command_helpers.rb +8 -10
  62. data/lib/pry/helpers/documentation_helpers.rb +2 -1
  63. data/lib/pry/helpers/text.rb +5 -4
  64. data/lib/pry/history.rb +10 -21
  65. data/lib/pry/history_array.rb +0 -5
  66. data/lib/pry/hooks.rb +29 -9
  67. data/lib/pry/indent.rb +10 -5
  68. data/lib/pry/method.rb +86 -81
  69. data/lib/pry/method/weird_method_locator.rb +2 -4
  70. data/lib/pry/module_candidate.rb +14 -5
  71. data/lib/pry/pager.rb +48 -193
  72. data/lib/pry/plugins.rb +2 -2
  73. data/lib/pry/pry_class.rb +193 -104
  74. data/lib/pry/pry_instance.rb +154 -152
  75. data/lib/pry/rbx_method.rb +13 -0
  76. data/lib/pry/rbx_path.rb +1 -1
  77. data/lib/pry/repl.rb +14 -17
  78. data/lib/pry/repl_file_loader.rb +3 -8
  79. data/lib/pry/rubygem.rb +3 -3
  80. data/lib/pry/terminal.rb +3 -4
  81. data/lib/pry/test/helper.rb +11 -6
  82. data/lib/pry/version.rb +1 -1
  83. data/lib/pry/wrapped_module.rb +56 -49
  84. data/man/pry.1 +195 -0
  85. data/man/pry.1.html +204 -0
  86. data/man/pry.1.ronn +141 -0
  87. data/pry.gemspec +31 -0
  88. data/spec/Procfile +3 -0
  89. data/spec/cli_spec.rb +78 -0
  90. data/spec/code_object_spec.rb +277 -0
  91. data/spec/code_spec.rb +219 -0
  92. data/spec/command_helpers_spec.rb +29 -0
  93. data/spec/command_integration_spec.rb +562 -0
  94. data/spec/command_set_spec.rb +627 -0
  95. data/spec/command_spec.rb +821 -0
  96. data/spec/commands/amend_line_spec.rb +247 -0
  97. data/spec/commands/bang_spec.rb +18 -0
  98. data/spec/commands/cat_spec.rb +164 -0
  99. data/spec/commands/cd_spec.rb +250 -0
  100. data/spec/commands/disable_pry_spec.rb +25 -0
  101. data/spec/commands/edit_spec.rb +725 -0
  102. data/spec/commands/exit_all_spec.rb +27 -0
  103. data/spec/commands/exit_program_spec.rb +19 -0
  104. data/spec/commands/exit_spec.rb +28 -0
  105. data/spec/commands/find_method_spec.rb +70 -0
  106. data/spec/commands/gem_list_spec.rb +26 -0
  107. data/spec/commands/gist_spec.rb +79 -0
  108. data/spec/commands/help_spec.rb +56 -0
  109. data/spec/commands/hist_spec.rb +172 -0
  110. data/spec/commands/jump_to_spec.rb +15 -0
  111. data/spec/commands/ls_spec.rb +189 -0
  112. data/spec/commands/play_spec.rb +136 -0
  113. data/spec/commands/raise_up_spec.rb +56 -0
  114. data/spec/commands/save_file_spec.rb +177 -0
  115. data/spec/commands/show_doc_spec.rb +488 -0
  116. data/spec/commands/show_input_spec.rb +17 -0
  117. data/spec/commands/show_source_spec.rb +760 -0
  118. data/spec/commands/whereami_spec.rb +203 -0
  119. data/spec/completion_spec.rb +221 -0
  120. data/spec/control_d_handler_spec.rb +62 -0
  121. data/spec/documentation_helper_spec.rb +73 -0
  122. data/spec/editor_spec.rb +79 -0
  123. data/spec/exception_whitelist_spec.rb +21 -0
  124. data/spec/fixtures/candidate_helper1.rb +11 -0
  125. data/spec/fixtures/candidate_helper2.rb +8 -0
  126. data/spec/fixtures/example.erb +5 -0
  127. data/spec/fixtures/example_nesting.rb +33 -0
  128. data/spec/fixtures/show_source_doc_examples.rb +15 -0
  129. data/spec/fixtures/testlinkrc +2 -0
  130. data/spec/fixtures/testrc +2 -0
  131. data/spec/fixtures/testrcbad +2 -0
  132. data/spec/fixtures/whereami_helper.rb +6 -0
  133. data/spec/helper.rb +35 -0
  134. data/spec/helpers/bacon.rb +86 -0
  135. data/spec/helpers/mock_pry.rb +44 -0
  136. data/spec/helpers/repl_tester.rb +112 -0
  137. data/spec/helpers/table_spec.rb +105 -0
  138. data/spec/history_array_spec.rb +67 -0
  139. data/spec/hooks_spec.rb +522 -0
  140. data/spec/indent_spec.rb +301 -0
  141. data/spec/method_spec.rb +482 -0
  142. data/spec/prompt_spec.rb +61 -0
  143. data/spec/pry_defaults_spec.rb +420 -0
  144. data/spec/pry_history_spec.rb +69 -0
  145. data/spec/pry_output_spec.rb +95 -0
  146. data/spec/pry_repl_spec.rb +86 -0
  147. data/spec/pry_spec.rb +394 -0
  148. data/spec/pryrc_spec.rb +97 -0
  149. data/spec/run_command_spec.rb +25 -0
  150. data/spec/sticky_locals_spec.rb +147 -0
  151. data/spec/syntax_checking_spec.rb +81 -0
  152. data/spec/wrapped_module_spec.rb +261 -0
  153. data/wiki/Customizing-pry.md +397 -0
  154. data/wiki/Home.md +4 -0
  155. metadata +272 -61
  156. checksums.yaml +0 -7
  157. data/CHANGELOG.md +0 -714
  158. data/lib/pry/code/code_file.rb +0 -103
  159. data/lib/pry/color_printer.rb +0 -55
  160. data/lib/pry/commands/change_inspector.rb +0 -27
  161. data/lib/pry/commands/change_prompt.rb +0 -26
  162. data/lib/pry/commands/list_inspectors.rb +0 -35
  163. data/lib/pry/commands/list_prompts.rb +0 -35
  164. data/lib/pry/commands/ls/constants.rb +0 -47
  165. data/lib/pry/commands/ls/formatter.rb +0 -49
  166. data/lib/pry/commands/ls/globals.rb +0 -48
  167. data/lib/pry/commands/ls/grep.rb +0 -21
  168. data/lib/pry/commands/ls/instance_vars.rb +0 -39
  169. data/lib/pry/commands/ls/interrogatable.rb +0 -18
  170. data/lib/pry/commands/ls/jruby_hacks.rb +0 -49
  171. data/lib/pry/commands/ls/local_names.rb +0 -35
  172. data/lib/pry/commands/ls/local_vars.rb +0 -39
  173. data/lib/pry/commands/ls/ls_entity.rb +0 -70
  174. data/lib/pry/commands/ls/methods.rb +0 -57
  175. data/lib/pry/commands/ls/methods_helper.rb +0 -46
  176. data/lib/pry/commands/ls/self_methods.rb +0 -32
  177. data/lib/pry/commands/watch_expression.rb +0 -105
  178. data/lib/pry/commands/watch_expression/expression.rb +0 -38
  179. data/lib/pry/config/behavior.rb +0 -139
  180. data/lib/pry/config/convenience.rb +0 -25
  181. data/lib/pry/config/default.rb +0 -161
  182. data/lib/pry/exceptions.rb +0 -78
  183. data/lib/pry/input_completer.rb +0 -242
  184. data/lib/pry/input_lock.rb +0 -132
  185. data/lib/pry/inspector.rb +0 -27
  186. data/lib/pry/last_exception.rb +0 -61
  187. data/lib/pry/object_path.rb +0 -82
  188. data/lib/pry/output.rb +0 -50
  189. data/lib/pry/prompt.rb +0 -26
@@ -0,0 +1,15 @@
1
+ require 'helper'
2
+
3
+ describe "jump-to" do
4
+ it 'should jump to the proper binding index in the stack' do
5
+ pry_eval('cd 1', 'cd 2', 'jump-to 1', 'self').should == 1
6
+ end
7
+
8
+ it 'should print error when trying to jump to a non-existent binding index' do
9
+ pry_eval("cd 1", "cd 2", "jump-to 100").should =~ /Invalid nest level/
10
+ end
11
+
12
+ it 'should print error when trying to jump to the same binding index' do
13
+ pry_eval("cd 1", "cd 2", "jump-to 2").should =~ /Already/
14
+ end
15
+ end
@@ -0,0 +1,189 @@
1
+ require 'helper'
2
+
3
+ describe "ls" do
4
+ describe "below ceiling" do
5
+ it "should stop before Object by default" do
6
+ pry_eval("cd Class.new{ def goo; end }.new", "ls").should.not =~ /Object/
7
+ pry_eval("cd Class.new{ def goo; end }", "ls -M").should.not =~ /Object/
8
+ end
9
+
10
+ it "should include object if -v is given" do
11
+ pry_eval("cd Class.new{ def goo; end }.new", "ls -m -v").should =~ /Object/
12
+ pry_eval("cd Class.new{ def goo; end }", "ls -vM").should =~ /Object/
13
+ end
14
+
15
+ it "should include super-classes by default" do
16
+ pry_eval(
17
+ "cd Class.new(Class.new{ def goo; end; public :goo }).new",
18
+ "ls").should =~ /goo/
19
+
20
+ pry_eval(
21
+ "cd Class.new(Class.new{ def goo; end; public :goo })",
22
+ "ls -M").should =~ /goo/
23
+ end
24
+
25
+ it "should not include super-classes when -q is given" do
26
+ pry_eval("cd Class.new(Class.new{ def goo; end }).new", "ls -q").should.not =~ /goo/
27
+ pry_eval("cd Class.new(Class.new{ def goo; end })", "ls -M -q").should.not =~ /goo/
28
+ end
29
+ end
30
+
31
+ describe "help" do
32
+ it 'should show help with -h' do
33
+ pry_eval("ls -h").should =~ /Usage: ls/
34
+ end
35
+ end
36
+
37
+ describe "methods" do
38
+ it "should show public methods by default" do
39
+ output = pry_eval("ls Class.new{ def goo; end; public :goo }.new")
40
+ output.should =~ /methods: goo/
41
+ end
42
+
43
+ it "should not show protected/private by default" do
44
+ pry_eval("ls -M Class.new{ def goo; end; private :goo }").should.not =~ /goo/
45
+ pry_eval("ls Class.new{ def goo; end; protected :goo }.new").should.not =~ /goo/
46
+ end
47
+
48
+ it "should show public methods with -p" do
49
+ pry_eval("ls -p Class.new{ def goo; end }.new").should =~ /methods: goo/
50
+ end
51
+
52
+ it "should show protected/private methods with -p" do
53
+ pry_eval("ls -pM Class.new{ def goo; end; protected :goo }").should =~ /methods: goo/
54
+ pry_eval("ls -p Class.new{ def goo; end; private :goo }.new").should =~ /methods: goo/
55
+ end
56
+
57
+ it "should work for objects with an overridden method method" do
58
+ require 'net/http'
59
+ # This doesn't actually touch the network, promise!
60
+ pry_eval("ls Net::HTTP::Get.new('localhost')").should =~ /Net::HTTPGenericRequest#methods/
61
+ end
62
+
63
+ it "should handle classes that (pathologically) define .ancestors" do
64
+ output = pry_eval("ls Class.new{ def self.ancestors; end; def hihi; end }")
65
+ # see: https://travis-ci.org/pry/pry/jobs/5071918
66
+ unless Pry::Helpers::BaseHelpers.rbx?
67
+ output.should =~ /hihi/
68
+ end
69
+ end
70
+ end
71
+
72
+ describe 'with -l' do
73
+ it 'should find locals and sort by descending size' do
74
+ result = pry_eval("aa = 'asdf'; bb = 'xyz'", 'ls -l')
75
+ result.should.not =~ /=>/
76
+ result.should.not =~ /0x\d{5}/
77
+ result.should =~ /asdf.*xyz/m
78
+ end
79
+ it 'should not list pry noise' do
80
+ pry_eval('ls -l').should.not =~ /_(?:dir|file|ex|pry|out|in)_/
81
+ end
82
+ end
83
+
84
+ describe "when inside Modules" do
85
+ it "should still work" do
86
+ pry_eval(
87
+ "cd Module.new{ def foobie; end; public :foobie }",
88
+ "ls -M").should =~ /foobie/
89
+ end
90
+
91
+ it "should work for ivars" do
92
+ pry_eval(
93
+ "module StigmaT1sm; def foobie; @@gharble = 456; end; end",
94
+ "Object.new.tap{ |o| o.extend(StigmaT1sm) }.foobie",
95
+ "cd StigmaT1sm",
96
+ "ls -i").should =~ /@@gharble/
97
+ end
98
+
99
+ it "should include instance methods by default" do
100
+ output = pry_eval(
101
+ "ls Module.new{ def shinanagarns; 4; end; public :shinanagarns }")
102
+ output.should =~ /shinanagarns/
103
+ end
104
+
105
+ it "should behave normally when invoked on Module itself" do
106
+ pry_eval("ls Module").should.not =~ /Pry/
107
+ end
108
+ end
109
+
110
+ describe "constants" do
111
+ it "should show constants defined on the current module" do
112
+ pry_eval("class TempFoo1; BARGHL = 1; end", "ls TempFoo1").should =~ /BARGHL/
113
+ end
114
+
115
+ it "should not show constants defined on parent modules by default" do
116
+ pry_eval("class TempFoo2; LHGRAB = 1; end; class TempFoo3 < TempFoo2; BARGHL = 1; end", "ls TempFoo3").should.not =~ /LHGRAB/
117
+ end
118
+
119
+ it "should show constants defined on ancestors with -v" do
120
+ pry_eval("class TempFoo4; LHGRAB = 1; end; class TempFoo5 < TempFoo4; BARGHL = 1; end", "ls -v TempFoo5").should =~ /LHGRAB/
121
+ end
122
+
123
+ it "should not autoload constants!" do
124
+ autoload :McflurgleTheThird, "/tmp/this-file-d000esnat-exist.rb"
125
+ lambda{ pry_eval("ls -c") }.should.not.raise
126
+ end
127
+ end
128
+
129
+ describe "grep" do
130
+ it "should reduce the number of outputted things" do
131
+ pry_eval("ls -c").should =~ /ArgumentError/
132
+ pry_eval("ls -c --grep Run").should.not =~ /ArgumentError/
133
+ end
134
+
135
+ it "should still output matching things" do
136
+ pry_eval("ls -c --grep Run").should =~ /RuntimeError/
137
+ end
138
+ end
139
+
140
+ describe "when no arguments given" do
141
+ describe "when at the top-level" do
142
+ # rubinius has a bug that means local_variables of "main" aren't reported inside eval()
143
+ unless Pry::Helpers::BaseHelpers.rbx?
144
+ it "should show local variables" do
145
+ pry_eval("ls").should =~ /_pry_/
146
+ pry_eval("arbitrar = 1", "ls").should =~ /arbitrar/
147
+ end
148
+ end
149
+ end
150
+
151
+ describe "when in a class" do
152
+ it "should show constants" do
153
+ pry_eval("class GeFromulate1; FOOTIFICATE=1.3; end", "cd GeFromulate1", "ls").should =~ /FOOTIFICATE/
154
+ end
155
+
156
+ it "should show class variables" do
157
+ pry_eval("class GeFromulate2; @@flurb=1.3; end", "cd GeFromulate2", "ls").should =~ /@@flurb/
158
+ end
159
+
160
+ it "should show methods" do
161
+ pry_eval("class GeFromulate3; def self.mooflight; end ; end", "cd GeFromulate3", "ls").should =~ /mooflight/
162
+ end
163
+ end
164
+
165
+ describe "when in an object" do
166
+ it "should show methods" do
167
+ pry_eval("cd Class.new{ def self.fooerise; end; self }", "ls").should =~ /fooerise/
168
+ end
169
+
170
+ it "should show instance variables" do
171
+ pry_eval("cd Class.new", "@alphooent = 1", "ls").should =~ /@alphooent/
172
+ end
173
+ end
174
+ end
175
+
176
+ if Pry::Helpers::BaseHelpers.jruby?
177
+ describe 'on java objects' do
178
+ it 'should omit java-esque aliases by default' do
179
+ pry_eval('ls java.lang.Thread.current_thread').should =~ /\bthread_group\b/
180
+ pry_eval('ls java.lang.Thread.current_thread').should.not =~ /\bgetThreadGroup\b/
181
+ end
182
+
183
+ it 'should include java-esque aliases if requested' do
184
+ pry_eval('ls java.lang.Thread.current_thread -J').should =~ /\bthread_group\b/
185
+ pry_eval('ls java.lang.Thread.current_thread -J').should =~ /\bgetThreadGroup\b/
186
+ end
187
+ end
188
+ end
189
+ end
@@ -0,0 +1,136 @@
1
+ # This command needs a TONNE more tests for it, but i can't figure out
2
+ # how to do them yet, and i really want to release. Sorry. Someone
3
+ # come along and do a better job.
4
+
5
+ require 'helper'
6
+
7
+ describe "play" do
8
+ before do
9
+ @o = Object.new
10
+ @t = pry_tester(@o)
11
+ end
12
+
13
+ describe "with an argument" do
14
+
15
+ # can't think of a f*cking way to test this!!
16
+ describe "implied file" do
17
+ # it 'should play from the file associated with the current binding' do
18
+ # # require 'fixtures/play_helper'
19
+ # end
20
+
21
+
22
+ # describe "integer" do
23
+ # it "should process one line from _pry_.last_file" do
24
+ # @t.process_command 'play --lines 1', @eval_str
25
+ # @eval_str.should =~ /bing = :bing\n/
26
+ # end
27
+ # end
28
+
29
+ # describe "range" do
30
+ # it "should process multiple lines at once from _pry_.last_file" do
31
+ # @t.process_command 'play --lines 1..3', @eval_str
32
+ # [/bing = :bing\n/, /bang = :bang\n/, /bong = :bong\n/].each { |str|
33
+ # @eval_str.should =~ str
34
+ # }
35
+ # end
36
+ end
37
+ end
38
+
39
+ describe "whatever" do
40
+ before do
41
+ def @o.test_method
42
+ :test_method_content
43
+ end
44
+ end
45
+
46
+ it 'should play documentation with the -d switch' do
47
+ # @v = 10
48
+ # @y = 20
49
+ def @o.test_method
50
+ :test_method_content
51
+ end
52
+
53
+ @t.process_command 'play -d test_method'
54
+ @t.eval_string.should == unindent(<<-STR)
55
+ @v = 10
56
+ @y = 20
57
+ STR
58
+ end
59
+
60
+ it 'should restrict -d switch with --lines' do
61
+ # @x = 0
62
+ # @v = 10
63
+ # @y = 20
64
+ # @z = 30
65
+ def @o.test_method
66
+ :test_method_content
67
+ end
68
+
69
+ @t.process_command 'play -d test_method --lines 2..3'
70
+ @t.eval_string.should == unindent(<<-STR)
71
+ @v = 10
72
+ @y = 20
73
+ STR
74
+ end
75
+
76
+ it 'has pretty error messages when -d cant find object' do
77
+ lambda { @t.process_command "play -d sdfsdf" }.should.raise(Pry::CommandError).message.should.match(/Cannot locate/)
78
+ end
79
+
80
+ it 'should play a method (a single line)' do
81
+ @t.process_command 'play test_method --lines 2'
82
+ @t.eval_string.should == ":test_method_content\n"
83
+ end
84
+
85
+ it 'should properly reindent lines' do
86
+ def @o.test_method
87
+ 'hello world'
88
+ end
89
+
90
+ @t.process_command 'play test_method --lines 2'
91
+ @t.eval_string.should == "'hello world'\n"
92
+ end
93
+
94
+ it 'should APPEND to the input buffer when playing a method line, not replace it' do
95
+ @t.eval_string = unindent(<<-STR)
96
+ def another_test_method
97
+ STR
98
+
99
+ @t.process_command 'play test_method --lines 2'
100
+
101
+ @t.eval_string.should == unindent(<<-STR)
102
+ def another_test_method
103
+ :test_method_content
104
+ STR
105
+ end
106
+
107
+ it 'should play a method (multiple lines)' do
108
+ def @o.test_method
109
+ @var0 = 10
110
+ @var1 = 20
111
+ @var2 = 30
112
+ @var3 = 40
113
+ end
114
+
115
+ @t.process_command 'play test_method --lines 3..4'
116
+ @t.eval_string.should == unindent(<<-STR, 0)
117
+ @var1 = 20
118
+ @var2 = 30
119
+ STR
120
+ end
121
+
122
+ describe "play -i" do
123
+ it 'should play multi-ranged input expressions' do
124
+ a = b = c = d = e = 0
125
+ redirect_pry_io(InputTester.new('a += 1', 'b += 1',
126
+ 'c += 1', 'd += 1', 'e += 1',
127
+ "play -i 1..3"), StringIO.new) do
128
+ binding.pry
129
+ end
130
+
131
+ [a, b, c].all? { |v| v.should == 2 }
132
+ d.should == 1
133
+ end
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,56 @@
1
+ require 'helper'
2
+
3
+ describe "raise-up" do
4
+ before do
5
+ @self = "Pad.self = self"
6
+ @inner = "Pad.inner = self"
7
+ @outer = "Pad.outer = self"
8
+ end
9
+
10
+ after do
11
+ Pad.clear
12
+ end
13
+
14
+ it "should raise the exception with raise-up" do
15
+ redirect_pry_io(InputTester.new("raise NoMethodError", "raise-up NoMethodError")) do
16
+ lambda { Object.new.pry }.should.raise NoMethodError
17
+ end
18
+ end
19
+
20
+ it "should raise an unamed exception with raise-up" do
21
+ redirect_pry_io(InputTester.new("raise 'stop'","raise-up 'noreally'")) do
22
+ lambda { Object.new.pry }.should.raise RuntimeError, "noreally"
23
+ end
24
+ end
25
+
26
+ it "should eat the exception at the last new pry instance on raise-up" do
27
+ redirect_pry_io(InputTester.new(":inner.pry", "raise NoMethodError", @inner,
28
+ "raise-up NoMethodError", @outer, "exit-all")) do
29
+ Pry.start(:outer)
30
+ end
31
+
32
+ Pad.inner.should == :inner
33
+ Pad.outer.should == :outer
34
+ end
35
+
36
+ it "should raise the most recently raised exception" do
37
+ lambda { mock_pry("raise NameError, 'homographery'","raise-up") }.should.raise NameError, 'homographery'
38
+ end
39
+
40
+ it "should allow you to cd up and (eventually) out" do
41
+ redirect_pry_io(InputTester.new("cd :inner", "raise NoMethodError", @inner,
42
+ "deep = :deep", "cd deep","Pad.deep = self",
43
+ "raise-up NoMethodError", "raise-up", @outer,
44
+ "raise-up", "exit-all")) do
45
+ lambda { Pry.start(:outer) }.should.raise NoMethodError
46
+ end
47
+
48
+ Pad.deep.should == :deep
49
+ Pad.inner.should == :inner
50
+ Pad.outer.should == :outer
51
+ end
52
+
53
+ it "should jump immediately out of nested contexts with !" do
54
+ lambda { mock_pry("cd 1", "cd 2", "cd 3", "raise-up! 'fancy that...'") }.should.raise RuntimeError, 'fancy that...'
55
+ end
56
+ end
@@ -0,0 +1,177 @@
1
+ require 'helper'
2
+
3
+ describe "save-file" do
4
+ before do
5
+ @tf = Tempfile.new(["pry", ".py"])
6
+ @path = @tf.path
7
+ @t = pry_tester
8
+ end
9
+
10
+ after do
11
+ @tf.close(true)
12
+ end
13
+
14
+ describe "-f" do
15
+ it 'should save a file to a file' do
16
+ temp_file do |f|
17
+ path = f.path
18
+ f.puts ":cute_horse"
19
+ f.flush
20
+
21
+ @t.eval("save-file '#{path}' --to '#{@path}'")
22
+
23
+
24
+ File.read(@path).should == File.read(path)
25
+ end
26
+ end
27
+ end
28
+
29
+ describe "-i" do
30
+ it 'should save input expressions to a file (single expression)' do
31
+ @t.eval ':horse_nostrils'
32
+ @t.eval "save-file -i 1 --to '#{@path}'"
33
+ File.read(@path).should == ":horse_nostrils\n"
34
+ end
35
+
36
+ it "should display a success message on save" do
37
+ @t.eval ':horse_nostrils'
38
+ @t.eval("save-file -i 1 --to '#{@path}'").should =~ /successfully saved/
39
+ end
40
+
41
+ it 'should save input expressions to a file (range)' do
42
+ @t.eval ':or_nostrils', ':sucking_up_all_the_oxygen', ':or_whatever'
43
+ @t.eval "save-file -i 1..2 --to '#{@path}'"
44
+ File.read(@path).should == ":or_nostrils\n:sucking_up_all_the_oxygen\n"
45
+ end
46
+
47
+ it 'should save multi-ranged input expressions' do
48
+ @t.eval ':or_nostrils', ':sucking_up_all_the_oxygen', ':or_whatever',
49
+ ':baby_ducks', ':cannot_escape'
50
+ @t.eval "save-file -i 1..2 -i 4..5 --to '#{@path}'"
51
+ File.read(@path).should == ":or_nostrils\n:sucking_up_all_the_oxygen\n:baby_ducks\n:cannot_escape\n"
52
+ end
53
+ end
54
+
55
+ describe "saving methods" do
56
+ before do
57
+ @o = Object.new
58
+ def @o.baby
59
+ :baby
60
+ end
61
+ def @o.bang
62
+ :bang
63
+ end
64
+
65
+ @t = pry_tester(@o)
66
+ end
67
+
68
+ describe "single method" do
69
+ it 'should save a method to a file' do
70
+ @t.eval "save-file --to '#{@path}' baby"
71
+ File.read(@path).should == Pry::Method.from_obj(@o, :baby).source
72
+ end
73
+
74
+ it "should display a success message on save" do
75
+ @t.eval("save-file --to '#{@path}' baby").should =~ /successfully saved/
76
+ end
77
+
78
+ it 'should save a method to a file truncated by --lines' do
79
+ @t.eval "save-file --to '#{@path}' baby --lines 2..4"
80
+
81
+ # must add 1 as first line of method is 1
82
+ File.read(@path).should ==
83
+ Pry::Method.from_obj(@o, :baby).source.lines.to_a[1..5].join
84
+ end
85
+ end
86
+
87
+ # TODO: do we want to reintroduce this spec??
88
+ #
89
+ # describe "multiple method" do
90
+ # it 'should save multiple methods to a file' do
91
+ # @t.eval "save-file #{@path} -m baby -m bang"
92
+
93
+ # File.read(@path).should == Pry::Method.from_obj(@o, :baby).source +
94
+ # Pry::Method.from_obj(@o, :bang).source
95
+ # end
96
+
97
+ # it 'should save multiple methods to a file trucated by --lines' do
98
+ # @t.eval "save-file #{@path} -m baby -m bang --lines 2..-2"
99
+
100
+ # # must add 1 as first line of method is 1
101
+ # File.read(@path).should == (Pry::Method.from_obj(@o, :baby).source +
102
+ # Pry::Method.from_obj(@o, :bang).source).lines.to_a[1..-2].join
103
+ # end
104
+
105
+ # it 'should save multiple methods to a file trucated by --lines 1 ' \
106
+ # '(single parameter, not range)' do
107
+ # @t.eval "save-file #{@path} -m baby -m bang --lines 1"
108
+
109
+ # # must add 1 as first line of method is 1
110
+ # File.read(@path).should == (Pry::Method.from_obj(@o, :baby).source +
111
+ # Pry::Method.from_obj(@o, :bang).source).lines.to_a[0]
112
+ # end
113
+ # end
114
+ end
115
+
116
+ describe "overwrite by default (no --append)" do
117
+ it 'should overwrite specified file with new input' do
118
+ @t.eval ':horse_nostrils'
119
+ @t.eval "save-file -i 1 --to '#{@path}'"
120
+
121
+ @t.eval ':sucking_up_all_the_oxygen'
122
+ @t.eval "save-file -i 2 --to '#{@path}'"
123
+
124
+ File.read(@path).should == ":sucking_up_all_the_oxygen\n"
125
+ end
126
+ end
127
+
128
+ describe "--append" do
129
+ it 'should append to end of specified file' do
130
+ @t.eval ':horse_nostrils'
131
+ @t.eval "save-file -i 1 --to '#{@path}'"
132
+
133
+ @t.eval ':sucking_up_all_the_oxygen'
134
+ @t.eval "save-file -i 2 --to '#{@path}' -a"
135
+
136
+ File.read(@path).should ==
137
+ ":horse_nostrils\n:sucking_up_all_the_oxygen\n"
138
+ end
139
+ end
140
+
141
+ describe "saving commands" do
142
+ it 'should save a command to a file' do
143
+ @t.eval "save-file --to '#{@path}' show-source"
144
+ cmd_source = Pry.commands["show-source"].source
145
+ File.read(@path).should == cmd_source
146
+ end
147
+ end
148
+
149
+ # TODO: reintroduce these specs at some point?
150
+ #
151
+ # describe "combined options" do
152
+ # before do
153
+ # @o = Object.new
154
+ # def @o.baby
155
+ # :baby
156
+ # end
157
+
158
+ # @t = pry_tester(@o)
159
+ # end
160
+
161
+ # it 'should save input cache and a method to a file (in that order)' do
162
+ # @t.eval ":horse_nostrils"
163
+ # @t.eval "save-file -i 1 -m baby #{@path}"
164
+
165
+ # File.read(@path).should == ":horse_nostrils\n" +
166
+ # Pry::Method.from_obj(@o, :baby).source
167
+ # end
168
+
169
+ # it 'should select a portion to save using --lines' do
170
+ # @t.eval ":horse_nostrils"
171
+ # @t.eval "save-file -i 1 -m baby #{@path} --lines 2..-2"
172
+
173
+ # str = ":horse_nostrils\n" + Pry::Method.from_obj(@o, :baby).source
174
+ # File.read(@path).should == str.lines.to_a[1..-2].join
175
+ # end
176
+ # end
177
+ end