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,7 +0,0 @@
1
- class Pry
2
- module ExtendedCommands
3
-
4
- Experimental = Pry::CommandSet.new do
5
- end
6
- end
7
- end
@@ -1,223 +0,0 @@
1
- unless Object.const_defined? 'Pry'
2
- $:.unshift File.expand_path '../../lib', __FILE__
3
- require 'pry'
4
- end
5
-
6
- puts "Ruby v#{RUBY_VERSION} (#{defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"}), Pry v#{Pry::VERSION}, method_source v#{MethodSource::VERSION}, CodeRay v#{CodeRay::VERSION}, Slop v#{Slop::VERSION}"
7
-
8
- require 'bacon'
9
- require 'open4'
10
-
11
- # A global space for storing temporary state during tests.
12
- Pad = OpenStruct.new
13
- def Pad.clear
14
- @table = {}
15
- end
16
-
17
- # turn warnings off (esp for Pry::Hooks which will generate warnings
18
- # in tests)
19
- $VERBOSE = nil
20
-
21
- # Ensure we do not execute any rc files
22
- Pry::RC_FILES.clear
23
-
24
- # inject a variable into a binding
25
- def inject_var(name, value, b)
26
- Thread.current[:__pry_local__] = value
27
- b.eval("#{name} = Thread.current[:__pry_local__]")
28
- ensure
29
- Thread.current[:__pry_local__] = nil
30
- end
31
-
32
- def constant_scope(*names)
33
- names.each do |name|
34
- Object.remove_const name if Object.const_defined?(name)
35
- end
36
-
37
- yield
38
- ensure
39
- names.each do |name|
40
- Object.remove_const name if Object.const_defined?(name)
41
- end
42
- end
43
-
44
- def mri18_and_no_real_source_location?
45
- Pry::Helpers::BaseHelpers.mri_18? && !(Method.instance_method(:source_location).owner == Method)
46
- end
47
-
48
- # used by test_show_source.rb and test_documentation.rb
49
- class TestClassForShowSource
50
- def alpha
51
- end
52
- end
53
-
54
- class TestClassForShowSourceClassEval
55
- def alpha
56
- end
57
- end
58
-
59
- class TestClassForShowSourceInstanceEval
60
- def alpha
61
- end
62
- end
63
-
64
- # in case the tests call reset_defaults, ensure we reset them to
65
- # amended (test friendly) values
66
- class << Pry
67
- alias_method :orig_reset_defaults, :reset_defaults
68
- def reset_defaults
69
- orig_reset_defaults
70
-
71
- Pry.color = false
72
- Pry.pager = false
73
- Pry.config.should_load_rc = false
74
- Pry.config.should_load_local_rc= false
75
- Pry.config.should_load_plugins = false
76
- Pry.config.history.should_load = false
77
- Pry.config.history.should_save = false
78
- Pry.config.auto_indent = false
79
- Pry.config.hooks = Pry::Hooks.new
80
- Pry.config.collision_warning = false
81
- end
82
- end
83
-
84
- def mock_exception(*mock_backtrace)
85
- e = StandardError.new("mock exception")
86
- (class << e; self; end).class_eval do
87
- define_method(:backtrace) { mock_backtrace }
88
- end
89
- e
90
- end
91
-
92
- Pry.reset_defaults
93
-
94
- # this is to test exception code (cat --ex)
95
- def broken_method
96
- this method is broken
97
- end
98
-
99
- # sample doc
100
- def sample_method
101
- :sample
102
- end
103
-
104
- # another sample doc
105
- def another_sample_method
106
- :another_sample
107
- end
108
-
109
- # Set I/O streams.
110
- #
111
- # Out defaults to an anonymous StringIO.
112
- #
113
- def redirect_pry_io(new_in, new_out = StringIO.new)
114
- old_in = Pry.input
115
- old_out = Pry.output
116
-
117
- Pry.input = new_in
118
- Pry.output = new_out
119
- begin
120
- yield
121
- ensure
122
- Pry.input = old_in
123
- Pry.output = old_out
124
- end
125
- end
126
-
127
- def mock_pry(*args)
128
-
129
- binding = args.first.is_a?(Binding) ? args.shift : binding()
130
-
131
- input = InputTester.new(*args)
132
- output = StringIO.new
133
-
134
- redirect_pry_io(input, output) do
135
- binding.pry
136
- end
137
-
138
- output.string
139
- end
140
-
141
- def mock_command(cmd, args=[], opts={})
142
- output = StringIO.new
143
- ret = cmd.new(opts.merge(:output => output)).call_safely(*args)
144
- Struct.new(:output, :return).new(output.string, ret)
145
- end
146
-
147
- def redirect_global_pry_input(new_io)
148
- old_io = Pry.input
149
- Pry.input = new_io
150
- begin
151
- yield
152
- ensure
153
- Pry.input = old_io
154
- end
155
- end
156
-
157
- def redirect_global_pry_output(new_io)
158
- old_io = Pry.output
159
- Pry.output = new_io
160
- begin
161
- yield
162
- ensure
163
- Pry.output = old_io
164
- end
165
- end
166
-
167
- class Module
168
- public :remove_const
169
- public :remove_method
170
- end
171
-
172
-
173
- class InputTester
174
- def initialize(*actions)
175
- @orig_actions = actions.dup
176
- @actions = actions
177
- end
178
-
179
- def readline(*)
180
- @actions.shift
181
- end
182
-
183
- def rewind
184
- @actions = @orig_actions.dup
185
- end
186
- end
187
-
188
- class Pry
189
-
190
- # null output class - doesn't write anywwhere.
191
- class NullOutput
192
- def self.puts(*) end
193
- def self.string(*) end
194
- end
195
- end
196
-
197
- # Open a temp file and yield it to the block, closing it after
198
- # @return [String] The path of the temp file
199
- def temp_file(ext='.rb')
200
- file = Tempfile.new(['pry', ext])
201
- yield file
202
- ensure
203
- file.close(true) if file
204
- end
205
-
206
-
207
- CommandTester = Pry::CommandSet.new do
208
- command "command1", "command 1 test" do
209
- output.puts "command1"
210
- end
211
-
212
- command "command2", "command 2 test" do |arg|
213
- output.puts arg
214
- end
215
- end
216
-
217
- # to help with tracking down bugs that cause an infinite loop in the test suite
218
- if ENV["SET_TRACE_FUNC"]
219
- require 'set_trace' if Pry::Helpers::BaseHelpers.rbx?
220
- set_trace_func proc { |event, file, line, id, binding, classname|
221
- STDERR.printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname
222
- }
223
- end
@@ -1,62 +0,0 @@
1
- require 'helper'
2
-
3
- describe Pry::InputCompleter do
4
-
5
- before do
6
- # The AMQP gem has some classes like this:
7
- # pry(main)> AMQP::Protocol::Test::ContentOk.name
8
- # => :content_ok
9
- module SymbolyName
10
- def self.name; :symboly_name; end
11
- end
12
- end
13
-
14
- after do
15
- Object.remove_const :SymbolyName
16
- end
17
-
18
- # another jruby hack :((
19
- if !Pry::Helpers::BaseHelpers.jruby?
20
- it "should not crash if there's a Module that has a symbolic name." do
21
- completer = Pry::InputCompleter.build_completion_proc(Pry.binding_for(Object.new))
22
- lambda{ completer.call "a.to_s." }.should.not.raise Exception
23
- end
24
- end
25
-
26
- it 'should take parenthesis and other characters into account for symbols' do
27
- b = Pry.binding_for(Object.new)
28
- completer = Pry::InputCompleter.build_completion_proc(b)
29
-
30
- lambda { completer.call(":class)") }.should.not.raise(RegexpError)
31
- end
32
-
33
- it 'should complete instance variables' do
34
- object = Object.new
35
-
36
- object.instance_variable_set(:'@name', 'Pry')
37
- object.class.send(:class_variable_set, :'@@number', 10)
38
-
39
- object.instance_variables.map { |v| v.to_sym } \
40
- .include?(:'@name').should == true
41
-
42
- object.class.class_variables.map { |v| v.to_sym } \
43
- .include?(:'@@number').should == true
44
-
45
- completer = Pry::InputCompleter.build_completion_proc(
46
- Pry.binding_for(object)
47
- )
48
-
49
- # Complete instance variables.
50
- completer.call('@na').include?('@name').should == true
51
- completer.call('@name.down').include?('@name.downcase').should == true
52
-
53
- # Complete class variables.
54
- completer = Pry::InputCompleter.build_completion_proc(
55
- Pry.binding_for(object.class)
56
- )
57
-
58
- completer.call('@@nu').include?('@@number').should == true
59
- completer.call('@@number.cl').include?('@@number.class').should == true
60
- end
61
- end
62
-
@@ -1,45 +0,0 @@
1
- require 'helper'
2
-
3
- describe Pry::DEFAULT_CONTROL_D_HANDLER do
4
- describe 'control-d press' do
5
- before do
6
- @control_d = "Pry::DEFAULT_CONTROL_D_HANDLER.call('', _pry_)"
7
- @binding_stack = "self.binding_stack = _pry_.binding_stack.dup"
8
- end
9
-
10
- describe 'in an expression' do
11
- it 'should clear out passed string' do
12
- str = "hello world"
13
- Pry::DEFAULT_CONTROL_D_HANDLER.call(str, nil)
14
- str.should == ""
15
- end
16
- end
17
-
18
- describe 'at top-level session' do
19
- it 'should break out of a REPL loop' do
20
- instance = nil
21
- redirect_pry_io(InputTester.new(@control_d)) do
22
- instance = Pry.new
23
- instance.repl
24
- end
25
-
26
- instance.binding_stack.should.be.empty
27
- end
28
- end
29
-
30
- describe 'in a nested session' do
31
- it 'should pop last binding from the binding stack' do
32
- base = OpenStruct.new
33
- base.obj = OpenStruct.new
34
-
35
- redirect_pry_io(InputTester.new("cd obj", "self.stack_size = _pry_.binding_stack.size",
36
- @control_d, "self.stack_size = _pry_.binding_stack.size", "exit-all")) do
37
- Pry.start(base)
38
- end
39
-
40
- base.obj.stack_size.should == 2
41
- base.stack_size.should == 1
42
- end
43
- end
44
- end
45
- end
@@ -1,321 +0,0 @@
1
- require 'helper'
2
-
3
- describe 'Pry::DefaultCommands::Cd' do
4
- before do
5
- @o, @obj = Object.new, Object.new
6
- @obj.instance_variable_set(:@x, 66)
7
- @obj.instance_variable_set(:@y, 79)
8
- @o.instance_variable_set(:@obj, @obj)
9
-
10
- # Shortcuts. They save a lot of typing.
11
- @bs1 = "Pad.bs1 = _pry_.binding_stack.dup"
12
- @bs2 = "Pad.bs2 = _pry_.binding_stack.dup"
13
- @bs3 = "Pad.bs3 = _pry_.binding_stack.dup"
14
-
15
- @os1 = "Pad.os1 = _pry_.command_state['cd'].old_stack.dup"
16
- @os2 = "Pad.os2 = _pry_.command_state['cd'].old_stack.dup"
17
-
18
- @self = "Pad.self = self"
19
- @inner = "Pad.inner = self"
20
- @outer = "Pad.outer = self"
21
- end
22
-
23
- after do
24
- Pad.clear
25
- end
26
-
27
- describe 'state' do
28
- it 'should not to be set up in fresh instance' do
29
- redirect_pry_io(InputTester.new(@os1, "exit-all")) do
30
- Pry.start(@o)
31
- end
32
-
33
- Pad.os1.should == nil
34
- end
35
- end
36
-
37
- describe 'old stack toggling with `cd -`' do
38
- describe 'in fresh pry instance' do
39
- it 'should not toggle when there is no old stack' do
40
- redirect_pry_io(InputTester.new("cd -", @bs1, "cd -",
41
- @bs2, "exit-all")) do
42
- Pry.start(@o)
43
- end
44
-
45
- Pad.bs1.map { |v| v.eval("self") }.should == [@o]
46
- Pad.bs2.map { |v| v.eval("self") }.should == [@o]
47
- end
48
- end
49
-
50
- describe 'when an error was raised' do
51
- it 'should ensure cd @ raises SyntaxError' do
52
- mock_pry("cd @").should =~ /SyntaxError/
53
- end
54
-
55
- it 'should not toggle and should keep correct old stack' do
56
- redirect_pry_io(InputTester.new("cd @", @os1, "cd -", @os2, "exit-all")) do
57
- Pry.start(@o)
58
- end
59
-
60
- Pad.os1.should == []
61
- Pad.os2.should == []
62
- end
63
-
64
- it 'should not toggle and should keep correct current binding stack' do
65
- redirect_pry_io(InputTester.new("cd @", @bs1, "cd -", @bs2, "exit-all")) do
66
- Pry.start(@o)
67
- end
68
-
69
- Pad.bs1.map { |v| v.eval("self") }.should == [@o]
70
- Pad.bs2.map { |v| v.eval("self") }.should == [@o]
71
- end
72
- end
73
-
74
- describe 'when using simple cd syntax' do
75
- it 'should toggle' do
76
- redirect_pry_io(InputTester.new("cd :mon_dogg", "cd -", @bs1,
77
- "cd -", @bs2, "exit-all")) do
78
- Pry.start(@o)
79
- end
80
-
81
- Pad.bs1.map { |v| v.eval("self") }.should == [@o]
82
- Pad.bs2.map { |v| v.eval("self") }.should == [@o, :mon_dogg]
83
- end
84
- end
85
-
86
- describe "when using complex cd syntax" do
87
- it 'should toggle with a complex path (simple case)' do
88
- redirect_pry_io(InputTester.new("cd 1/2/3", "cd -", @bs1,
89
- "cd -", @bs2, "exit-all")) do
90
- Pry.start(@o)
91
- end
92
-
93
- Pad.bs1.map { |v| v.eval('self') }.should == [@o]
94
- Pad.bs2.map { |v| v.eval('self') }.should == [@o, 1, 2, 3]
95
- end
96
-
97
- it 'should toggle with a complex path (more complex case)' do
98
- redirect_pry_io(InputTester.new("cd 1/2/3", "cd ../4", "cd -",
99
- @bs1, "cd -", @bs2, "exit-all")) do
100
- Pry.start(@o)
101
- end
102
-
103
- Pad.bs1.map { |v| v.eval('self') }.should == [@o, 1, 2, 3]
104
- Pad.bs2.map { |v| v.eval('self') }.should == [@o, 1, 2, 4]
105
- end
106
- end
107
-
108
- describe 'series of cd calls' do
109
- it 'should toggle with fuzzy `cd -` calls' do
110
- redirect_pry_io(InputTester.new("cd :mon_dogg", "cd -", "cd 42", "cd -",
111
- @bs1, "cd -", @bs2, "exit-all")) do
112
- Pry.start(@o)
113
- end
114
-
115
- Pad.bs1.map { |v| v.eval('self') }.should == [@o]
116
- Pad.bs2.map { |v| v.eval('self') }.should == [@o, 42]
117
- end
118
- end
119
-
120
- describe 'when using cd ..' do
121
- it 'should toggle with a simple path' do
122
- redirect_pry_io(InputTester.new("cd :john_dogg", "cd ..", @bs1,
123
- "cd -", @bs2, "exit-all")) do
124
- Pry.start(@o)
125
- end
126
-
127
- Pad.bs1.map { |v| v.eval('self') }.should == [@o]
128
- Pad.bs2.map { |v| v.eval('self') }.should == [@o, :john_dogg]
129
- end
130
-
131
- it 'should toggle with a complex path' do
132
- redirect_pry_io(InputTester.new("cd 1/2/3/../4", "cd -", @bs1,
133
- "cd -", @bs2, "exit-all")) do
134
- Pry.start(@o)
135
- end
136
-
137
- Pad.bs1.map { |v| v.eval('self') }.should == [@o]
138
- Pad.bs2.map { |v| v.eval('self') }.should == [@o, 1, 2, 4]
139
- end
140
- end
141
-
142
- describe 'when using cd ::' do
143
- it 'should toggle' do
144
- redirect_pry_io(InputTester.new("cd ::", "cd -", @bs1,
145
- "cd -", @bs2, "exit-all")) do
146
- Pry.start(@o)
147
- end
148
-
149
- Pad.bs1.map { |v| v.eval('self') }.should == [@o]
150
- Pad.bs2.map { |v| v.eval('self') }.should == [@o, TOPLEVEL_BINDING.eval("self")]
151
- end
152
- end
153
-
154
- describe 'when using cd /' do
155
- it 'should toggle' do
156
- redirect_pry_io(InputTester.new("cd /", "cd -", @bs1, "cd :john_dogg",
157
- "cd /", "cd -", @bs2, "exit-all")) do
158
- Pry.start(@o)
159
- end
160
-
161
- Pad.bs1.map { |v| v.eval('self') }.should == [@o]
162
- Pad.bs2.map { |v| v.eval('self') }.should == [@o, :john_dogg]
163
- end
164
- end
165
-
166
- describe 'when using ^D (Control-D) key press' do
167
- before do
168
- @control_d = "Pry::DEFAULT_CONTROL_D_HANDLER.call('', _pry_)"
169
- end
170
-
171
- it 'should keep correct old binding' do
172
- redirect_pry_io(InputTester.new("cd :john_dogg", "cd :mon_dogg",
173
- "cd :kyr_dogg", @control_d, @bs1,
174
- "cd -", @bs2, "cd -", @bs3, "exit-all")) do
175
- Pry.start(@o)
176
- end
177
-
178
- Pad.bs1.map { |v| v.eval('self') }.should == [@o, :john_dogg, :mon_dogg]
179
- Pad.bs2.map { |v| v.eval('self') }.should == [@o, :john_dogg, :mon_dogg, :kyr_dogg]
180
- Pad.bs3.map { |v| v.eval('self') }.should == [@o, :john_dogg, :mon_dogg]
181
- end
182
- end
183
- end
184
-
185
- it 'should cd into simple input' do
186
- redirect_pry_io(InputTester.new("cd :mon_ouie", @inner, "exit-all")) do
187
- Pry.start(@o)
188
- end
189
-
190
- Pad.inner.should == :mon_ouie
191
- end
192
-
193
- it 'should break out of session with cd ..' do
194
- redirect_pry_io(InputTester.new("cd :inner", @inner, "cd ..", @outer, "exit-all")) do
195
- Pry.start(:outer)
196
- end
197
-
198
- Pad.inner.should == :inner
199
- Pad.outer.should == :outer
200
- end
201
-
202
- it "should not leave the REPL session when given 'cd ..'" do
203
- redirect_pry_io(InputTester.new("cd ..", @self, "exit-all")) do
204
- Pry.start(@o)
205
- end
206
-
207
- Pad.self.should == @o
208
- end
209
-
210
- it 'should break out to outer-most session with cd /' do
211
- redirect_pry_io(InputTester.new("cd :inner", @inner, "cd 5", "Pad.five = self",
212
- "cd /", @outer, "exit-all")) do
213
- Pry.start(:outer)
214
- end
215
-
216
- Pad.inner.should == :inner
217
- Pad.five.should == 5
218
- Pad.outer.should == :outer
219
- end
220
-
221
- it 'should break out to outer-most session with just cd (no args)' do
222
- redirect_pry_io(InputTester.new("cd :inner", @inner, "cd 5", "Pad.five = self",
223
- "cd", @outer, "exit-all")) do
224
- Pry.start(:outer)
225
- end
226
-
227
- Pad.inner.should == :inner
228
- Pad.five.should == 5
229
- Pad.outer.should == :outer
230
- end
231
-
232
- it 'should cd into an object and its ivar using cd obj/@ivar syntax' do
233
- redirect_pry_io(InputTester.new("cd @obj/@x", @bs1, "exit-all")) do
234
- Pry.start(@o)
235
- end
236
-
237
- Pad.bs1.map { |v| v.eval("self") }.should == [@o, @obj, 66]
238
- end
239
-
240
- it 'should cd into an object and its ivar using cd obj/@ivar/ syntax (note following /)' do
241
- redirect_pry_io(InputTester.new("cd @obj/@x/", @bs1, "exit-all")) do
242
- Pry.start(@o)
243
- end
244
-
245
- Pad.bs1.map { |v| v.eval("self") }.should == [@o, @obj, 66]
246
- end
247
-
248
- it 'should cd into previous object and its local using cd ../local syntax' do
249
- redirect_pry_io(InputTester.new("cd @obj", "local = :local", "cd @x",
250
- "cd ../local", @bs1, "exit-all")) do
251
- Pry.start(@o)
252
- end
253
-
254
- Pad.bs1.map { |v| v.eval("self") }.should == [@o, @obj, :local]
255
- end
256
-
257
- it 'should cd into an object and its ivar and back again using cd obj/@ivar/.. syntax' do
258
- redirect_pry_io(InputTester.new("cd @obj/@x/..", @bs1, "exit-all")) do
259
- Pry.start(@o)
260
- end
261
-
262
- Pad.bs1.map { |v| v.eval("self") }.should == [@o, @obj]
263
- end
264
-
265
- it 'should cd into an object and its ivar and back and then into another ivar using cd obj/@ivar/../@y syntax' do
266
- redirect_pry_io(InputTester.new("cd @obj/@x/../@y", @bs1, "exit-all")) do
267
- Pry.start(@o)
268
- end
269
-
270
- Pad.bs1.map { |v| v.eval("self") }.should == [@o, @obj, 79]
271
- end
272
-
273
- it 'should cd back to top-level and then into another ivar using cd /@ivar/ syntax' do
274
- redirect_pry_io(InputTester.new("@z = 20", "cd @obj/@x/", "cd /@z",
275
- @bs1, "exit-all")) do
276
- Pry.start(@o)
277
- end
278
-
279
- Pad.bs1.map { |v| v.eval("self") }.should == [@o, 20]
280
- end
281
-
282
- it 'should start a session on TOPLEVEL_BINDING with cd ::' do
283
- redirect_pry_io(InputTester.new("cd ::", @self, "exit-all")) do
284
- Pry.start(@o)
285
- end
286
-
287
- Pad.self.should == TOPLEVEL_BINDING.eval("self")
288
- end
289
-
290
- it 'should cd into complex input (with spaces)' do
291
- def @o.hello(x, y, z)
292
- :mon_ouie
293
- end
294
-
295
- redirect_pry_io(InputTester.new("cd hello 1, 2, 3", @self, "exit-all")) do
296
- Pry.start(@o)
297
- end
298
-
299
- Pad.self.should == :mon_ouie
300
- end
301
-
302
- it 'should not cd into complex input when it encounters an exception' do
303
- redirect_pry_io(InputTester.new("cd 1/2/swoop_a_doop/3",
304
- @bs1, "exit-all")) do
305
- Pry.start(@o)
306
- end
307
-
308
- Pad.bs1.map { |v| v.eval("self") }.should == [@o]
309
- end
310
-
311
- # Regression test for ticket #516.
312
- #it 'should be able to cd into the Object BasicObject.' do
313
- # mock_pry('cd BasicObject.new').should.not =~ /\Aundefined method `__binding__'/
314
- #end
315
-
316
- # Regression test for ticket #516
317
- # Possibly move higher up.
318
- it 'should not fail with undefined BasicObject#is_a?' do
319
- mock_pry('cd BasicObject.new').should.not =~ /undefined method `is_a\?'/
320
- end
321
- end