pry 0.9.12.2 → 0.14.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (237) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +1141 -0
  3. data/LICENSE +2 -2
  4. data/README.md +466 -0
  5. data/bin/pry +4 -7
  6. data/lib/pry/basic_object.rb +10 -0
  7. data/lib/pry/block_command.rb +22 -0
  8. data/lib/pry/class_command.rb +194 -0
  9. data/lib/pry/cli.rb +97 -92
  10. data/lib/pry/code/code_file.rb +114 -0
  11. data/lib/pry/code/code_range.rb +7 -4
  12. data/lib/pry/code/loc.rb +27 -14
  13. data/lib/pry/code.rb +62 -90
  14. data/lib/pry/code_object.rb +83 -39
  15. data/lib/pry/color_printer.rb +66 -0
  16. data/lib/pry/command.rb +202 -371
  17. data/lib/pry/command_set.rb +151 -133
  18. data/lib/pry/command_state.rb +31 -0
  19. data/lib/pry/commands/amend_line.rb +86 -82
  20. data/lib/pry/commands/bang.rb +18 -14
  21. data/lib/pry/commands/bang_pry.rb +15 -11
  22. data/lib/pry/commands/cat/abstract_formatter.rb +23 -18
  23. data/lib/pry/commands/cat/exception_formatter.rb +85 -73
  24. data/lib/pry/commands/cat/file_formatter.rb +56 -63
  25. data/lib/pry/commands/cat/input_expression_formatter.rb +35 -30
  26. data/lib/pry/commands/cat.rb +64 -47
  27. data/lib/pry/commands/cd.rb +42 -26
  28. data/lib/pry/commands/change_inspector.rb +34 -0
  29. data/lib/pry/commands/change_prompt.rb +51 -0
  30. data/lib/pry/commands/clear_screen.rb +20 -0
  31. data/lib/pry/commands/code_collector.rb +148 -131
  32. data/lib/pry/commands/disable_pry.rb +23 -19
  33. data/lib/pry/commands/easter_eggs.rb +23 -34
  34. data/lib/pry/commands/edit/exception_patcher.rb +21 -17
  35. data/lib/pry/commands/edit/file_and_line_locator.rb +33 -24
  36. data/lib/pry/commands/edit.rb +183 -167
  37. data/lib/pry/commands/exit.rb +40 -35
  38. data/lib/pry/commands/exit_all.rb +24 -20
  39. data/lib/pry/commands/exit_program.rb +20 -17
  40. data/lib/pry/commands/find_method.rb +167 -167
  41. data/lib/pry/commands/fix_indent.rb +16 -12
  42. data/lib/pry/commands/help.rb +140 -133
  43. data/lib/pry/commands/hist.rb +153 -132
  44. data/lib/pry/commands/import_set.rb +20 -15
  45. data/lib/pry/commands/jump_to.rb +25 -21
  46. data/lib/pry/commands/list_inspectors.rb +42 -0
  47. data/lib/pry/commands/ls/constants.rb +75 -0
  48. data/lib/pry/commands/ls/formatter.rb +55 -0
  49. data/lib/pry/commands/ls/globals.rb +50 -0
  50. data/lib/pry/commands/ls/grep.rb +23 -0
  51. data/lib/pry/commands/ls/instance_vars.rb +40 -0
  52. data/lib/pry/commands/ls/interrogatable.rb +24 -0
  53. data/lib/pry/commands/ls/jruby_hacks.rb +55 -0
  54. data/lib/pry/commands/ls/local_names.rb +37 -0
  55. data/lib/pry/commands/ls/local_vars.rb +47 -0
  56. data/lib/pry/commands/ls/ls_entity.rb +65 -0
  57. data/lib/pry/commands/ls/methods.rb +55 -0
  58. data/lib/pry/commands/ls/methods_helper.rb +50 -0
  59. data/lib/pry/commands/ls/self_methods.rb +34 -0
  60. data/lib/pry/commands/ls.rb +100 -303
  61. data/lib/pry/commands/nesting.rb +21 -17
  62. data/lib/pry/commands/play.rb +93 -49
  63. data/lib/pry/commands/pry_backtrace.rb +22 -18
  64. data/lib/pry/commands/pry_version.rb +15 -11
  65. data/lib/pry/commands/raise_up.rb +33 -27
  66. data/lib/pry/commands/reload_code.rb +57 -48
  67. data/lib/pry/commands/reset.rb +16 -12
  68. data/lib/pry/commands/ri.rb +57 -38
  69. data/lib/pry/commands/save_file.rb +45 -43
  70. data/lib/pry/commands/shell_command.rb +66 -34
  71. data/lib/pry/commands/shell_mode.rb +22 -20
  72. data/lib/pry/commands/show_doc.rb +80 -65
  73. data/lib/pry/commands/show_info.rb +193 -159
  74. data/lib/pry/commands/show_input.rb +16 -11
  75. data/lib/pry/commands/show_source.rb +113 -33
  76. data/lib/pry/commands/stat.rb +35 -31
  77. data/lib/pry/commands/switch_to.rb +21 -15
  78. data/lib/pry/commands/toggle_color.rb +21 -13
  79. data/lib/pry/commands/watch_expression/expression.rb +43 -0
  80. data/lib/pry/commands/watch_expression.rb +110 -0
  81. data/lib/pry/commands/whereami.rb +157 -134
  82. data/lib/pry/commands/wtf.rb +78 -40
  83. data/lib/pry/config/attributable.rb +22 -0
  84. data/lib/pry/config/lazy_value.rb +29 -0
  85. data/lib/pry/config/memoized_value.rb +34 -0
  86. data/lib/pry/config/value.rb +24 -0
  87. data/lib/pry/config.rb +290 -220
  88. data/lib/pry/control_d_handler.rb +28 -0
  89. data/lib/pry/core_extensions.rb +50 -27
  90. data/lib/pry/editor.rb +130 -102
  91. data/lib/pry/env.rb +18 -0
  92. data/lib/pry/exception_handler.rb +43 -0
  93. data/lib/pry/exceptions.rb +73 -0
  94. data/lib/pry/forwardable.rb +27 -0
  95. data/lib/pry/helpers/base_helpers.rb +22 -151
  96. data/lib/pry/helpers/command_helpers.rb +55 -63
  97. data/lib/pry/helpers/documentation_helpers.rb +21 -13
  98. data/lib/pry/helpers/options_helpers.rb +15 -8
  99. data/lib/pry/helpers/platform.rb +55 -0
  100. data/lib/pry/helpers/table.rb +44 -32
  101. data/lib/pry/helpers/text.rb +96 -86
  102. data/lib/pry/helpers.rb +3 -0
  103. data/lib/pry/history.rb +101 -70
  104. data/lib/pry/hooks.rb +67 -137
  105. data/lib/pry/indent.rb +79 -73
  106. data/lib/pry/input_completer.rb +283 -0
  107. data/lib/pry/input_lock.rb +129 -0
  108. data/lib/pry/inspector.rb +39 -0
  109. data/lib/pry/last_exception.rb +61 -0
  110. data/lib/pry/method/disowned.rb +19 -5
  111. data/lib/pry/{commands/edit/method_patcher.rb → method/patcher.rb} +51 -42
  112. data/lib/pry/method/weird_method_locator.rb +80 -44
  113. data/lib/pry/method.rb +225 -176
  114. data/lib/pry/object_path.rb +91 -0
  115. data/lib/pry/output.rb +136 -0
  116. data/lib/pry/pager.rb +227 -68
  117. data/lib/pry/prompt.rb +214 -0
  118. data/lib/pry/pry_class.rb +216 -289
  119. data/lib/pry/pry_instance.rb +438 -500
  120. data/lib/pry/repl.rb +256 -0
  121. data/lib/pry/repl_file_loader.rb +34 -35
  122. data/lib/pry/ring.rb +89 -0
  123. data/lib/pry/slop/LICENSE +20 -0
  124. data/lib/pry/slop/commands.rb +190 -0
  125. data/lib/pry/slop/option.rb +210 -0
  126. data/lib/pry/slop.rb +672 -0
  127. data/lib/pry/syntax_highlighter.rb +26 -0
  128. data/lib/pry/system_command_handler.rb +17 -0
  129. data/lib/pry/testable/evalable.rb +24 -0
  130. data/lib/pry/testable/mockable.rb +22 -0
  131. data/lib/pry/testable/pry_tester.rb +88 -0
  132. data/lib/pry/testable/utility.rb +34 -0
  133. data/lib/pry/testable/variables.rb +52 -0
  134. data/lib/pry/testable.rb +68 -0
  135. data/lib/pry/version.rb +3 -1
  136. data/lib/pry/warning.rb +20 -0
  137. data/lib/pry/{module_candidate.rb → wrapped_module/candidate.rb} +36 -43
  138. data/lib/pry/wrapped_module.rb +102 -103
  139. data/lib/pry.rb +135 -261
  140. metadata +94 -283
  141. data/.document +0 -2
  142. data/.gitignore +0 -16
  143. data/.travis.yml +0 -21
  144. data/.yardopts +0 -1
  145. data/CHANGELOG +0 -534
  146. data/CONTRIBUTORS +0 -55
  147. data/Gemfile +0 -9
  148. data/Guardfile +0 -62
  149. data/README.markdown +0 -400
  150. data/Rakefile +0 -140
  151. data/TODO +0 -117
  152. data/lib/pry/commands/disabled_commands.rb +0 -2
  153. data/lib/pry/commands/gem_cd.rb +0 -26
  154. data/lib/pry/commands/gem_install.rb +0 -29
  155. data/lib/pry/commands/gem_list.rb +0 -33
  156. data/lib/pry/commands/gem_open.rb +0 -29
  157. data/lib/pry/commands/gist.rb +0 -102
  158. data/lib/pry/commands/install_command.rb +0 -51
  159. data/lib/pry/commands/simple_prompt.rb +0 -22
  160. data/lib/pry/commands.rb +0 -6
  161. data/lib/pry/completion.rb +0 -304
  162. data/lib/pry/custom_completions.rb +0 -6
  163. data/lib/pry/history_array.rb +0 -116
  164. data/lib/pry/plugins.rb +0 -103
  165. data/lib/pry/rbx_method.rb +0 -13
  166. data/lib/pry/rbx_path.rb +0 -22
  167. data/lib/pry/rubygem.rb +0 -74
  168. data/lib/pry/terminal.rb +0 -78
  169. data/lib/pry/test/helper.rb +0 -185
  170. data/man/pry.1 +0 -195
  171. data/man/pry.1.html +0 -204
  172. data/man/pry.1.ronn +0 -141
  173. data/pry.gemspec +0 -30
  174. data/spec/Procfile +0 -3
  175. data/spec/cli_spec.rb +0 -78
  176. data/spec/code_object_spec.rb +0 -277
  177. data/spec/code_spec.rb +0 -219
  178. data/spec/command_helpers_spec.rb +0 -29
  179. data/spec/command_integration_spec.rb +0 -644
  180. data/spec/command_set_spec.rb +0 -627
  181. data/spec/command_spec.rb +0 -821
  182. data/spec/commands/amend_line_spec.rb +0 -247
  183. data/spec/commands/bang_spec.rb +0 -19
  184. data/spec/commands/cat_spec.rb +0 -164
  185. data/spec/commands/cd_spec.rb +0 -250
  186. data/spec/commands/disable_pry_spec.rb +0 -25
  187. data/spec/commands/edit_spec.rb +0 -727
  188. data/spec/commands/exit_all_spec.rb +0 -34
  189. data/spec/commands/exit_program_spec.rb +0 -19
  190. data/spec/commands/exit_spec.rb +0 -34
  191. data/spec/commands/find_method_spec.rb +0 -70
  192. data/spec/commands/gem_list_spec.rb +0 -26
  193. data/spec/commands/gist_spec.rb +0 -79
  194. data/spec/commands/help_spec.rb +0 -56
  195. data/spec/commands/hist_spec.rb +0 -181
  196. data/spec/commands/jump_to_spec.rb +0 -15
  197. data/spec/commands/ls_spec.rb +0 -181
  198. data/spec/commands/play_spec.rb +0 -140
  199. data/spec/commands/raise_up_spec.rb +0 -56
  200. data/spec/commands/save_file_spec.rb +0 -177
  201. data/spec/commands/show_doc_spec.rb +0 -510
  202. data/spec/commands/show_input_spec.rb +0 -17
  203. data/spec/commands/show_source_spec.rb +0 -782
  204. data/spec/commands/whereami_spec.rb +0 -203
  205. data/spec/completion_spec.rb +0 -239
  206. data/spec/control_d_handler_spec.rb +0 -58
  207. data/spec/documentation_helper_spec.rb +0 -73
  208. data/spec/editor_spec.rb +0 -79
  209. data/spec/exception_whitelist_spec.rb +0 -21
  210. data/spec/fixtures/candidate_helper1.rb +0 -11
  211. data/spec/fixtures/candidate_helper2.rb +0 -8
  212. data/spec/fixtures/example.erb +0 -5
  213. data/spec/fixtures/example_nesting.rb +0 -33
  214. data/spec/fixtures/show_source_doc_examples.rb +0 -15
  215. data/spec/fixtures/testrc +0 -2
  216. data/spec/fixtures/testrcbad +0 -2
  217. data/spec/fixtures/whereami_helper.rb +0 -6
  218. data/spec/helper.rb +0 -34
  219. data/spec/helpers/bacon.rb +0 -86
  220. data/spec/helpers/mock_pry.rb +0 -43
  221. data/spec/helpers/table_spec.rb +0 -105
  222. data/spec/history_array_spec.rb +0 -67
  223. data/spec/hooks_spec.rb +0 -522
  224. data/spec/indent_spec.rb +0 -301
  225. data/spec/input_stack_spec.rb +0 -90
  226. data/spec/method_spec.rb +0 -482
  227. data/spec/prompt_spec.rb +0 -60
  228. data/spec/pry_defaults_spec.rb +0 -419
  229. data/spec/pry_history_spec.rb +0 -99
  230. data/spec/pry_output_spec.rb +0 -95
  231. data/spec/pry_spec.rb +0 -504
  232. data/spec/run_command_spec.rb +0 -25
  233. data/spec/sticky_locals_spec.rb +0 -157
  234. data/spec/syntax_checking_spec.rb +0 -81
  235. data/spec/wrapped_module_spec.rb +0 -261
  236. data/wiki/Customizing-pry.md +0 -397
  237. data/wiki/Home.md +0 -4
data/spec/pry_spec.rb DELETED
@@ -1,504 +0,0 @@
1
- require 'helper'
2
-
3
- describe Pry do
4
- before do
5
- @str_output = StringIO.new
6
- end
7
-
8
- if RUBY_VERSION =~ /1.9/
9
- describe "Exotic object support" do
10
- # regression test for exotic object support
11
- it "Should not error when return value is a BasicObject instance" do
12
-
13
- lambda do
14
- redirect_pry_io(InputTester.new("BasicObject.new", "exit-all"), StringIO.new) do
15
- Pry.start
16
- end
17
- end.should.not.raise NoMethodError
18
-
19
- end
20
- end
21
- end
22
-
23
- describe 'DISABLE_PRY' do
24
- before do
25
- ENV['DISABLE_PRY'] = 'true'
26
- end
27
-
28
- after do
29
- ENV.delete 'DISABLE_PRY'
30
- end
31
-
32
- it 'should not binding.pry' do
33
- binding.pry.should == nil
34
- end
35
-
36
- it 'should not Pry.start' do
37
- Pry.start.should == nil
38
- end
39
- end
40
-
41
- describe "Pry.critical_section" do
42
- it "should prevent Pry being called" do
43
- output = StringIO.new
44
- Pry.output = output
45
- Pry.critical_section do
46
- Pry.start
47
- end
48
- output.string.should =~ /Pry started inside Pry/
49
- end
50
- end
51
-
52
- describe "Pry.binding_for" do
53
-
54
- # regression test for burg's bug (see git history)
55
- it "Should not error when object doesn't have a valid == method" do
56
- o = Object.new
57
- def o.==(other)
58
- raise
59
- end
60
-
61
- lambda { Pry.binding_for(o) }.should.not.raise Exception
62
- end
63
-
64
- it "should not leak local variables" do
65
- [Object.new, Array, 3].each do |obj|
66
- Pry.binding_for(obj).eval("local_variables").should.be.empty
67
- end
68
- end
69
- end
70
-
71
- describe "open a Pry session on an object" do
72
- describe "rep" do
73
- before do
74
- class Hello
75
- end
76
- end
77
-
78
- after do
79
- Object.send(:remove_const, :Hello)
80
- end
81
-
82
- # bug fix for https://github.com/banister/pry/issues/93
83
- it 'should not leak pry constants into Object namespace' do
84
- input_string = "Command"
85
- o = Object.new
86
- pry_tester = Pry.new(:input => StringIO.new(input_string),
87
- :output => @str_output,
88
- :exception_handler => proc { |_, exception, _pry_| @excep = exception },
89
- :print => proc {}
90
- ).rep(o)
91
-
92
- @excep.is_a?(NameError).should == true
93
- end
94
-
95
- if defined?(BasicObject)
96
- it 'should be able to operate inside the BasicObject class' do
97
- redirect_pry_io(InputTester.new(":foo", "Pad.obj = _", "exit-all")) do
98
- BasicObject.pry
99
- end
100
-
101
- Pad.obj.should == :foo
102
- end
103
- end
104
-
105
- it 'should set an ivar on an object' do
106
- input_string = "@x = 10"
107
- input = InputTester.new(input_string)
108
- o = Object.new
109
-
110
- pry_tester = Pry.new(:input => input, :output => StringIO.new)
111
- pry_tester.rep(o)
112
- o.instance_variable_get(:@x).should == 10
113
- end
114
-
115
- it 'should display error if Pry instance runs out of input' do
116
- redirect_pry_io(StringIO.new, @str_output) do
117
- Pry.new.repl
118
- end
119
- @str_output.string.should =~ /Error: Pry ran out of things to read/
120
- end
121
-
122
- it 'should make self evaluate to the receiver of the rep session' do
123
- o = :john
124
-
125
- pry_tester = Pry.new(:input => InputTester.new("self"), :output => @str_output)
126
- pry_tester.rep(o)
127
- @str_output.string.should =~ /:john/
128
- end
129
-
130
- it 'should work with multi-line input' do
131
- o = Object.new
132
-
133
- pry_tester = Pry.new(:input => InputTester.new("x = ", "1 + 4"), :output => @str_output)
134
- pry_tester.rep(o)
135
- @str_output.string.should =~ /5/
136
- end
137
-
138
- it 'should define a nested class under Hello and not on top-level or Pry' do
139
- pry_tester = Pry.new(:input => InputTester.new("class Nested", "end"), :output => StringIO.new)
140
- pry_tester.rep(Hello)
141
- Hello.const_defined?(:Nested).should == true
142
- end
143
-
144
- it 'should suppress output if input ends in a ";" and is an Exception object (single line)' do
145
- o = Object.new
146
-
147
- pry_tester = Pry.new(:input => InputTester.new("Exception.new;"), :output => @str_output)
148
- pry_tester.rep(o)
149
- @str_output.string.should == ""
150
- end
151
-
152
- it 'should suppress output if input ends in a ";" (single line)' do
153
- o = Object.new
154
-
155
- pry_tester = Pry.new(:input => InputTester.new("x = 5;"), :output => @str_output)
156
- pry_tester.rep(o)
157
- @str_output.string.should == ""
158
- end
159
-
160
- it 'should suppress output if input ends in a ";" (multi-line)' do
161
- o = Object.new
162
-
163
- pry_tester = Pry.new(:input => InputTester.new("def self.blah", ":test", "end;"), :output => @str_output)
164
- pry_tester.rep(o)
165
- @str_output.string.should == ""
166
- end
167
-
168
- it 'should be able to evaluate exceptions normally' do
169
- o = Exception.new
170
-
171
- was_called = false
172
- pry_tester = Pry.new(:input => InputTester.new("self"),
173
- :output => @str_output,
174
- :exception_handler => proc { was_called = true })
175
-
176
- pry_tester.rep(o)
177
- was_called.should == false
178
- end
179
-
180
- it 'should notice when exceptions are raised' do
181
- o = Exception.new
182
-
183
- was_called = false
184
- pry_tester = Pry.new(:input => InputTester.new("raise self"),
185
- :output => @str_output,
186
- :exception_handler => proc { was_called = true })
187
-
188
- pry_tester.rep(o)
189
- was_called.should == true
190
- end
191
-
192
- it 'should not try to catch intended exceptions' do
193
- lambda { mock_pry("raise SystemExit") }.should.raise SystemExit
194
- # SIGTERM
195
- lambda { mock_pry("raise SignalException.new(15)") }.should.raise SignalException
196
- end
197
- end
198
-
199
- describe "repl" do
200
- describe "basic functionality" do
201
- it 'should set an ivar on an object and exit the repl' do
202
- input_strings = ["@x = 10", "exit-all"]
203
- input = InputTester.new(*input_strings)
204
-
205
- o = Object.new
206
-
207
- pry_tester = Pry.start(o, :input => input, :output => StringIO.new)
208
-
209
- o.instance_variable_get(:@x).should == 10
210
- end
211
- end
212
-
213
- describe "complete_expression?" do
214
- it "should not mutate the input!" do
215
- clean = "puts <<-FOO\nhi\nFOO\n"
216
- a = clean.dup
217
- Pry::Code.complete_expression?(a)
218
- a.should == clean
219
- end
220
- end
221
-
222
- describe "history arrays" do
223
- it 'sets _ to the last result' do
224
- res = []
225
- input = InputTester.new *[":foo", "self << _", "42", "self << _"]
226
- pry = Pry.new(:input => input, :output => StringIO.new)
227
- pry.repl(res)
228
-
229
- res.should == [:foo, 42]
230
- end
231
-
232
- it 'sets out to an array with the result' do
233
- res = {}
234
- input = InputTester.new *[":foo", "42", "self[:res] = _out_"]
235
- pry = Pry.new(:input => input, :output => StringIO.new)
236
- pry.repl(res)
237
-
238
- res[:res].should.be.kind_of Pry::HistoryArray
239
- res[:res][1..2].should == [:foo, 42]
240
- end
241
-
242
- it 'sets _in_ to an array with the entered lines' do
243
- res = {}
244
- input = InputTester.new *[":foo", "42", "self[:res] = _in_"]
245
- pry = Pry.new(:input => input, :output => StringIO.new)
246
- pry.repl(res)
247
-
248
- res[:res].should.be.kind_of Pry::HistoryArray
249
- res[:res][1..2].should == [":foo\n", "42\n"]
250
- end
251
-
252
- it 'uses 100 as the size of _in_ and _out_' do
253
- res = []
254
- input = InputTester.new *["self << _out_.max_size << _in_.max_size"]
255
- pry = Pry.new(:input => input, :output => StringIO.new)
256
- pry.repl(res)
257
-
258
- res.should == [100, 100]
259
- end
260
-
261
- it 'can change the size of the history arrays' do
262
- res = []
263
- input = InputTester.new *["self << _out_.max_size << _in_.max_size"]
264
- pry = Pry.new(:input => input, :output => StringIO.new,
265
- :memory_size => 1000)
266
- pry.repl(res)
267
-
268
- res.should == [1000, 1000]
269
- end
270
-
271
- it 'store exceptions' do
272
- res = []
273
- input = InputTester.new *["foo!","self << _in_[-1] << _out_[-1]"]
274
- pry = Pry.new(:input => input, :output => StringIO.new,
275
- :memory_size => 1000)
276
- pry.repl(res)
277
-
278
- res.first.should == "foo!\n"
279
- res.last.should.be.kind_of NoMethodError
280
- end
281
- end
282
-
283
- describe "last_result" do
284
- it "should be set to the most recent value" do
285
- pry_eval("2", "_ + 82").should == 84
286
- end
287
-
288
- # This test needs mock_pry because the command retvals work by
289
- # replacing the eval_string, so _ won't be modified without Pry doing
290
- # a REPL loop.
291
- it "should be set to the result of a command with :keep_retval" do
292
- Pry::Commands.block_command '++', '', :keep_retval => true do |a|
293
- a.to_i + 1
294
- end
295
-
296
- mock_pry('++ 86', '++ #{_}').should =~ /88/
297
- end
298
-
299
- it "should be preserved over an empty line" do
300
- pry_eval("2 + 2", " ", "\t", " ", "_ + 92").should == 96
301
- end
302
-
303
- it "should be preserved when evalling a command without :keep_retval" do
304
- pry_eval("2 + 2", "ls -l", "_ + 96").should == 100
305
- end
306
- end
307
-
308
- describe "test loading rc files" do
309
- before do
310
- Pry::HOME_RC_FILE.replace "spec/fixtures/testrc"
311
- Pry::LOCAL_RC_FILE.replace "spec/fixtures/testrc/../testrc"
312
- Pry.instance_variable_set(:@initial_session, true)
313
- end
314
-
315
- after do
316
- Pry::HOME_RC_FILE.replace "~/.pryrc"
317
- Pry::LOCAL_RC_FILE.replace "./.pryrc"
318
- Pry.config.should_load_rc = false
319
- Object.remove_const(:TEST_RC) if defined?(TEST_RC)
320
- end
321
-
322
- it "should never run the rc file twice" do
323
- Pry.config.should_load_rc = true
324
-
325
- Pry.start(self, :input => StringIO.new("exit-all\n"), :output => StringIO.new)
326
- TEST_RC.should == [0]
327
-
328
- Pry.start(self, :input => StringIO.new("exit-all\n"), :output => StringIO.new)
329
- TEST_RC.should == [0]
330
- end
331
-
332
- it "should not load the pryrc if it cannot expand ENV[HOME]" do
333
- old_home = ENV['HOME']
334
- old_rc = Pry.config.should_load_rc
335
- ENV['HOME'] = nil
336
- Pry.config.should_load_rc = true
337
- lambda { Pry.start(self, :input => StringIO.new("exit-all\n"), :output => StringIO.new) }.should.not.raise
338
-
339
- ENV['HOME'] = old_home
340
- Pry.config.should_load_rc = old_rc
341
- end
342
-
343
- it "should not run the rc file at all if Pry.config.should_load_rc is false" do
344
- Pry.config.should_load_rc = false
345
- Pry.start(self, :input => StringIO.new("exit-all\n"), :output => StringIO.new)
346
- Object.const_defined?(:TEST_RC).should == false
347
- end
348
-
349
- it "should not load the rc file if #repl method invoked" do
350
- Pry.config.should_load_rc = true
351
- Pry.new(:input => StringIO.new("exit-all\n"), :output => StringIO.new).repl(self)
352
- Object.const_defined?(:TEST_RC).should == false
353
- Pry.config.should_load_rc = false
354
- end
355
-
356
- describe "that raise exceptions" do
357
- before do
358
- Pry::HOME_RC_FILE = "spec/fixtures/testrcbad"
359
- Pry.config.should_load_rc = true
360
- Pry.config.should_load_local_rc = false
361
-
362
- putsed = nil
363
-
364
- # YUCK! horrible hack to get round the fact that output is not configured
365
- # at the point this message is printed.
366
- (class << Pry; self; end).send(:define_method, :puts) { |str|
367
- putsed = str
368
- }
369
-
370
- @doing_it = lambda{
371
- Pry.start(self, :input => StringIO.new("Object::TEST_AFTER_RAISE=1\nexit-all\n"), :output => StringIO.new)
372
- putsed
373
- }
374
- end
375
-
376
- after do
377
- Object.remove_const(:TEST_BEFORE_RAISE)
378
- Object.remove_const(:TEST_AFTER_RAISE)
379
- (class << Pry; undef_method :puts; end)
380
- end
381
-
382
- it "should not raise exceptions" do
383
- @doing_it.should.not.raise
384
- end
385
-
386
- it "should continue to run pry" do
387
- @doing_it[]
388
- Object.const_defined?(:TEST_BEFORE_RAISE).should == true
389
- Object.const_defined?(:TEST_AFTER_RAISE).should == true
390
- end
391
-
392
- it "should output an error" do
393
- @doing_it.call.split("\n").first.should ==
394
- "Error loading spec/fixtures/testrcbad: messin with ya"
395
- end
396
- end
397
- end
398
-
399
- describe "nesting" do
400
- after do
401
- Pry.reset_defaults
402
- Pry.color = false
403
- end
404
-
405
- it 'should nest properly' do
406
- Pry.input = InputTester.new("cd 1", "cd 2", "cd 3", "\"nest:\#\{(_pry_.binding_stack.size - 1)\}\"", "exit-all")
407
-
408
- Pry.output = @str_output
409
-
410
- o = Object.new
411
-
412
- pry_tester = o.pry
413
- @str_output.string.should =~ /nest:3/
414
- end
415
- end
416
-
417
- describe "defining methods" do
418
- it 'should define a method on the singleton class of an object when performing "def meth;end" inside the object' do
419
- [Object.new, {}, []].each do |val|
420
- str_input = StringIO.new("def hello;end")
421
- Pry.new(:input => str_input, :output => StringIO.new).rep(val)
422
-
423
- val.methods(false).map(&:to_sym).include?(:hello).should == true
424
- end
425
- end
426
-
427
- it 'should define an instance method on the module when performing "def meth;end" inside the module' do
428
- str_input = StringIO.new("def hello;end")
429
- hello = Module.new
430
- Pry.new(:input => str_input, :output => StringIO.new).rep(hello)
431
- hello.instance_methods(false).map(&:to_sym).include?(:hello).should == true
432
- end
433
-
434
- it 'should define an instance method on the class when performing "def meth;end" inside the class' do
435
- str_input = StringIO.new("def hello;end")
436
- hello = Class.new
437
- Pry.new(:input => str_input, :output => StringIO.new).rep(hello)
438
- hello.instance_methods(false).map(&:to_sym).include?(:hello).should == true
439
- end
440
-
441
- it 'should define a method on the class of an object when performing "def meth;end" inside an immediate value or Numeric' do
442
- # should include float in here, but test fails for some reason
443
- # on 1.8.7, no idea why!
444
- [:test, 0, true, false, nil].each do |val|
445
- str_input = StringIO.new("def hello;end")
446
- Pry.new(:input => str_input, :output => StringIO.new).rep(val)
447
- val.class.instance_methods(false).map(&:to_sym).include?(:hello).should == true
448
- end
449
- end
450
- end
451
-
452
- describe "Object#pry" do
453
-
454
- after do
455
- Pry.reset_defaults
456
- Pry.color = false
457
- end
458
-
459
- it "should start a pry session on the receiver (first form)" do
460
- Pry.input = InputTester.new("self", "exit-all")
461
-
462
- str_output = StringIO.new
463
- Pry.output = str_output
464
-
465
- 20.pry
466
-
467
- str_output.string.should =~ /20/
468
- end
469
-
470
- it "should start a pry session on the receiver (second form)" do
471
- Pry.input = InputTester.new("self", "exit-all")
472
-
473
- str_output = StringIO.new
474
- Pry.output = str_output
475
-
476
- pry 20
477
-
478
- str_output.string.should =~ /20/
479
- end
480
-
481
- it "should raise if more than two arguments are passed to Object#pry" do
482
- lambda { pry(20, :quiet, :input => Readline) }.should.raise ArgumentError
483
- end
484
- end
485
-
486
- describe "Pry.binding_for" do
487
- it 'should return TOPLEVEL_BINDING if parameter self is main' do
488
- _main_ = lambda { TOPLEVEL_BINDING.eval('self') }
489
- Pry.binding_for(_main_.call).is_a?(Binding).should == true
490
- Pry.binding_for(_main_.call).should == TOPLEVEL_BINDING
491
- Pry.binding_for(_main_.call).should == Pry.binding_for(_main_.call)
492
- end
493
- end
494
- end
495
- end
496
-
497
- describe 'setting custom options' do
498
- it 'should not raise for unrecognized options' do
499
- should.not.raise?(NoMethodError) {
500
- instance = Pry.new(:custom_option => 'custom value')
501
- }
502
- end
503
- end
504
- end
@@ -1,25 +0,0 @@
1
- require 'helper'
2
-
3
- describe "Pry.run_command" do
4
- before do
5
- o = Object.new
6
- def o.drum
7
- "roken is dodelijk"
8
- end
9
- @context = Pry.binding_for(o)
10
- end
11
-
12
- it 'performs a simple ls' do
13
- @context.eval("hokey_pokey = 10")
14
- Pry.run_command "ls", :context => @context, :output => out = StringIO.new
15
- out.string.should =~ /hokey_pokey/
16
- end
17
-
18
- if !PryTestHelpers.mri18_and_no_real_source_location?
19
- # This is a regression test as 0.9.11 broke this behaviour
20
- it 'can perform a show-source' do
21
- Pry.run_command "show-source drum", :context => @context, :output => out = StringIO.new
22
- out.string.should =~ /roken is dodelijk/
23
- end
24
- end
25
- end
@@ -1,157 +0,0 @@
1
- require 'helper'
2
-
3
- describe "Sticky locals (_file_ and friends)" do
4
- it 'locals should all exist upon initialization' do
5
- proc {
6
- pry_eval '_file_', '_dir_', '_ex_', '_pry_', '_'
7
- }.should.not.raise(NameError)
8
- end
9
-
10
- it 'locals should still exist after cd-ing into a new context' do
11
- proc {
12
- pry_eval 'cd 0', '_file_', '_dir_', '_ex_', '_pry_', '_'
13
- }.should.not.raise(NameError)
14
- end
15
-
16
- it 'locals should keep value after cd-ing (_pry_)' do
17
- pry_tester.tap do |t|
18
- pry = t.eval '_pry_'
19
- t.eval 'cd 0'
20
- t.eval('_pry_').should == pry
21
- end
22
- end
23
-
24
- # Using mock_pry here until we figure out exception handling
25
- it 'locals should keep value after cd-ing (_ex_)' do
26
- mock_pry("error blah;", "$x = _ex_;", "cd 0", "_ex_ == $x").should =~ /true/
27
- end
28
-
29
- it 'locals should keep value after cd-ing (_file_ and _dir_)' do
30
- Pry.commands.command "file-and-dir-test" do
31
- set_file_and_dir_locals("/blah/ostrich.rb")
32
- end
33
-
34
- pry_eval('file-and-dir-test', 'cd 0', '_file_').
35
- should =~ /\/blah\/ostrich\.rb/
36
-
37
- pry_eval('file-and-dir-test', 'cd 0', '_dir_').
38
- should =~ /\/blah/
39
-
40
- Pry.commands.delete "file-and-dir-test"
41
- end
42
-
43
- describe "User defined sticky locals" do
44
- describe "setting as Pry.config option" do
45
- it 'should define a new sticky local for the session (normal value)' do
46
- Pry.config.extra_sticky_locals[:test_local] = :john
47
-
48
- o = Object.new
49
- redirect_pry_io(InputTester.new("@value = test_local",
50
- "exit-all")) do
51
- Pry.start(o)
52
- end
53
-
54
- o.instance_variable_get(:@value).should == :john
55
- Pry.config.extra_sticky_locals = {}
56
- end
57
-
58
- it 'should define a new sticky local for the session (proc)' do
59
- Pry.config.extra_sticky_locals[:test_local] = proc { :john }
60
-
61
- o = Object.new
62
- redirect_pry_io(InputTester.new("@value = test_local",
63
- "exit-all")) do
64
- Pry.start(o)
65
- end
66
-
67
- o.instance_variable_get(:@value).should == :john
68
- Pry.config.extra_sticky_locals = {}
69
- end
70
-
71
- end
72
-
73
- describe "passing in as hash option when creating pry instance" do
74
- it 'should define a new sticky local for the session (normal value)' do
75
- o = Object.new
76
- redirect_pry_io(InputTester.new("@value = test_local",
77
- "exit-all")) do
78
- Pry.start(o, :extra_sticky_locals => { :test_local => :john } )
79
- end
80
-
81
- o.instance_variable_get(:@value).should == :john
82
- end
83
-
84
- it 'should define multiple sticky locals' do
85
- o = Object.new
86
- redirect_pry_io(InputTester.new("@value1 = test_local1",
87
- "@value2 = test_local2",
88
- "exit-all")) do
89
- Pry.start(o, :extra_sticky_locals => { :test_local1 => :john ,
90
- :test_local2 => :carl} )
91
- end
92
-
93
- o.instance_variable_get(:@value1).should == :john
94
- o.instance_variable_get(:@value2).should == :carl
95
- end
96
-
97
-
98
- it 'should define a new sticky local for the session (as Proc)' do
99
- o = Object.new
100
- redirect_pry_io(InputTester.new("@value = test_local",
101
- "exit-all")) do
102
- Pry.start(o, :extra_sticky_locals => { :test_local => proc { :john }} )
103
- end
104
-
105
- o.instance_variable_get(:@value).should == :john
106
- end
107
- end
108
-
109
- describe "hash option value should override config value" do
110
- it 'should define a new sticky local for the session (normal value)' do
111
- Pry.config.extra_sticky_locals[:test_local] = :john
112
-
113
- o = Object.new
114
- redirect_pry_io(InputTester.new("@value = test_local",
115
- "exit-all")) do
116
- Pry.start(o, :extra_sticky_locals => { :test_local => :carl })
117
- end
118
-
119
- o.instance_variable_get(:@value).should == :carl
120
- Pry.config.extra_sticky_locals = {}
121
- end
122
- end
123
-
124
- it 'should create a new sticky local' do
125
- o = Object.new
126
- pi = Pry.new
127
- pi.add_sticky_local(:test_local) { :test_value }
128
- pi.input, pi.output = InputTester.new("@value = test_local", "exit-all"), StringIO.new
129
- pi.repl(o)
130
-
131
- o.instance_variable_get(:@value).should == :test_value
132
- end
133
-
134
- it 'should still exist after cd-ing into new binding' do
135
- o = Object.new
136
- o2 = Object.new
137
- o.instance_variable_set(:@o2, o2)
138
- pi = Pry.new
139
- pi.add_sticky_local(:test_local) { :test_value }
140
- pi.input = InputTester.new("cd @o2\n",
141
- "@value = test_local", "exit-all")
142
- pi.output = StringIO.new
143
- pi.repl(o)
144
-
145
- o2.instance_variable_get(:@value).should == :test_value
146
- end
147
-
148
- it 'should provide different values for successive block invocations' do
149
- pry = Pry.new
150
- pry.add_sticky_local(:test_local) { rand }
151
- value1 = pry.evaluate_ruby 'test_local'
152
- value2 = pry.evaluate_ruby 'test_local'
153
- value1.should.not == value2
154
- end
155
- end
156
-
157
- end