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
@@ -1,419 +0,0 @@
1
- require 'helper'
2
-
3
- version = 1
4
-
5
- describe "test Pry defaults" do
6
- before do
7
- @str_output = StringIO.new
8
- end
9
-
10
- after do
11
- Pry.reset_defaults
12
- Pry.color = false
13
- end
14
-
15
- describe "input" do
16
- after do
17
- Pry.reset_defaults
18
- Pry.color = false
19
- end
20
-
21
- it 'should set the input default, and the default should be overridable' do
22
- Pry.input = InputTester.new("5")
23
-
24
- Pry.output = @str_output
25
- Pry.new.rep
26
- @str_output.string.should =~ /5/
27
-
28
- Pry.new(:input => InputTester.new("6")).rep
29
- @str_output.string.should =~ /6/
30
- end
31
-
32
- it 'should pass in the prompt if readline arity is 1' do
33
- Pry.prompt = proc { "A" }
34
-
35
- arity_one_input = Class.new do
36
- attr_accessor :prompt
37
- def readline(prompt)
38
- @prompt = prompt
39
- "exit-all"
40
- end
41
- end.new
42
-
43
- Pry.start(self, :input => arity_one_input, :output => StringIO.new)
44
- arity_one_input.prompt.should == Pry.prompt.call
45
- end
46
-
47
- it 'should not pass in the prompt if the arity is 0' do
48
- Pry.prompt = proc { "A" }
49
-
50
- arity_zero_input = Class.new do
51
- def readline
52
- "exit-all"
53
- end
54
- end.new
55
-
56
- lambda { Pry.start(self, :input => arity_zero_input, :output => StringIO.new) }.should.not.raise Exception
57
- end
58
-
59
- it 'should not pass in the prompt if the arity is -1' do
60
- Pry.prompt = proc { "A" }
61
-
62
- arity_multi_input = Class.new do
63
- attr_accessor :prompt
64
-
65
- def readline(*args)
66
- @prompt = args.first
67
- "exit-all"
68
- end
69
- end.new
70
-
71
- Pry.start(self, :input => arity_multi_input, :output => StringIO.new)
72
- arity_multi_input.prompt.should == nil
73
- end
74
-
75
- end
76
-
77
- it 'should set the output default, and the default should be overridable' do
78
- Pry.input = InputTester.new("5", "6", "7")
79
-
80
- Pry.output = @str_output
81
-
82
- Pry.new.rep
83
- @str_output.string.should =~ /5/
84
-
85
- Pry.new.rep
86
- @str_output.string.should =~ /5\n.*6/
87
-
88
- @str_output = StringIO.new
89
- Pry.new(:output => @str_output).rep
90
- @str_output.string.should.not =~ /5\n.*6/
91
- @str_output.string.should =~ /7/
92
- end
93
-
94
- it "should set the print default, and the default should be overridable" do
95
- new_print = proc { |out, value| out.puts "=> LOL" }
96
- Pry.print = new_print
97
-
98
- Pry.new.print.should == Pry.print
99
- Pry.new(:input => InputTester.new("\"test\""), :output => @str_output).rep
100
- @str_output.string.should == "=> LOL\n"
101
-
102
- @str_output = StringIO.new
103
- Pry.new(:input => InputTester.new("\"test\""), :output => @str_output,
104
- :print => proc { |out, value| out.puts value.reverse }).rep
105
- @str_output.string.should == "tset\n"
106
-
107
- Pry.new.print.should == Pry.print
108
- @str_output = StringIO.new
109
- Pry.new(:input => InputTester.new("\"test\""), :output => @str_output).rep
110
- @str_output.string.should == "=> LOL\n"
111
- end
112
-
113
- describe "pry return values" do
114
- it 'should return nil' do
115
- Pry.start(self, :input => StringIO.new("exit-all"), :output => StringIO.new).should == nil
116
- end
117
-
118
- it 'should return the parameter given to exit-all' do
119
- Pry.start(self, :input => StringIO.new("exit-all 10"), :output => StringIO.new).should == 10
120
- end
121
-
122
- it 'should return the parameter (multi word string) given to exit-all' do
123
- Pry.start(self, :input => StringIO.new("exit-all \"john mair\""), :output => StringIO.new).should == "john mair"
124
- end
125
-
126
- it 'should return the parameter (function call) given to exit-all' do
127
- Pry.start(self, :input => StringIO.new("exit-all 'abc'.reverse"), :output => StringIO.new).should == 'cba'
128
- end
129
-
130
- it 'should return the parameter (self) given to exit-all' do
131
- Pry.start("carl", :input => StringIO.new("exit-all self"), :output => StringIO.new).should == "carl"
132
- end
133
- end
134
-
135
- describe "prompts" do
136
- before do
137
- @empty_input_buffer = ""
138
- @non_empty_input_buffer = "def hello"
139
- @context = Pry.binding_for(0)
140
- end
141
-
142
- it 'should set the prompt default, and the default should be overridable (single prompt)' do
143
- new_prompt = proc { "test prompt> " }
144
- Pry.prompt = new_prompt
145
-
146
- Pry.new.prompt.should == Pry.prompt
147
- Pry.new.select_prompt(@empty_input_buffer, @context).should == "test prompt> "
148
- Pry.new.select_prompt(@non_empty_input_buffer, @context).should == "test prompt> "
149
-
150
- new_prompt = proc { "A" }
151
- pry_tester = Pry.new(:prompt => new_prompt)
152
- pry_tester.prompt.should == new_prompt
153
- pry_tester.select_prompt(@empty_input_buffer, @context).should == "A"
154
- pry_tester.select_prompt(@non_empty_input_buffer, @context).should == "A"
155
-
156
- Pry.new.prompt.should == Pry.prompt
157
- Pry.new.select_prompt(@empty_input_buffer, @context).should == "test prompt> "
158
- Pry.new.select_prompt(@non_empty_input_buffer, @context).should == "test prompt> "
159
- end
160
-
161
- it 'should set the prompt default, and the default should be overridable (multi prompt)' do
162
- new_prompt = [proc { "test prompt> " }, proc { "test prompt* " }]
163
- Pry.prompt = new_prompt
164
-
165
- Pry.new.prompt.should == Pry.prompt
166
- Pry.new.select_prompt(@empty_input_buffer, @context).should == "test prompt> "
167
- Pry.new.select_prompt(@non_empty_input_buffer, @context).should == "test prompt* "
168
-
169
- new_prompt = [proc { "A" }, proc { "B" }]
170
- pry_tester = Pry.new(:prompt => new_prompt)
171
- pry_tester.prompt.should == new_prompt
172
- pry_tester.select_prompt(@empty_input_buffer, @context).should == "A"
173
- pry_tester.select_prompt(@non_empty_input_buffer, @context).should == "B"
174
-
175
- Pry.new.prompt.should == Pry.prompt
176
- Pry.new.select_prompt(@empty_input_buffer, @context).should == "test prompt> "
177
- Pry.new.select_prompt(@non_empty_input_buffer, @context).should == "test prompt* "
178
- end
179
-
180
- describe 'storing and restoring the prompt' do
181
- before do
182
- make = lambda do |name,i|
183
- prompt = [ proc { "#{i}>" } , proc { "#{i+1}>" } ]
184
- (class << prompt; self; end).send(:define_method, :inspect) { "<Prompt-#{name}>" }
185
- prompt
186
- end
187
- @a , @b , @c = make[:a,0] , make[:b,1] , make[:c,2]
188
- @pry = Pry.new :prompt => @a
189
- end
190
- it 'should have a prompt stack' do
191
- @pry.push_prompt @b
192
- @pry.push_prompt @c
193
- @pry.prompt.should == @c
194
- @pry.pop_prompt
195
- @pry.prompt.should == @b
196
- @pry.pop_prompt
197
- @pry.prompt.should == @a
198
- end
199
-
200
- it 'should restore overridden prompts when returning from file-mode' do
201
- pry = Pry.new :input => InputTester.new('shell-mode', 'shell-mode'),
202
- :prompt => [ proc { 'P>' } ] * 2
203
- pry.select_prompt(@empty_input_buffer, @context).should == "P>"
204
- pry.re
205
- pry.select_prompt(@empty_input_buffer, @context).should =~ /\Apry .* \$ \z/
206
- pry.re
207
- pry.select_prompt(@empty_input_buffer, @context).should == "P>"
208
- end
209
-
210
- it '#pop_prompt should return the popped prompt' do
211
- @pry.push_prompt @b
212
- @pry.push_prompt @c
213
- @pry.pop_prompt.should == @c
214
- @pry.pop_prompt.should == @b
215
- end
216
-
217
- it 'should not pop the last prompt' do
218
- @pry.push_prompt @b
219
- @pry.pop_prompt.should == @b
220
- @pry.pop_prompt.should == @a
221
- @pry.pop_prompt.should == @a
222
- @pry.prompt.should == @a
223
- end
224
-
225
- describe '#prompt= should replace the current prompt with the new prompt' do
226
- it 'when only one prompt on the stack' do
227
- @pry.prompt = @b
228
- @pry.prompt.should == @b
229
- @pry.pop_prompt.should == @b
230
- @pry.pop_prompt.should == @b
231
- end
232
- it 'when several prompts on the stack' do
233
- @pry.push_prompt @b
234
- @pry.prompt = @c
235
- @pry.pop_prompt.should == @c
236
- @pry.pop_prompt.should == @a
237
- end
238
- end
239
- end
240
- end
241
-
242
- describe "view_clip used for displaying an object in a truncated format" do
243
-
244
- VC_MAX_LENGTH = 60
245
-
246
- describe "given an object with an #inspect string" do
247
- it "returns the #<> format of the object (never use inspect)" do
248
- o = Object.new
249
- def o.inspect; "a" * VC_MAX_LENGTH; end
250
-
251
- Pry.view_clip(o, VC_MAX_LENGTH).should =~ /#<Object/
252
- end
253
- end
254
-
255
- describe "given the 'main' object" do
256
- it "returns the #to_s of main (special case)" do
257
- o = TOPLEVEL_BINDING.eval('self')
258
- Pry.view_clip(o, VC_MAX_LENGTH).should == o.to_s
259
- end
260
- end
261
-
262
- describe "given the a Numeric, String or Symbol object" do
263
- [1, 2.0, -5, "hello", :test].each do |o|
264
- it "returns the #inspect of the special-cased immediate object: #{o}" do
265
- Pry.view_clip(o, VC_MAX_LENGTH).should == o.inspect
266
- end
267
- end
268
-
269
- # only testing with String here :)
270
- it "returns #<> format of the special-cased immediate object if #inspect is longer than maximum" do
271
- o = "o" * (VC_MAX_LENGTH + 1)
272
- Pry.view_clip(o, VC_MAX_LENGTH).should =~ /#<String/
273
- end
274
- end
275
-
276
- describe "given an object with an #inspect string as long as the maximum specified" do
277
- it "returns the #<> format of the object (never use inspect)" do
278
- o = Object.new
279
- def o.inspect; "a" * VC_MAX_LENGTH; end
280
-
281
- Pry.view_clip(o, VC_MAX_LENGTH).should =~ /#<Object/
282
- end
283
- end
284
-
285
- describe "given a regular object with an #inspect string longer than the maximum specified" do
286
-
287
- describe "when the object is a regular one" do
288
- it "returns a string of the #<class name:object idish> format" do
289
- o = Object.new
290
- def o.inspect; "a" * (VC_MAX_LENGTH + 1); end
291
-
292
- Pry.view_clip(o, VC_MAX_LENGTH).should =~ /#<Object/
293
- end
294
- end
295
-
296
- describe "when the object is a Class or a Module" do
297
- describe "without a name (usually a c = Class.new)" do
298
- it "returns a string of the #<class name:object idish> format" do
299
- c, m = Class.new, Module.new
300
-
301
- Pry.view_clip(c, VC_MAX_LENGTH).should =~ /#<Class/
302
- Pry.view_clip(m, VC_MAX_LENGTH).should =~ /#<Module/
303
- end
304
- end
305
-
306
- describe "with a #name longer than the maximum specified" do
307
- it "returns a string of the #<class name:object idish> format" do
308
- c, m = Class.new, Module.new
309
-
310
-
311
- def c.name; "a" * (VC_MAX_LENGTH + 1); end
312
- def m.name; "a" * (VC_MAX_LENGTH + 1); end
313
-
314
- Pry.view_clip(c, VC_MAX_LENGTH).should =~ /#<Class/
315
- Pry.view_clip(m, VC_MAX_LENGTH).should =~ /#<Module/
316
- end
317
- end
318
-
319
- describe "with a #name shorter than or equal to the maximum specified" do
320
- it "returns a string of the #<class name:object idish> format" do
321
- c, m = Class.new, Module.new
322
-
323
- def c.name; "a" * VC_MAX_LENGTH; end
324
- def m.name; "a" * VC_MAX_LENGTH; end
325
-
326
- Pry.view_clip(c, VC_MAX_LENGTH).should == c.name
327
- Pry.view_clip(m, VC_MAX_LENGTH).should == m.name
328
- end
329
- end
330
-
331
- end
332
-
333
- end
334
-
335
- end
336
-
337
- describe 'quiet' do
338
- it 'should show whereami by default' do
339
- Pry.start(binding, :input => InputTester.new("1", "exit-all"),
340
- :output => @str_output,
341
- :hooks => Pry::DEFAULT_HOOKS)
342
-
343
- @str_output.string.should =~ /[w]hereami by default/
344
- end
345
-
346
- it 'should hide whereami if quiet is set' do
347
- Pry.new(:input => InputTester.new("exit-all"),
348
- :output => @str_output,
349
- :quiet => true,
350
- :hooks => Pry::DEFAULT_HOOKS)
351
-
352
- @str_output.string.should == ""
353
- end
354
- end
355
-
356
- describe 'toplevel_binding' do
357
- it 'should be devoid of local variables' do
358
- pry_eval(Pry.toplevel_binding, "ls -l").should.not =~ /version/
359
- end
360
-
361
- it 'should have self the same as TOPLEVEL_BINDING' do
362
- Pry.toplevel_binding.eval('self').should.equal? TOPLEVEL_BINDING.eval('self')
363
- end
364
-
365
- # https://github.com/rubinius/rubinius/issues/1779
366
- unless Pry::Helpers::BaseHelpers.rbx?
367
- it 'should define private methods on Object' do
368
- TOPLEVEL_BINDING.eval 'def gooey_fooey; end'
369
- method(:gooey_fooey).owner.should == Object
370
- Pry::Method(method(:gooey_fooey)).visibility.should == :private
371
- end
372
- end
373
- end
374
-
375
- it 'should set the hooks default, and the default should be overridable' do
376
- Pry.input = InputTester.new("exit-all")
377
- Pry.hooks = Pry::Hooks.new.
378
- add_hook(:before_session, :my_name) { |out,_,_| out.puts "HELLO" }.
379
- add_hook(:after_session, :my_name) { |out,_,_| out.puts "BYE" }
380
-
381
- Pry.new(:output => @str_output).repl
382
- @str_output.string.should =~ /HELLO/
383
- @str_output.string.should =~ /BYE/
384
-
385
- Pry.input.rewind
386
-
387
- @str_output = StringIO.new
388
- Pry.new(:output => @str_output,
389
- :hooks => Pry::Hooks.new.
390
- add_hook( :before_session, :my_name) { |out,_,_| out.puts "MORNING" }.
391
- add_hook(:after_session, :my_name) { |out,_,_| out.puts "EVENING" }
392
- ).repl
393
-
394
- @str_output.string.should =~ /MORNING/
395
- @str_output.string.should =~ /EVENING/
396
-
397
- # try below with just defining one hook
398
- Pry.input.rewind
399
- @str_output = StringIO.new
400
- Pry.new(:output => @str_output,
401
- :hooks => Pry::Hooks.new.
402
- add_hook(:before_session, :my_name) { |out,_,_| out.puts "OPEN" }
403
- ).repl
404
-
405
- @str_output.string.should =~ /OPEN/
406
-
407
- Pry.input.rewind
408
- @str_output = StringIO.new
409
- Pry.new(:output => @str_output,
410
- :hooks => Pry::Hooks.new.
411
- add_hook(:after_session, :my_name) { |out,_,_| out.puts "CLOSE" }
412
- ).repl
413
-
414
- @str_output.string.should =~ /CLOSE/
415
-
416
- Pry.reset_defaults
417
- Pry.color = false
418
- end
419
- end
@@ -1,99 +0,0 @@
1
- require 'helper'
2
- require 'tempfile'
3
-
4
- describe Pry do
5
- before do
6
- Pry.history.clear
7
-
8
- @saved_history = "1\n2\n3\n"
9
-
10
- Pry.history.loader = proc do |&blk|
11
- @saved_history.lines.each { |l| blk.call(l) }
12
- end
13
-
14
- Pry.history.saver = proc do |lines|
15
- @saved_history << lines.map { |l| "#{l}\n" }.join
16
- end
17
-
18
- Pry.load_history
19
- end
20
-
21
- after do
22
- Pry.history.clear
23
- Pry.history.restore_default_behavior
24
- end
25
-
26
- describe '#push' do
27
- it "should not record duplicated lines" do
28
- Pry.history << '3'
29
- Pry.history << '_ += 1'
30
- Pry.history << '_ += 1'
31
- Pry.history.to_a.grep('_ += 1').count.should == 1
32
- end
33
-
34
- it "should not record empty lines" do
35
- c = Pry.history.to_a.count
36
- Pry.history << ''
37
- Pry.history.to_a.count.should == c
38
- end
39
- end
40
-
41
- describe ".load_history" do
42
- it "should read the contents of the file" do
43
- Pry.history.to_a[-2..-1].should == %w(2 3)
44
- end
45
- end
46
-
47
- describe ".save_history" do
48
- it "should include a trailing newline" do
49
- Pry.history << "4"
50
- Pry.save_history
51
- @saved_history.should =~ /4\n\z/
52
- end
53
-
54
- it "should not change anything if history is not changed" do
55
- @saved_history = "4\n5\n6\n"
56
- Pry.save_history
57
- @saved_history.should == "4\n5\n6\n"
58
- end
59
-
60
- it "should append new lines to the file" do
61
- Pry.history << "4"
62
- Pry.save_history
63
- @saved_history.should == "1\n2\n3\n4\n"
64
- end
65
-
66
- it "should not clobber lines written by other Pry's in the meantime" do
67
- Pry.history << "5"
68
- @saved_history << "4\n"
69
- Pry.save_history
70
-
71
- Pry.history.to_a[-3..-1].should == ["2", "3", "5"]
72
- @saved_history.should == "1\n2\n3\n4\n5\n"
73
- end
74
-
75
- it "should not delete lines from the file if this session's history was cleared" do
76
- Pry.history.clear
77
- Pry.save_history
78
- @saved_history.should == "1\n2\n3\n"
79
- end
80
-
81
- it "should save new lines that are added after the history was cleared" do
82
- Pry.history.clear
83
- Pry.history << "4"
84
- Pry.save_history
85
- @saved_history.should =~ /1\n2\n3\n4\n/
86
- end
87
-
88
- it "should only append new lines the second time it is saved" do
89
- Pry.history << "4"
90
- Pry.save_history
91
- @saved_history << "5\n"
92
- Pry.history << "6"
93
- Pry.save_history
94
-
95
- Pry.history.to_a[-4..-1].should == ["2", "3", "4", "6"]
96
- @saved_history.should == "1\n2\n3\n4\n5\n6\n"
97
- end
98
- end
99
- end
@@ -1,95 +0,0 @@
1
- require 'helper'
2
-
3
- describe Pry do
4
- describe "output failsafe" do
5
- after do
6
- Pry.config.print = Pry::DEFAULT_PRINT
7
- end
8
-
9
- it "should catch serialization exceptions" do
10
- Pry.config.print = lambda { |*a| raise "catch-22" }
11
-
12
- lambda {
13
- mock_pry("1")
14
- }.should.not.raise
15
- end
16
-
17
- it "should display serialization exceptions" do
18
- Pry.config.print = lambda { |*a| raise "catch-22" }
19
-
20
- mock_pry("1").should =~ /\(pry\) output error: #<RuntimeError: catch-22>/
21
- end
22
-
23
- it "should catch errors serializing exceptions" do
24
- Pry.config.print = lambda do |*a|
25
- raise Exception.new("catch-22").tap{ |e| class << e; def inspect; raise e; end; end }
26
- end
27
-
28
- mock_pry("1").should =~ /\(pry\) output error: failed to show result/
29
- end
30
- end
31
-
32
- describe "DEFAULT_PRINT" do
33
- it "should output the right thing" do
34
- mock_pry("[1]").should =~ /^=> \[1\]/
35
- end
36
-
37
- it "should include the =>" do
38
- accumulator = StringIO.new
39
- Pry.config.print.call(accumulator, [1])
40
- accumulator.string.should == "=> \[1\]\n"
41
- end
42
-
43
- it "should not be phased by un-inspectable things" do
44
- mock_pry("class NastyClass; undef pretty_inspect; end", "NastyClass.new").should =~ /#<.*NastyClass:0x.*?>/
45
- end
46
- end
47
-
48
- describe "color" do
49
- before do
50
- Pry.color = true
51
- end
52
-
53
- after do
54
- Pry.color = false
55
- end
56
-
57
- it "should colorize strings as though they were ruby" do
58
- accumulator = StringIO.new
59
- Pry.config.print.call(accumulator, [1])
60
- accumulator.string.should == "=> [\e[1;34m1\e[0m]\e[0m\n"
61
- end
62
-
63
- it "should not colorize strings that already include color" do
64
- f = Object.new
65
- def f.inspect
66
- "\e[1;31mFoo\e[0m"
67
- end
68
- accumulator = StringIO.new
69
- Pry.config.print.call(accumulator, f)
70
- # We add an extra \e[0m to prevent color leak
71
- accumulator.string.should == "=> \e[1;31mFoo\e[0m\e[0m\n"
72
- end
73
- end
74
-
75
- describe "output suppression" do
76
- before do
77
- @t = pry_tester
78
- end
79
- it "should normally output the result" do
80
- mock_pry("1 + 2").should == "=> 3\n\n"
81
- end
82
-
83
- it "should not output anything if the input ends with a semicolon" do
84
- mock_pry("1 + 2;").should == "\n"
85
- end
86
-
87
- it "should output something if the input ends with a comment" do
88
- mock_pry("1 + 2 # basic addition").should == "=> 3\n\n"
89
- end
90
-
91
- it "should not output something if the input is only a comment" do
92
- mock_pry("# basic addition").should == "\n"
93
- end
94
- end
95
- end