pry 0.9.10pre1-i386-mingw32 → 0.9.11-i386-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. data/.travis.yml +3 -1
  2. data/CHANGELOG +63 -2
  3. data/CONTRIBUTORS +43 -25
  4. data/Gemfile +7 -0
  5. data/Guardfile +62 -0
  6. data/README.markdown +4 -4
  7. data/Rakefile +34 -35
  8. data/lib/pry.rb +107 -54
  9. data/lib/pry/cli.rb +34 -11
  10. data/lib/pry/code.rb +165 -182
  11. data/lib/pry/code/code_range.rb +70 -0
  12. data/lib/pry/code/loc.rb +92 -0
  13. data/lib/pry/code_object.rb +153 -0
  14. data/lib/pry/command.rb +160 -22
  15. data/lib/pry/command_set.rb +37 -26
  16. data/lib/pry/commands.rb +4 -27
  17. data/lib/pry/commands/amend_line.rb +99 -0
  18. data/lib/pry/commands/bang.rb +20 -0
  19. data/lib/pry/commands/bang_pry.rb +17 -0
  20. data/lib/pry/commands/cat.rb +53 -0
  21. data/lib/pry/commands/cat/abstract_formatter.rb +27 -0
  22. data/lib/pry/commands/cat/exception_formatter.rb +78 -0
  23. data/lib/pry/commands/cat/file_formatter.rb +84 -0
  24. data/lib/pry/commands/cat/input_expression_formatter.rb +43 -0
  25. data/lib/pry/commands/cd.rb +30 -0
  26. data/lib/pry/commands/code_collector.rb +165 -0
  27. data/lib/pry/commands/deprecated_commands.rb +2 -0
  28. data/lib/pry/commands/disable_pry.rb +27 -0
  29. data/lib/pry/commands/easter_eggs.rb +112 -0
  30. data/lib/pry/commands/edit.rb +206 -0
  31. data/lib/pry/commands/edit/exception_patcher.rb +25 -0
  32. data/lib/pry/commands/edit/file_and_line_locator.rb +38 -0
  33. data/lib/pry/commands/edit/method_patcher.rb +122 -0
  34. data/lib/pry/commands/exit.rb +42 -0
  35. data/lib/pry/commands/exit_all.rb +29 -0
  36. data/lib/pry/commands/exit_program.rb +24 -0
  37. data/lib/pry/commands/find_method.rb +199 -0
  38. data/lib/pry/commands/fix_indent.rb +19 -0
  39. data/lib/pry/commands/gem_cd.rb +26 -0
  40. data/lib/pry/commands/gem_install.rb +29 -0
  41. data/lib/pry/commands/gem_list.rb +33 -0
  42. data/lib/pry/commands/gem_open.rb +29 -0
  43. data/lib/pry/commands/gist.rb +95 -0
  44. data/lib/pry/commands/help.rb +164 -0
  45. data/lib/pry/commands/hist.rb +161 -0
  46. data/lib/pry/commands/import_set.rb +22 -0
  47. data/lib/pry/commands/install_command.rb +51 -0
  48. data/lib/pry/commands/jump_to.rb +29 -0
  49. data/lib/pry/commands/ls.rb +339 -0
  50. data/lib/pry/commands/nesting.rb +25 -0
  51. data/lib/pry/commands/play.rb +69 -0
  52. data/lib/pry/commands/pry_backtrace.rb +26 -0
  53. data/lib/pry/commands/pry_version.rb +17 -0
  54. data/lib/pry/commands/raise_up.rb +32 -0
  55. data/lib/pry/commands/reload_code.rb +39 -0
  56. data/lib/pry/commands/reset.rb +18 -0
  57. data/lib/pry/commands/ri.rb +56 -0
  58. data/lib/pry/commands/save_file.rb +61 -0
  59. data/lib/pry/commands/shell_command.rb +43 -0
  60. data/lib/pry/commands/shell_mode.rb +27 -0
  61. data/lib/pry/commands/show_doc.rb +78 -0
  62. data/lib/pry/commands/show_info.rb +139 -0
  63. data/lib/pry/commands/show_input.rb +17 -0
  64. data/lib/pry/commands/show_source.rb +37 -0
  65. data/lib/pry/commands/simple_prompt.rb +22 -0
  66. data/lib/pry/commands/stat.rb +40 -0
  67. data/lib/pry/commands/switch_to.rb +23 -0
  68. data/lib/pry/commands/toggle_color.rb +20 -0
  69. data/lib/pry/commands/whereami.rb +114 -0
  70. data/lib/pry/commands/wtf.rb +57 -0
  71. data/lib/pry/completion.rb +120 -46
  72. data/lib/pry/config.rb +11 -0
  73. data/lib/pry/core_extensions.rb +30 -19
  74. data/lib/pry/editor.rb +129 -0
  75. data/lib/pry/helpers.rb +1 -0
  76. data/lib/pry/helpers/base_helpers.rb +89 -119
  77. data/lib/pry/helpers/command_helpers.rb +7 -122
  78. data/lib/pry/helpers/table.rb +100 -0
  79. data/lib/pry/helpers/text.rb +4 -4
  80. data/lib/pry/history_array.rb +5 -0
  81. data/lib/pry/hooks.rb +1 -3
  82. data/lib/pry/indent.rb +104 -30
  83. data/lib/pry/method.rb +66 -22
  84. data/lib/pry/module_candidate.rb +26 -15
  85. data/lib/pry/pager.rb +70 -0
  86. data/lib/pry/plugins.rb +1 -2
  87. data/lib/pry/pry_class.rb +63 -22
  88. data/lib/pry/pry_instance.rb +58 -37
  89. data/lib/pry/rubygem.rb +74 -0
  90. data/lib/pry/terminal_info.rb +43 -0
  91. data/lib/pry/test/helper.rb +185 -0
  92. data/lib/pry/version.rb +1 -1
  93. data/lib/pry/wrapped_module.rb +58 -24
  94. data/pry.gemspec +21 -37
  95. data/{test/test_cli.rb → spec/cli_spec.rb} +0 -0
  96. data/spec/code_object_spec.rb +277 -0
  97. data/{test/test_code.rb → spec/code_spec.rb} +19 -1
  98. data/{test/test_command_helpers.rb → spec/command_helpers_spec.rb} +0 -0
  99. data/{test/test_command_integration.rb → spec/command_integration_spec.rb} +38 -46
  100. data/{test/test_command_set.rb → spec/command_set_spec.rb} +18 -1
  101. data/{test/test_command.rb → spec/command_spec.rb} +250 -149
  102. data/spec/commands/amend_line_spec.rb +247 -0
  103. data/spec/commands/bang_spec.rb +19 -0
  104. data/spec/commands/cat_spec.rb +164 -0
  105. data/spec/commands/cd_spec.rb +250 -0
  106. data/spec/commands/disable_pry_spec.rb +25 -0
  107. data/spec/commands/edit_spec.rb +727 -0
  108. data/spec/commands/exit_all_spec.rb +34 -0
  109. data/spec/commands/exit_program_spec.rb +19 -0
  110. data/spec/commands/exit_spec.rb +34 -0
  111. data/{test/test_default_commands/test_find_method.rb → spec/commands/find_method_spec.rb} +27 -7
  112. data/spec/commands/gem_list_spec.rb +26 -0
  113. data/spec/commands/gist_spec.rb +75 -0
  114. data/{test/test_default_commands/test_help.rb → spec/commands/help_spec.rb} +8 -9
  115. data/spec/commands/hist_spec.rb +181 -0
  116. data/spec/commands/jump_to_spec.rb +15 -0
  117. data/spec/commands/ls_spec.rb +177 -0
  118. data/spec/commands/play_spec.rb +140 -0
  119. data/spec/commands/raise_up_spec.rb +56 -0
  120. data/spec/commands/save_file_spec.rb +177 -0
  121. data/spec/commands/show_doc_spec.rb +378 -0
  122. data/spec/commands/show_input_spec.rb +17 -0
  123. data/spec/commands/show_source_spec.rb +597 -0
  124. data/spec/commands/whereami_spec.rb +154 -0
  125. data/spec/completion_spec.rb +233 -0
  126. data/spec/control_d_handler_spec.rb +58 -0
  127. data/spec/editor_spec.rb +79 -0
  128. data/{test/test_exception_whitelist.rb → spec/exception_whitelist_spec.rb} +0 -0
  129. data/{test → spec/fixtures}/candidate_helper1.rb +0 -0
  130. data/{test → spec/fixtures}/candidate_helper2.rb +0 -0
  131. data/{test/test_default_commands → spec/fixtures}/example.erb +0 -0
  132. data/spec/fixtures/example_nesting.rb +33 -0
  133. data/spec/fixtures/show_source_doc_examples.rb +15 -0
  134. data/{test → spec/fixtures}/testrc +0 -0
  135. data/{test → spec/fixtures}/testrcbad +0 -0
  136. data/spec/helper.rb +34 -0
  137. data/spec/helpers/bacon.rb +86 -0
  138. data/spec/helpers/mock_pry.rb +43 -0
  139. data/spec/helpers/table_spec.rb +83 -0
  140. data/{test/test_history_array.rb → spec/history_array_spec.rb} +21 -19
  141. data/{test/test_hooks.rb → spec/hooks_spec.rb} +0 -0
  142. data/{test/test_indent.rb → spec/indent_spec.rb} +24 -0
  143. data/{test/test_input_stack.rb → spec/input_stack_spec.rb} +4 -0
  144. data/{test/test_method.rb → spec/method_spec.rb} +65 -1
  145. data/{test/test_prompt.rb → spec/prompt_spec.rb} +0 -0
  146. data/{test/test_pry_defaults.rb → spec/pry_defaults_spec.rb} +14 -14
  147. data/{test/test_pry_history.rb → spec/pry_history_spec.rb} +15 -0
  148. data/spec/pry_output_spec.rb +95 -0
  149. data/{test/test_pry.rb → spec/pry_spec.rb} +74 -32
  150. data/{test/test_sticky_locals.rb → spec/sticky_locals_spec.rb} +27 -25
  151. data/{test/test_syntax_checking.rb → spec/syntax_checking_spec.rb} +17 -1
  152. data/{test/test_wrapped_module.rb → spec/wrapped_module_spec.rb} +92 -5
  153. metadata +239 -115
  154. data/examples/example_basic.rb +0 -15
  155. data/examples/example_command_override.rb +0 -32
  156. data/examples/example_commands.rb +0 -36
  157. data/examples/example_hooks.rb +0 -9
  158. data/examples/example_image_edit.rb +0 -67
  159. data/examples/example_input.rb +0 -7
  160. data/examples/example_input2.rb +0 -29
  161. data/examples/example_output.rb +0 -11
  162. data/examples/example_print.rb +0 -6
  163. data/examples/example_prompt.rb +0 -9
  164. data/examples/helper.rb +0 -6
  165. data/lib/pry/default_commands/cd.rb +0 -81
  166. data/lib/pry/default_commands/commands.rb +0 -62
  167. data/lib/pry/default_commands/context.rb +0 -98
  168. data/lib/pry/default_commands/easter_eggs.rb +0 -95
  169. data/lib/pry/default_commands/editing.rb +0 -420
  170. data/lib/pry/default_commands/find_method.rb +0 -169
  171. data/lib/pry/default_commands/gems.rb +0 -84
  172. data/lib/pry/default_commands/gist.rb +0 -187
  173. data/lib/pry/default_commands/help.rb +0 -127
  174. data/lib/pry/default_commands/hist.rb +0 -120
  175. data/lib/pry/default_commands/input_and_output.rb +0 -306
  176. data/lib/pry/default_commands/introspection.rb +0 -410
  177. data/lib/pry/default_commands/ls.rb +0 -272
  178. data/lib/pry/default_commands/misc.rb +0 -38
  179. data/lib/pry/default_commands/navigating_pry.rb +0 -110
  180. data/lib/pry/default_commands/whereami.rb +0 -92
  181. data/lib/pry/extended_commands/experimental.rb +0 -7
  182. data/test/helper.rb +0 -223
  183. data/test/test_completion.rb +0 -62
  184. data/test/test_control_d_handler.rb +0 -45
  185. data/test/test_default_commands/test_cd.rb +0 -321
  186. data/test/test_default_commands/test_context.rb +0 -288
  187. data/test/test_default_commands/test_documentation.rb +0 -315
  188. data/test/test_default_commands/test_gems.rb +0 -18
  189. data/test/test_default_commands/test_input.rb +0 -428
  190. data/test/test_default_commands/test_introspection.rb +0 -511
  191. data/test/test_default_commands/test_ls.rb +0 -151
  192. data/test/test_default_commands/test_shell.rb +0 -343
  193. data/test/test_default_commands/test_show_source.rb +0 -432
  194. data/test/test_pry_output.rb +0 -41
@@ -1,18 +0,0 @@
1
- require 'helper'
2
-
3
- describe "Pry::DefaultCommands::Gems" do
4
- describe "gem-list" do
5
-
6
- # fixing bug for 1.8 compat
7
- it 'should not raise when invoked' do
8
- str_output = StringIO.new
9
- Pry.start self, :input => InputTester.new("gem-list", "exit-all"), :output => str_output
10
- str_output.string.should.not =~ /Error/
11
- end
12
-
13
- it 'should not raise when invoked with an argument' do
14
- mock_pry('gem-list pry').should.not =~ /Error/
15
- end
16
- end
17
- end
18
-
@@ -1,428 +0,0 @@
1
- require 'helper'
2
-
3
- describe "Pry::DefaultCommands::Input" do
4
- before do
5
- @str_output = StringIO.new
6
- end
7
-
8
- describe "amend-line" do
9
- it 'should correctly amend the last line of input when no line number specified ' do
10
- redirect_pry_io(InputTester.new("def hello", "puts :bing", "amend-line puts :blah", "show-input", "exit-all"), @str_output) do
11
- pry
12
- end
13
-
14
- @str_output.string.should =~ /\A\d+: def hello\n\d+: puts :blah/
15
- end
16
-
17
- it 'should correctly amend the specified line of input when line number given ' do
18
- redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "amend-line 1 def goodbye", "show-input", "exit-all"), @str_output) do
19
- pry
20
- end
21
-
22
- @str_output.string.should =~ /\A\d+: def goodbye\n\d+: puts :bing\n\d+: puts :bang/
23
- end
24
-
25
- it 'should correctly amend the specified line of input when line number given, 0 should behave as 1 ' do
26
- redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "amend-line 0 def goodbye", "show-input", "exit-all"), @str_output) do
27
- pry
28
- end
29
-
30
- @str_output.string.should =~ /\A\d+: def goodbye\n\d+: puts :bing\n\d+: puts :bang/
31
- end
32
-
33
- it 'should correctly amend the specified line of input when line number given (negative number)' do
34
- redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "amend-line -1 puts :bink", "show-input", "exit-all"), @str_output) do
35
- pry
36
- end
37
-
38
- @str_output.string.should =~ /\A\d+: def hello\n\d+: puts :bing\n\d+: puts :bink/
39
-
40
- @str_output = StringIO.new
41
- redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "amend-line -2 puts :bink", "show-input", "exit-all"), @str_output) do
42
- pry
43
- end
44
-
45
- @str_output.string.should =~ /\A\d+: def hello\n\d+: puts :bink\n\d+: puts :bang/
46
- end
47
-
48
- it 'should correctly amend the specified range of lines of input when range of negative numbers given (negative number)' do
49
- redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "puts :boat", "amend-line -3..-2 puts :bink", "show-input", "exit-all"), @str_output) do
50
- pry
51
- end
52
-
53
- @str_output.string.should =~ /\A\d+: def hello\n\d+: puts :bink\n\d+: puts :boat/
54
- end
55
-
56
- it 'should correctly amend the specified line with string interpolated text' do
57
- redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", 'amend-line puts "#{goodbye}"', "show-input", "exit-all"), @str_output) do
58
- pry
59
- end
60
-
61
- @str_output.string.should =~ /\A\d+: def hello\n\d+: puts :bing\n\d+: puts \"\#\{goodbye\}\"/
62
- end
63
-
64
- it 'should display error if nothing to amend' do
65
- redirect_pry_io(InputTester.new("amend-line", "exit-all"), @str_output) do
66
- pry
67
- end
68
-
69
- @str_output.string.should =~ /No input to amend/
70
- end
71
-
72
-
73
- it 'should correctly amend the specified range of lines' do
74
- redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "puts :heart", "amend-line 2..3 puts :bong", "show-input", "exit-all"), @str_output) do
75
- pry
76
- end
77
-
78
- @str_output.string.should =~ /\A\d+: def hello\n\d+: puts :bong\n\d+: puts :heart/
79
- end
80
-
81
- it 'should correctly delete a specific line using the ! for content' do
82
- redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "puts :boast", "puts :heart", "amend-line 3 !", "show-input", "exit-all"), @str_output) do
83
- pry
84
- end
85
-
86
- @str_output.string.should =~ /\d+: def hello\n\d+: puts :bing\n\d+: puts :boast\n\d+: puts :heart/
87
- end
88
-
89
- it 'should correctly delete a range of lines using the ! for content' do
90
- redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "puts :boast", "puts :heart", "amend-line 2..4 !", "show-input", "exit-all"), @str_output) do
91
- pry
92
- end
93
-
94
- @str_output.string.should =~ /\d+: def hello\n\d+: puts :heart\n\Z/
95
- end
96
-
97
- it 'should correctly delete the previous line using the ! for content' do
98
- redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "puts :boast", "puts :heart", "amend-line !", "show-input", "exit-all"), @str_output) do
99
- pry
100
- end
101
-
102
- @str_output.string.should =~ /\d+: def hello\n\d+: puts :bing\n\d+: puts :bang\n\d+: puts :boast\n\Z/
103
- end
104
-
105
- it 'should correctly amend the specified range of lines, using negative numbers in range' do
106
- redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "puts :boast", "puts :heart", "amend-line 2..-2 puts :bong", "show-input", "exit-all"), @str_output) do
107
- pry
108
- end
109
- @str_output.string.should =~ /\d+: def hello\n\d+: puts :bong\n\d+: puts :heart/
110
- end
111
-
112
- it 'should correctly insert a new line of input before a specified line using the > syntax' do
113
- redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "amend-line 2 >puts :inserted", "show-input", "exit-all"), @str_output) do
114
- pry
115
- end
116
-
117
- @str_output.string.should =~ /\d+: def hello\n\d+: puts :inserted\n\d+: puts :bing\n\d+: puts :bang/
118
- end
119
-
120
- it 'should correctly insert a new line of input before a specified line using the > syntax (should ignore second value of range)' do
121
- redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "amend-line 2..21 >puts :inserted", "show-input", "exit-all"), @str_output) do
122
- pry
123
- end
124
-
125
- @str_output.string.should =~ /\d+: def hello\n\d+: puts :inserted\n\d+: puts :bing\n\d+: puts :bang/
126
- end
127
- end
128
-
129
- describe "show-input" do
130
- it 'should correctly show the current lines in the input buffer' do
131
- redirect_pry_io(InputTester.new("def hello", "puts :bing", "show-input", "exit-all"), @str_output) do
132
- pry
133
- end
134
-
135
- @str_output.string.should =~ /\A\d+: def hello\n\d+: puts :bing/
136
- end
137
- end
138
-
139
- describe "!" do
140
- it 'should correctly clear the input buffer ' do
141
- redirect_pry_io(InputTester.new("def hello", "puts :bing", "!", "show-input", "exit-all"), @str_output) do
142
- pry
143
- end
144
-
145
- stripped_output = @str_output.string.strip!
146
- stripped_output.each_line.count.should == 1
147
- stripped_output.should =~ /Input buffer cleared!/
148
- end
149
- end
150
-
151
- describe "play" do
152
- it 'should play a string variable (with no args)' do
153
- b = binding
154
- b.eval('x = "\"hello\""')
155
- redirect_pry_io(InputTester.new("play x", "exit-all"), @str_output) do
156
- Pry.start b, :hooks => Pry::Hooks.new
157
- end
158
-
159
- @str_output.string.should =~ /hello/
160
- end
161
-
162
- it 'should play a string variable (with no args) using --lines to select what to play' do
163
- b = binding
164
- b.eval('x = "\"hello\"\n\"goodbye\"\n\"love\""')
165
- redirect_pry_io(InputTester.new("play x --lines 1", "exit-all"), @str_output) do
166
- Pry.start b, :hooks => Pry::Hooks.new
167
- end
168
-
169
- @str_output.string.should =~ /hello/
170
- @str_output.string.should.not =~ /love/
171
- @str_output.string.should.not =~ /goodbye/
172
- end
173
-
174
- it 'should play documentation with the -d switch' do
175
- o = Object.new
176
-
177
- # @v = 10
178
- # @y = 20
179
- def o.test_method
180
- :test_method_content
181
- end
182
-
183
- redirect_pry_io(InputTester.new('play -d test_method', "exit-all")) do
184
- o.pry
185
- end
186
-
187
- o.instance_variable_get(:@v).should == 10
188
- o.instance_variable_get(:@y).should == 20
189
- end
190
-
191
- it 'should play documentation with the -d switch (restricted by --lines)' do
192
- o = Object.new
193
-
194
- # @x = 0
195
- # @v = 10
196
- # @y = 20
197
- # @z = 30
198
- def o.test_method
199
- :test_method_content
200
- end
201
-
202
- redirect_pry_io(InputTester.new('play -d test_method --lines 2..3', "exit-all")) do
203
- o.pry
204
- end
205
-
206
- o.instance_variable_get(:@x).should == nil
207
- o.instance_variable_get(:@z).should == nil
208
- o.instance_variable_get(:@v).should == 10
209
- o.instance_variable_get(:@y).should == 20
210
- end
211
-
212
-
213
- it 'should play a method with the -m switch (a single line)' do
214
- o = Object.new
215
- def o.test_method
216
- :test_method_content
217
- end
218
-
219
- redirect_pry_io(InputTester.new('play -m test_method --lines 2', "exit-all"), @str_output) do
220
- o.pry
221
- end
222
-
223
- @str_output.string.should =~ /:test_method_content/
224
- end
225
-
226
- it 'should APPEND to the input buffer when playing a line with play -m, not replace it' do
227
- o = Object.new
228
- def o.test_method
229
- :test_method_content
230
- end
231
-
232
- redirect_pry_io(InputTester.new('def another_test_method', 'play -m test_method --lines 2', 'show-input', 'exit-all'), @str_output) do
233
- o.pry
234
- end
235
-
236
- @str_output.string.should =~ /def another_test_method/
237
- @str_output.string.should =~ /:test_method_content/
238
- end
239
-
240
-
241
- it 'should play a method with the -m switch (multiple line)' do
242
- o = Object.new
243
-
244
- def o.test_method
245
- @var0 = 10
246
- @var1 = 20
247
- @var2 = 30
248
- @var3 = 40
249
- end
250
-
251
- redirect_pry_io(InputTester.new('play -m test_method --lines 3..4', "exit-all"), @str_output) do
252
- o.pry
253
- end
254
-
255
- o.instance_variable_get(:@var0).should == nil
256
- o.instance_variable_get(:@var1).should == 20
257
- o.instance_variable_get(:@var2).should == 30
258
- o.instance_variable_get(:@var3).should == nil
259
- @str_output.string.should =~ /30/
260
- @str_output.string.should.not =~ /20/
261
- end
262
- end
263
-
264
- describe "hist" do
265
- before do
266
- Pry.history.clear
267
- @hist = Pry.history
268
- end
269
-
270
- it 'should display the correct history' do
271
- @hist.push "hello"
272
- @hist.push "world"
273
- redirect_pry_io(InputTester.new("hist", "exit-all"), @str_output) do
274
- pry
275
- end
276
-
277
- @str_output.string.should =~ /hello\n.*world/
278
- end
279
-
280
- it 'should replay history correctly (single item)' do
281
- o = Object.new
282
- @hist.push "@x = 10"
283
- @hist.push "@y = 20"
284
- @hist.push "@z = 30"
285
- redirect_pry_io(InputTester.new("hist --replay -1", "exit-all")) do
286
- o.pry
287
- end
288
- o.instance_variable_get(:@x).should == nil
289
- o.instance_variable_get(:@y).should == nil
290
- o.instance_variable_get(:@z).should == 30
291
- end
292
-
293
- it 'should replay a range of history correctly (range of items)' do
294
- o = Object.new
295
- @hist.push "@x = 10"
296
- @hist.push "@y = 20"
297
- redirect_pry_io(InputTester.new("hist --replay 0..2", "exit-all")) do
298
- o.pry
299
- end
300
- o.instance_variable_get(:@x).should == 10
301
- o.instance_variable_get(:@y).should == 20
302
- end
303
-
304
- it 'should grep for correct lines in history' do
305
- @hist.push "abby"
306
- @hist.push "box"
307
- @hist.push "button"
308
- @hist.push "pepper"
309
- @hist.push "orange"
310
- @hist.push "grape"
311
- @hist.push "def blah 1"
312
- @hist.push "def boink 2"
313
- @hist.push "place holder"
314
-
315
- redirect_pry_io(InputTester.new("hist --grep o", "exit-all"), @str_output) do
316
- pry
317
- end
318
- @str_output.string.should =~ /\d:.*?box\n\d:.*?button\n\d:.*?orange/
319
-
320
- # test more than one word in a regex match (def blah)
321
- @str_output = StringIO.new
322
- redirect_pry_io(InputTester.new("hist --grep def blah", "exit-all"), @str_output) do
323
- pry
324
- end
325
- @str_output.string.should =~ /def blah 1/
326
-
327
- @str_output = StringIO.new
328
- # test more than one word with leading white space in a regex match (def boink)
329
- redirect_pry_io(InputTester.new("hist --grep def boink", "exit-all"), @str_output) do
330
- pry
331
- end
332
- @str_output.string.should =~ /def boink 2/
333
- end
334
-
335
- it 'should return last N lines in history with --tail switch' do
336
- ("a".."z").each do |v|
337
- @hist.push v
338
- end
339
-
340
- redirect_pry_io(InputTester.new("hist --tail 3", "exit-all"), @str_output) do
341
- pry
342
- end
343
-
344
- @str_output.string.each_line.count.should == 3
345
- @str_output.string.should =~ /x\n\d+:.*y\n\d+:.*z/
346
- end
347
-
348
- it 'should apply --tail after --grep' do
349
- @hist.push "print 1"
350
- @hist.push "print 2"
351
- @hist.push "puts 3"
352
- @hist.push "print 4"
353
- @hist.push "puts 5"
354
-
355
- str_output = StringIO.new
356
- redirect_pry_io(InputTester.new("hist --tail 2 --grep print", "exit-all"), @str_output) do
357
- pry
358
- end
359
-
360
- @str_output.string.each_line.count.should == 2
361
- @str_output.string.should =~ /\d:.*?print 2\n\d:.*?print 4/
362
- end
363
-
364
- it 'should apply --head after --grep' do
365
- @hist.push "puts 1"
366
- @hist.push "print 2"
367
- @hist.push "puts 3"
368
- @hist.push "print 4"
369
- @hist.push "print 5"
370
-
371
- redirect_pry_io(InputTester.new("hist --head 2 --grep print", "exit-all"), @str_output) do
372
- pry
373
- end
374
-
375
- @str_output.string.each_line.count.should == 2
376
- @str_output.string.should =~ /\d:.*?print 2\n\d:.*?print 4/
377
- end
378
-
379
- # strangeness in this test is due to bug in Readline::HISTORY not
380
- # always registering first line of input
381
- it 'should return first N lines in history with --head switch' do
382
- ("a".."z").each do |v|
383
- @hist.push v
384
- end
385
-
386
- redirect_pry_io(InputTester.new("hist --head 4", "exit-all"), @str_output) do
387
- pry
388
- end
389
-
390
- @str_output.string.each_line.count.should == 4
391
- @str_output.string.should =~ /a\n\d+:.*b\n\d+:.*c/
392
- end
393
-
394
- # strangeness in this test is due to bug in Readline::HISTORY not
395
- # always registering first line of input
396
- it 'should show lines between lines A and B with the --show switch' do
397
- ("a".."z").each do |v|
398
- @hist.push v
399
- end
400
-
401
- redirect_pry_io(InputTester.new("hist --show 1..4", "exit-all"), @str_output) do
402
- pry
403
- end
404
-
405
- @str_output.string.each_line.count.should == 4
406
- @str_output.string.should =~ /b\n\d+:.*c\n\d+:.*d/
407
- end
408
-
409
- it "should not contain duplicated lines" do
410
- redirect_pry_io(InputTester.new("3", "_ += 1", "_ += 1", "hist", "exit-all"), @str_output) do
411
- pry
412
- end
413
-
414
- @str_output.string.each_line.grep(/_ \+= 1/).count.should == 1
415
- end
416
-
417
- it "should not contain duplicated lines" do
418
- redirect_pry_io(InputTester.new(":place_holder", "2 + 2", "", "", "3 + 3", "hist", "exit-all"), @str_output) do
419
- pry
420
- end
421
-
422
- a = @str_output.string.each_line.to_a.index{|line| line.include?("2 + 2") }
423
- b = @str_output.string.each_line.to_a.index{|line| line.include?("3 + 3") }
424
-
425
- (a + 1).should == b
426
- end
427
- end
428
- end
@@ -1,511 +0,0 @@
1
- require 'helper'
2
-
3
- describe "Pry::DefaultCommands::Introspection" do
4
- describe "edit" do
5
- before do
6
- @old_editor = Pry.config.editor
7
- @file = nil; @line = nil; @contents = nil
8
- Pry.config.editor = lambda do |file, line|
9
- @file = file; @line = line; @contents = File.read(@file)
10
- nil
11
- end
12
- end
13
-
14
- after do
15
- Pry.config.editor = @old_editor
16
- end
17
-
18
- describe "with FILE" do
19
- it "should invoke Pry.config.editor with absolutified filenames" do
20
- mock_pry("edit foo.rb")
21
- @file.should == File.expand_path("foo.rb")
22
- mock_pry("edit /tmp/bar.rb")
23
- @file.should == "/tmp/bar.rb"
24
- end
25
-
26
- it "should guess the line number from a colon" do
27
- mock_pry("edit /tmp/foo.rb:10")
28
- @line.should == 10
29
- end
30
-
31
- it "should use the line number from -l" do
32
- mock_pry("edit -l 10 /tmp/foo.rb")
33
- @line.should == 10
34
- end
35
-
36
- it "should not delete the file!" do
37
- mock_pry("edit Rakefile")
38
- File.exist?(@file).should == true
39
- end
40
-
41
- describe do
42
- before do
43
- @rand = rand
44
- Pry.config.editor = lambda { |file, line|
45
- File.open(file, 'w') { |f| f << "$rand = #{@rand.inspect}" }
46
- nil
47
- }
48
- end
49
-
50
- it "should reload the file if it is a ruby file" do
51
- tf = Tempfile.new(["pry", ".rb"])
52
- path = tf.path
53
-
54
- mock_pry("edit #{path}", "$rand").should =~ /#{@rand}/
55
-
56
- tf.close(true)
57
- end
58
-
59
- it "should not reload the file if it is not a ruby file" do
60
- tf = Tempfile.new(["pry", ".py"])
61
- path = tf.path
62
-
63
- mock_pry("edit #{path}", "$rand").should.not =~ /#{@rand}/
64
-
65
- tf.close(true)
66
- end
67
-
68
- it "should not reload a ruby file if -n is given" do
69
- tf = Tempfile.new(["pry", ".rb"])
70
- path = tf.path
71
-
72
- mock_pry("edit -n #{path}", "$rand").should.not =~ /#{@rand}/
73
-
74
- tf.close(true)
75
- end
76
-
77
- it "should reload a non-ruby file if -r is given" do
78
- tf = Tempfile.new(["pry", ".pryrc"])
79
- path = tf.path
80
-
81
- mock_pry("edit -r #{path}", "$rand").should =~ /#{@rand}/
82
-
83
- tf.close(true)
84
- end
85
- end
86
-
87
- describe do
88
- before do
89
- @reloading = nil
90
- Pry.config.editor = lambda do |file, line, reloading|
91
- @file = file; @line = line; @reloading = reloading
92
- nil
93
- end
94
- end
95
-
96
- it "should pass the editor a reloading arg" do
97
- mock_pry("edit foo.rb")
98
- @reloading.should == true
99
- mock_pry("edit -n foo.rb")
100
- @reloading.should == false
101
- end
102
- end
103
- end
104
-
105
- describe "with --ex" do
106
- before do
107
- @tf = Tempfile.new(["pry", ".rb"])
108
- @path = @tf.path
109
- @tf << "1\n2\nraise RuntimeError"
110
- @tf.flush
111
- end
112
- after do
113
- @tf.close(true)
114
- File.unlink("#{@path}c") if File.exists?("#{@path}c") #rbx
115
- end
116
- it "should open the correct file" do
117
- mock_pry("require #{@path.inspect}", "edit --ex")
118
-
119
- @file.should == @path
120
- @line.should == 3
121
- end
122
-
123
- it "should reload the file" do
124
- Pry.config.editor = lambda {|file, line|
125
- File.open(file, 'w'){|f| f << "FOO = 'BAR'" }
126
- nil
127
- }
128
-
129
- mock_pry("require #{@path.inspect}", "edit --ex", "FOO").should =~ /BAR/
130
- end
131
-
132
- it "should not reload the file if -n is passed" do
133
- Pry.config.editor = lambda {|file, line|
134
- File.open(file, 'w'){|f| f << "FOO2 = 'BAZ'" }
135
- nil
136
- }
137
-
138
- mock_pry("require #{@path.inspect}", "edit -n --ex", "FOO2").should.not =~ /BAZ/
139
- end
140
- end
141
-
142
- describe "with --ex NUM" do
143
- before do
144
- Pry.config.editor = proc do |file, line|
145
- @__ex_file__ = file
146
- @__ex_line__ = line
147
- nil
148
- end
149
- end
150
-
151
- it 'should start editor on first level of backtrace when --ex used with no argument ' do
152
- pry_instance = Pry.new(:input => StringIO.new("edit -n --ex"), :output => StringIO.new)
153
- pry_instance.last_exception = mock_exception("a:1", "b:2", "c:3")
154
- pry_instance.rep(self)
155
- @__ex_file__.should == "a"
156
- @__ex_line__.should == 1
157
- end
158
-
159
- it 'should start editor on first level of backtrace when --ex 0 used ' do
160
- pry_instance = Pry.new(:input => StringIO.new("edit -n --ex 0"), :output => StringIO.new)
161
- pry_instance.last_exception = mock_exception("a:1", "b:2", "c:3")
162
- pry_instance.rep(self)
163
- @__ex_file__.should == "a"
164
- @__ex_line__.should == 1
165
- end
166
-
167
- it 'should start editor on second level of backtrace when --ex 1 used' do
168
- pry_instance = Pry.new(:input => StringIO.new("edit -n --ex 1"), :output => StringIO.new)
169
- pry_instance.last_exception = mock_exception("a:1", "b:2", "c:3")
170
- pry_instance.rep(self)
171
- @__ex_file__.should == "b"
172
- @__ex_line__.should == 2
173
- end
174
-
175
- it 'should start editor on third level of backtrace when --ex 2 used' do
176
- pry_instance = Pry.new(:input => StringIO.new("edit -n --ex 2"), :output => StringIO.new)
177
- pry_instance.last_exception = mock_exception("a:1", "b:2", "c:3")
178
- pry_instance.rep(self)
179
- @__ex_file__.should == "c"
180
- @__ex_line__.should == 3
181
- end
182
-
183
- it 'should display error message when backtrace level is out of bounds (using --ex 4)' do
184
- pry_instance = Pry.new(:input => StringIO.new("edit -n --ex 4"), :output => str_output = StringIO.new)
185
- pry_instance.last_exception = mock_exception("a:1", "b:2", "c:3")
186
- pry_instance.rep(self)
187
- str_output.string.should =~ /Exception has no associated file/
188
- end
189
- end
190
-
191
- describe "without FILE" do
192
- it "should edit the current expression if it's incomplete" do
193
- mock_pry("def a", "edit")
194
- @contents.should == "def a\n"
195
- end
196
-
197
- it "should edit the previous expression if the current is empty" do
198
- mock_pry("def a; 2; end", "edit")
199
- @contents.should == "def a; 2; end\n"
200
- end
201
-
202
- it "should use a blank file if -t is specified" do
203
- mock_pry("def a; 5; end", "edit -t")
204
- @contents.should == "\n"
205
- end
206
-
207
- it "should use a blank file if -t is specified even half-way through an expression" do
208
- mock_pry("def a;", "edit -t")
209
- @contents.should == "\n"
210
- end
211
-
212
- it "should position the cursor at the end of the expression" do
213
- mock_pry("def a; 2;"," end", "edit")
214
- @line.should == 2
215
- end
216
-
217
- it "should evaluate the expression" do
218
- Pry.config.editor = lambda {|file, line|
219
- File.open(file, 'w'){|f| f << "'FOO'\n" }
220
- nil
221
- }
222
- mock_pry("edit").should =~ /FOO/
223
- end
224
- it "should not evaluate the expression with -n" do
225
- Pry.config.editor = lambda {|file, line|
226
- File.open(file, 'w'){|f| f << "'FOO'\n" }
227
- nil
228
- }
229
- mock_pry("edit -n").should.not =~ /FOO/
230
- end
231
- end
232
-
233
- describe "with --in" do
234
- it "should edit the nth line of _in_" do
235
- mock_pry("10", "11", "edit --in -2")
236
- @contents.should == "10\n"
237
- end
238
-
239
- it "should edit the last line if no argument is given" do
240
- mock_pry("10", "11", "edit --in")
241
- @contents.should == "11\n"
242
- end
243
-
244
- it "should edit a range of lines if a range is given" do
245
- mock_pry("10", "11", "edit -i 1,2")
246
- @contents.should == "10\n11\n"
247
- end
248
-
249
- it "should edit a multi-line expression as it occupies one line of _in_" do
250
- mock_pry("class Fixnum", " def invert; -self; end", "end", "edit -i 1")
251
- @contents.should == "class Fixnum\n def invert; -self; end\nend\n"
252
- end
253
-
254
- it "should not work with a filename" do
255
- mock_pry("edit ruby.rb -i").should =~ /Only one of --ex, --temp, --in and FILE may be specified/
256
- end
257
-
258
- it "should not work with nonsense" do
259
- mock_pry("edit --in three").should =~ /Not a valid range: three/
260
- end
261
- end
262
- end
263
-
264
- describe "edit-method" do
265
- describe "on a method defined in a file" do
266
- before do
267
- @tempfile = Tempfile.new(['pry', '*.rb'])
268
- @tempfile.puts <<-EOS
269
- module A
270
- def a
271
- :yup
272
- end
273
-
274
- def b
275
- :kinda
276
- end
277
- end
278
-
279
- class X
280
- include A
281
-
282
- def self.x
283
- :double_yup
284
- end
285
-
286
- def x
287
- :nope
288
- end
289
-
290
- def b
291
- super
292
- end
293
- alias c b
294
-
295
- def y?
296
- :because
297
- end
298
- end
299
- EOS
300
- @tempfile.flush
301
- load @tempfile.path
302
- end
303
-
304
- after do
305
- @tempfile.close(true)
306
- end
307
-
308
- describe 'without -p' do
309
- before do
310
- @old_editor = Pry.config.editor
311
- @file, @line, @contents = nil, nil, nil
312
- Pry.config.editor = lambda do |file, line|
313
- @file = file; @line = line
314
- nil
315
- end
316
- end
317
- after do
318
- Pry.config.editor = @old_editor
319
- end
320
-
321
- it "should correctly find a class method" do
322
- mock_pry("edit-method X.x")
323
- @file.should == @tempfile.path
324
- @line.should == 14
325
- end
326
-
327
- it "should correctly find an instance method" do
328
- mock_pry("edit-method X#x")
329
- @file.should == @tempfile.path
330
- @line.should == 18
331
- end
332
-
333
- it "should correctly find a method on an instance" do
334
- mock_pry("x = X.new", "edit-method x.x")
335
- @file.should == @tempfile.path
336
- @line.should == 18
337
- end
338
-
339
- it "should correctly find a method from a module" do
340
- mock_pry("edit-method X#a")
341
- @file.should == @tempfile.path
342
- @line.should == 2
343
- end
344
-
345
- it "should correctly find an aliased method" do
346
- mock_pry("edit-method X#c")
347
- @file.should == @tempfile.path
348
- @line.should == 22
349
- end
350
- end
351
-
352
- describe 'with -p' do
353
- before do
354
- @old_editor = Pry.config.editor
355
- Pry.config.editor = lambda do |file, line|
356
- lines = File.read(file).lines.to_a
357
- lines[1] = ":maybe\n"
358
- File.open(file, 'w') do |f|
359
- f.write(lines.join)
360
- end
361
- nil
362
- end
363
- end
364
- after do
365
- Pry.config.editor = @old_editor
366
- end
367
-
368
- it "should successfully replace a class method" do
369
- mock_pry("edit-method -p X.x")
370
-
371
- class << X
372
- X.method(:x).owner.should == self
373
- end
374
- X.method(:x).receiver.should == X
375
- X.x.should == :maybe
376
- end
377
-
378
- it "should successfully replace an instance method" do
379
- mock_pry("edit-method -p X#x")
380
-
381
- X.instance_method(:x).owner.should == X
382
- X.new.x.should == :maybe
383
- end
384
-
385
- it "should successfully replace a method on an instance" do
386
- mock_pry("instance = X.new", "edit-method -p instance.x")
387
-
388
- instance = X.new
389
- instance.method(:x).owner.should == X
390
- instance.x.should == :maybe
391
- end
392
-
393
- it "should successfully replace a method from a module" do
394
- mock_pry("edit-method -p X#a")
395
-
396
- X.instance_method(:a).owner.should == A
397
- X.new.a.should == :maybe
398
- end
399
-
400
- it "should successfully replace a method with a question mark" do
401
- mock_pry("edit-method -p X#y?")
402
-
403
- X.instance_method(:y?).owner.should == X
404
- X.new.y?.should == :maybe
405
- end
406
- end
407
-
408
- describe 'on an aliased method' do
409
- before do
410
- @old_editor = Pry.config.editor
411
- Pry.config.editor = lambda do |file, line|
412
- lines = File.read(file).lines.to_a
413
- lines[1] = '"#{super}aa".to_sym' + "\n"
414
- File.open(file, 'w') do |f|
415
- f.write(lines.join)
416
- end
417
- nil
418
- end
419
- end
420
- after do
421
- Pry.config.editor = @old_editor
422
- end
423
-
424
- it "should change the alias, but not the original, without breaking super" do
425
- mock_pry("edit-method -p X#c")
426
-
427
- Pry::Method.from_str("X#c").alias?.should == true
428
-
429
- X.new.b.should == :kinda
430
- X.new.c.should == :kindaaa
431
- end
432
- end
433
-
434
- describe 'with three-arg editor' do
435
- before do
436
- @old_editor = Pry.config.editor
437
- @file, @line, @reloading = nil, nil, nil
438
- Pry.config.editor = lambda do |file, line, reloading|
439
- @file = file; @line = line; @reloading = reloading
440
- nil
441
- end
442
- end
443
- after do
444
- Pry.config.editor = @old_editor
445
- end
446
-
447
- it "should pass the editor a reloading arg" do
448
- mock_pry('edit-method X.x')
449
- @reloading.should == true
450
- mock_pry('edit-method -n X.x')
451
- @reloading.should == false
452
- end
453
- end
454
-
455
- end
456
- end
457
-
458
- # show-command only works in implementations that support Proc#source_location
459
- if Proc.method_defined?(:source_location)
460
- describe "show-command" do
461
- before do
462
- @str_output = StringIO.new
463
- end
464
-
465
- it 'should show source for an ordinary command' do
466
- set = Pry::CommandSet.new do
467
- import_from Pry::Commands, "show-command"
468
- command "foo" do
469
- :body_of_foo
470
- end
471
- end
472
-
473
- redirect_pry_io(InputTester.new("show-command foo"), @str_output) do
474
- Pry.new(:commands => set).rep
475
- end
476
-
477
- @str_output.string.should =~ /:body_of_foo/
478
- end
479
-
480
- it 'should show source for a command with spaces in its name' do
481
- set = Pry::CommandSet.new do
482
- import_from Pry::Commands, "show-command"
483
- command "foo bar" do
484
- :body_of_foo_bar
485
- end
486
- end
487
-
488
- redirect_pry_io(InputTester.new("show-command \"foo bar\""), @str_output) do
489
- Pry.new(:commands => set).rep
490
- end
491
-
492
- @str_output.string.should =~ /:body_of_foo_bar/
493
- end
494
-
495
- it 'should show source for a command by listing name' do
496
- set = Pry::CommandSet.new do
497
- import_from Pry::Commands, "show-command"
498
- command /foo(.*)/, "", :listing => "bar" do
499
- :body_of_foo_regex
500
- end
501
- end
502
-
503
- redirect_pry_io(InputTester.new("show-command bar"), @str_output) do
504
- Pry.new(:commands => set).rep
505
- end
506
-
507
- @str_output.string.should =~ /:body_of_foo_regex/
508
- end
509
- end
510
- end
511
- end