pry 0.9.10pre1-i386-mswin32 → 0.9.11-i386-mswin32

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
@@ -0,0 +1,154 @@
1
+ require 'helper'
2
+
3
+ describe "whereami" do
4
+ it 'should work with methods that have been undefined' do
5
+ class Cor
6
+ def blimey!
7
+ Cor.send :undef_method, :blimey!
8
+ Pad.binding = binding
9
+ end
10
+ end
11
+
12
+ Cor.new.blimey!
13
+
14
+ # using [.] so the regex doesn't match itself
15
+ pry_eval(Pad.binding, 'whereami').should =~ /self[.]blimey!/
16
+
17
+ Object.remove_const(:Cor)
18
+ end
19
+
20
+ it 'should work in objects with no method methods' do
21
+ class Cor
22
+ def blimey!
23
+ pry_eval(binding, 'whereami').should =~ /Cor[#]blimey!/
24
+ end
25
+
26
+ def method; "moo"; end
27
+ end
28
+ Cor.new.blimey!
29
+ Object.remove_const(:Cor)
30
+ end
31
+
32
+ it 'should properly set _file_, _line_ and _dir_' do
33
+ class Cor
34
+ def blimey!
35
+ pry_eval(binding, 'whereami', '_file_').
36
+ should == File.expand_path(__FILE__)
37
+ end
38
+ end
39
+
40
+ Cor.new.blimey!
41
+ Object.remove_const(:Cor)
42
+ end
43
+
44
+ if defined?(BasicObject)
45
+ it 'should work in BasicObjects' do
46
+ cor = Class.new(BasicObject) do
47
+ def blimey!
48
+ ::Kernel.binding # omnom
49
+ end
50
+ end.new.blimey!
51
+
52
+ pry_eval(cor, 'whereami').should =~ /::Kernel.binding [#] omnom/
53
+ end
54
+ end
55
+
56
+ it 'should show description and correct code when __LINE__ and __FILE__ are outside @method.source_location' do
57
+ class Cor
58
+ def blimey!
59
+ eval <<-END, binding, "spec/fixtures/example.erb", 1
60
+ pry_eval(binding, 'whereami')
61
+ END
62
+ end
63
+ end
64
+
65
+ Cor.instance_method(:blimey!).source.should =~ /pry_eval/
66
+
67
+ Cor.new.blimey!.should =~ /Cor#blimey!.*Look at me/m
68
+ Object.remove_const(:Cor)
69
+ end
70
+
71
+ it 'should show description and correct code when @method.source_location would raise an error' do
72
+ class Cor
73
+ eval <<-END, binding, "spec/fixtures/example.erb", 1
74
+ def blimey!
75
+ pry_eval(binding, 'whereami')
76
+ end
77
+ END
78
+ end
79
+
80
+ lambda{
81
+ Cor.instance_method(:blimey!).source
82
+ }.should.raise(MethodSource::SourceNotFoundError)
83
+
84
+ Cor.new.blimey!.should =~ /Cor#blimey!.*Look at me/m
85
+ Object.remove_const(:Cor)
86
+ end
87
+
88
+ it 'should display a description and and error if reading the file goes wrong' do
89
+ class Cor
90
+ def blimey!
91
+ eval <<-END, binding, "not.found.file.erb", 7
92
+ Pad.tester = pry_tester(binding)
93
+ Pad.tester.eval('whereami')
94
+ END
95
+ end
96
+ end
97
+
98
+ proc { Cor.new.blimey! }.should.raise(MethodSource::SourceNotFoundError)
99
+ Pad.tester.last_output.should =~
100
+ /From: not.found.file.erb @ line 7 Cor#blimey!:/
101
+ Object.remove_const(:Cor)
102
+ end
103
+
104
+ it 'should show code window (not just method source) if parameter passed to whereami' do
105
+ class Cor
106
+ def blimey!
107
+ pry_eval(binding, 'whereami 3').should =~ /class Cor/
108
+ end
109
+ end
110
+ Cor.new.blimey!
111
+ Object.remove_const(:Cor)
112
+ end
113
+
114
+ it 'should not show line numbers or marker when -n switch is used' do
115
+ class Cor
116
+ def blimey!
117
+ out = pry_eval(binding, 'whereami -n')
118
+ out.should =~ /^\s*def/
119
+ out.should.not =~ /\=\>/
120
+ end
121
+ end
122
+ Cor.new.blimey!
123
+ Object.remove_const(:Cor)
124
+ end
125
+
126
+ it 'should use Pry.config.default_window_size for window size when outside a method context' do
127
+ old_size, Pry.config.default_window_size = Pry.config.default_window_size, 1
128
+ :litella
129
+ :pig
130
+ out = pry_eval(binding, 'whereami')
131
+ :punk
132
+ :sanders
133
+
134
+ out.should.not =~ /:litella/
135
+ out.should =~ /:pig/
136
+ out.should =~ /:punk/
137
+ out.should.not =~ /:sanders/
138
+
139
+ Pry.config.default_window_size = old_size
140
+ end
141
+
142
+ it "should work at the top level" do
143
+ pry_eval(Pry.toplevel_binding, 'whereami').should =~
144
+ /At the top level/
145
+ end
146
+
147
+ it "should work inside a class" do
148
+ pry_eval(Pry, 'whereami').should =~ /Inside Pry/
149
+ end
150
+
151
+ it "should work inside an object" do
152
+ pry_eval(Object.new, 'whereami').should =~ /Inside #<Object/
153
+ end
154
+ end
@@ -0,0 +1,233 @@
1
+ require 'helper'
2
+
3
+ def new_completer(bind, pry=nil)
4
+ Pry::InputCompleter.build_completion_proc(Pry.binding_for(bind), pry)
5
+ end
6
+
7
+ def completer_test(bind, pry=nil, assert_flag=true)
8
+ completer = new_completer(bind, pry)
9
+ test = proc {|symbol| completer.call(symbol[0..-2]).include?(symbol).should == assert_flag}
10
+ return proc {|*symbols| symbols.each(&test) }
11
+ end
12
+
13
+ if defined?(Bond) && Readline::VERSION !~ /editline/i
14
+ describe 'bond-based completion' do
15
+ it 'should pull in Bond by default' do
16
+ Pry.config.completer.should == Pry::BondCompleter
17
+ end
18
+ end
19
+ end
20
+
21
+ describe Pry::InputCompleter do
22
+
23
+ before do
24
+ # The AMQP gem has some classes like this:
25
+ # pry(main)> AMQP::Protocol::Test::ContentOk.name
26
+ # => :content_ok
27
+ module SymbolyName
28
+ def self.name; :symboly_name; end
29
+ end
30
+
31
+ $default_completer = Pry.config.completer
32
+ Pry.config.completer = Pry::InputCompleter
33
+ end
34
+
35
+ after do
36
+ Pry.config.completer = $default_completer
37
+ Object.remove_const :SymbolyName
38
+ end
39
+
40
+ # another jruby hack :((
41
+ if !Pry::Helpers::BaseHelpers.jruby?
42
+ it "should not crash if there's a Module that has a symbolic name." do
43
+ completer = Pry::InputCompleter.build_completion_proc(Pry.binding_for(Object.new))
44
+ lambda{ completer.call "a.to_s." }.should.not.raise Exception
45
+ end
46
+ end
47
+
48
+ it 'should take parenthesis and other characters into account for symbols' do
49
+ b = Pry.binding_for(Object.new)
50
+ completer = Pry::InputCompleter.build_completion_proc(b)
51
+
52
+ lambda { completer.call(":class)") }.should.not.raise(RegexpError)
53
+ end
54
+
55
+ it 'should complete instance variables' do
56
+ object = Class.new.new
57
+
58
+ # set variables in appropriate scope
59
+ object.instance_variable_set(:'@name', 'Pry')
60
+ object.class.send(:class_variable_set, :'@@number', 10)
61
+
62
+ # check to see if variables are in scope
63
+ object.instance_variables.
64
+ map { |v| v.to_sym }.
65
+ include?(:'@name').should == true
66
+
67
+ object.class.class_variables.
68
+ map { |v| v.to_sym }.
69
+ include?(:'@@number').should == true
70
+
71
+ # Complete instance variables.
72
+ b = Pry.binding_for(object)
73
+ completer_test(b).call('@name', '@name.downcase')
74
+
75
+ # Complete class variables.
76
+ b = Pry.binding_for(object.class)
77
+ completer_test(b).call('@@number', '@@number.class')
78
+
79
+ end
80
+
81
+
82
+ it 'should complete for stdlib symbols' do
83
+
84
+ o = Object.new
85
+ # Regexp
86
+ completer_test(o).call('/foo/.extend')
87
+
88
+ # Array
89
+ completer_test(o).call('[1].push')
90
+
91
+ # Hash
92
+ completer_test(o).call('{"a" => "b"}.keys')
93
+
94
+ # Proc
95
+ completer_test(o).call('{2}.call')
96
+
97
+ # Symbol
98
+ completer_test(o).call(':symbol.to_s')
99
+
100
+ # Absolute Constant
101
+ completer_test(o).call('::IndexError')
102
+ end
103
+
104
+ it 'should complete for target symbols' do
105
+ o = Object.new
106
+
107
+ # Constant
108
+ module Mod
109
+ Con = 'Constant'
110
+ module Mod2
111
+ end
112
+ end
113
+
114
+ completer_test(Mod).call('Con')
115
+
116
+ # Constants or Class Methods
117
+ completer_test(o).call('Mod::Con')
118
+
119
+ # Symbol
120
+ foo = :symbol
121
+ completer_test(o).call(':symbol')
122
+
123
+ # Variables
124
+ class << o
125
+ attr_accessor :foo
126
+ end
127
+ o.foo = 'bar'
128
+ completer_test(binding).call('o.foo')
129
+
130
+ # trailing slash
131
+ new_completer(Mod).call('Mod2/').include?('Mod2/').should == true
132
+ end
133
+
134
+ it 'should complete for arbitrary scopes' do
135
+ module Bar
136
+ @barvar = :bar
137
+ end
138
+
139
+ module Baz
140
+ @bar = Bar
141
+ @bazvar = :baz
142
+ Con = :constant
143
+ end
144
+
145
+ pry = Pry.new()
146
+ stack = pry.binding_stack
147
+ stack.push(Pry.binding_for(Baz))
148
+ stack.push(Pry.binding_for(Bar))
149
+
150
+ b = Pry.binding_for(Bar)
151
+ completer_test(b, pry).call("../@bazvar")
152
+ completer_test(b, pry).call('/Con')
153
+ end
154
+
155
+ it 'should complete for stdlib symbols' do
156
+
157
+ o = Object.new
158
+ # Regexp
159
+ completer_test(o).call('/foo/.extend')
160
+
161
+ # Array
162
+ completer_test(o).call('[1].push')
163
+
164
+ # Hash
165
+ completer_test(o).call('{"a" => "b"}.keys')
166
+
167
+ # Proc
168
+ completer_test(o).call('{2}.call')
169
+
170
+ # Symbol
171
+ completer_test(o).call(':symbol.to_s')
172
+
173
+ # Absolute Constant
174
+ completer_test(o).call('::IndexError')
175
+ end
176
+
177
+ it 'should complete for target symbols' do
178
+ o = Object.new
179
+
180
+ # Constant
181
+ module Mod
182
+ Con = 'Constant'
183
+ module Mod2
184
+ end
185
+ end
186
+
187
+ completer_test(Mod).call('Con')
188
+
189
+ # Constants or Class Methods
190
+ completer_test(o).call('Mod::Con')
191
+
192
+ # Symbol
193
+ foo = :symbol
194
+ completer_test(o).call(':symbol')
195
+
196
+ # Variables
197
+ class << o
198
+ attr_accessor :foo
199
+ end
200
+ o.foo = 'bar'
201
+ completer_test(binding).call('o.foo')
202
+
203
+ # trailing slash
204
+ new_completer(Mod).call('Mod2/').include?('Mod2/').should == true
205
+
206
+ end
207
+
208
+ it 'should complete for arbitrary scopes' do
209
+ module Bar
210
+ @barvar = :bar
211
+ end
212
+
213
+ module Baz
214
+ @bar = Bar
215
+ @bazvar = :baz
216
+ Con = :constant
217
+ end
218
+
219
+ pry = Pry.new()
220
+ stack = pry.binding_stack
221
+ stack.push(Pry.binding_for(Baz))
222
+ stack.push(Pry.binding_for(Bar))
223
+
224
+ b = Pry.binding_for(Bar)
225
+ completer_test(b, pry).call("../@bazvar")
226
+ completer_test(b, pry).call('/Con')
227
+ end
228
+
229
+ it 'should not return nil in its output' do
230
+ pry = Pry.new
231
+ new_completer(binding, pry).call("pry.").should.not.include nil
232
+ end
233
+ end
@@ -0,0 +1,58 @@
1
+ require 'helper'
2
+
3
+ describe Pry::DEFAULT_CONTROL_D_HANDLER do
4
+
5
+ describe "control-d press" do
6
+
7
+ before do
8
+ # Simulates a ^D press.
9
+ @control_d = "Pry::DEFAULT_CONTROL_D_HANDLER.call('', _pry_)"
10
+ end
11
+
12
+ describe "in an expression" do
13
+ it "should clear out passed string" do
14
+ str = 'hello world'
15
+ Pry::DEFAULT_CONTROL_D_HANDLER.call(str, nil)
16
+ str.should == ''
17
+ end
18
+ end
19
+
20
+
21
+ describe "at top-level session" do
22
+ it "breaks out of a REPL" do
23
+ pry_tester(0).simulate_repl do |t|
24
+ t.eval @control_d
25
+ end.should == nil
26
+ end
27
+ end
28
+
29
+ describe "in a nested session" do
30
+ it "pops last binding from the binding stack" do
31
+ pry_tester(0).simulate_repl { |t|
32
+ t.eval 'cd :foo'
33
+ t.eval('_pry_.binding_stack.size').should == 2
34
+ t.eval(@control_d)
35
+ t.eval('_pry_.binding_stack.size').should == 1
36
+ t.eval 'exit-all'
37
+ }
38
+ end
39
+
40
+ it "breaks out of the parent session" do
41
+ pry_tester(:outer).simulate_repl do |o|
42
+ o.context = :inner
43
+ o.simulate_repl { |i|
44
+ i.eval('_pry_.current_context.eval("self")').should == :inner
45
+ i.eval('_pry_.binding_stack.size').should == 2
46
+ i.eval @control_d
47
+ i.eval('_pry_.binding_stack.size').should == 1
48
+ i.eval('_pry_.current_context.eval("self")').should == :outer
49
+ i.eval 'throw :breakout'
50
+ }
51
+ o.eval 'exit-all'
52
+ end
53
+ end
54
+ end
55
+
56
+ end
57
+
58
+ end
@@ -0,0 +1,79 @@
1
+ require 'pathname'
2
+ require 'helper'
3
+
4
+ describe Pry::Editor do
5
+ class << Pry::Editor
6
+ public :build_editor_invocation_string
7
+ end
8
+
9
+ before do
10
+ # OS-specific tempdir name. For GNU/Linux it's "tmp", for Windows it's
11
+ # something "Temp".
12
+ @tf_dir =
13
+ if Pry::Helpers::BaseHelpers.mri_19?
14
+ Pathname.new(Dir::Tmpname.tmpdir)
15
+ else
16
+ Pathname.new(Dir.tmpdir)
17
+ end
18
+
19
+ @tf_path = File.join(@tf_dir.to_s, 'hello world.rb')
20
+ end
21
+
22
+ unless Pry::Helpers::BaseHelpers.windows?
23
+ describe "build_editor_invocation_string" do
24
+ before do
25
+ class << Pry::Editor
26
+ public :build_editor_invocation_string
27
+ end
28
+ end
29
+
30
+ it 'should shell-escape files' do
31
+ invocation_str = Pry::Editor.build_editor_invocation_string(@tf_path, 5, true)
32
+ invocation_str.should =~ /#@tf_dir.+hello\\ world\.rb/
33
+ end
34
+ end
35
+ end
36
+
37
+ describe "build_editor_invocation_string on windows" do
38
+ before do
39
+ class << Pry::Editor
40
+ def windows?; true; end
41
+ end
42
+ end
43
+
44
+ after do
45
+ class << Pry::Editor
46
+ undef windows?
47
+ end
48
+ end
49
+
50
+ it "should replace / by \\" do
51
+ invocation_str = Pry::Editor.build_editor_invocation_string(@tf_path, 5, true)
52
+ invocation_str.should =~ %r(\\#{@tf_dir.basename}\\)
53
+ end
54
+
55
+ it "should not shell-escape files" do
56
+ invocation_str = Pry::Editor.build_editor_invocation_string(@tf_path, 5, true)
57
+ invocation_str.should =~ /hello world\.rb/
58
+ end
59
+ end
60
+
61
+ describe 'invoke_editor with a proc' do
62
+ before do
63
+ @old_editor = Pry.config.editor
64
+ Pry.config.editor = proc{ |file, line, blocking|
65
+ @file = file
66
+ nil
67
+ }
68
+ end
69
+
70
+ after do
71
+ Pry.config.editor = @old_editor
72
+ end
73
+
74
+ it 'should not shell-escape files' do
75
+ Pry::Editor.invoke_editor(@tf_path, 10, true)
76
+ @file.should == @tf_path
77
+ end
78
+ end
79
+ end