pry 0.9.12.2 → 0.14.2

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 (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