pry 0.10.pre.1-i386-mswin32 → 0.10.0.pre3-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 (214) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +702 -0
  3. data/LICENSE +2 -2
  4. data/{README.markdown → README.md} +41 -35
  5. data/lib/pry.rb +82 -139
  6. data/lib/pry/cli.rb +77 -30
  7. data/lib/pry/code.rb +122 -183
  8. data/lib/pry/code/code_file.rb +103 -0
  9. data/lib/pry/code/code_range.rb +71 -0
  10. data/lib/pry/code/loc.rb +92 -0
  11. data/lib/pry/code_object.rb +172 -0
  12. data/lib/pry/color_printer.rb +55 -0
  13. data/lib/pry/command.rb +184 -28
  14. data/lib/pry/command_set.rb +113 -59
  15. data/lib/pry/commands.rb +4 -27
  16. data/lib/pry/commands/amend_line.rb +99 -0
  17. data/lib/pry/commands/bang.rb +20 -0
  18. data/lib/pry/commands/bang_pry.rb +17 -0
  19. data/lib/pry/commands/cat.rb +62 -0
  20. data/lib/pry/commands/cat/abstract_formatter.rb +27 -0
  21. data/lib/pry/commands/cat/exception_formatter.rb +77 -0
  22. data/lib/pry/commands/cat/file_formatter.rb +67 -0
  23. data/lib/pry/commands/cat/input_expression_formatter.rb +43 -0
  24. data/lib/pry/commands/cd.rb +41 -0
  25. data/lib/pry/commands/change_inspector.rb +27 -0
  26. data/lib/pry/commands/change_prompt.rb +26 -0
  27. data/lib/pry/commands/code_collector.rb +165 -0
  28. data/lib/pry/commands/disable_pry.rb +27 -0
  29. data/lib/pry/commands/disabled_commands.rb +2 -0
  30. data/lib/pry/commands/easter_eggs.rb +112 -0
  31. data/lib/pry/commands/edit.rb +195 -0
  32. data/lib/pry/commands/edit/exception_patcher.rb +25 -0
  33. data/lib/pry/commands/edit/file_and_line_locator.rb +36 -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 +23 -0
  37. data/lib/pry/commands/find_method.rb +193 -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 +32 -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 +101 -0
  44. data/lib/pry/commands/help.rb +164 -0
  45. data/lib/pry/commands/hist.rb +180 -0
  46. data/lib/pry/commands/import_set.rb +22 -0
  47. data/lib/pry/commands/install_command.rb +53 -0
  48. data/lib/pry/commands/jump_to.rb +29 -0
  49. data/lib/pry/commands/list_inspectors.rb +35 -0
  50. data/lib/pry/commands/list_prompts.rb +35 -0
  51. data/lib/pry/commands/ls.rb +114 -0
  52. data/lib/pry/commands/ls/constants.rb +47 -0
  53. data/lib/pry/commands/ls/formatter.rb +49 -0
  54. data/lib/pry/commands/ls/globals.rb +48 -0
  55. data/lib/pry/commands/ls/grep.rb +21 -0
  56. data/lib/pry/commands/ls/instance_vars.rb +39 -0
  57. data/lib/pry/commands/ls/interrogatable.rb +18 -0
  58. data/lib/pry/commands/ls/jruby_hacks.rb +49 -0
  59. data/lib/pry/commands/ls/local_names.rb +35 -0
  60. data/lib/pry/commands/ls/local_vars.rb +39 -0
  61. data/lib/pry/commands/ls/ls_entity.rb +70 -0
  62. data/lib/pry/commands/ls/methods.rb +57 -0
  63. data/lib/pry/commands/ls/methods_helper.rb +46 -0
  64. data/lib/pry/commands/ls/self_methods.rb +32 -0
  65. data/lib/pry/commands/nesting.rb +25 -0
  66. data/lib/pry/commands/play.rb +103 -0
  67. data/lib/pry/commands/pry_backtrace.rb +25 -0
  68. data/lib/pry/commands/pry_version.rb +17 -0
  69. data/lib/pry/commands/raise_up.rb +32 -0
  70. data/lib/pry/commands/reload_code.rb +62 -0
  71. data/lib/pry/commands/reset.rb +18 -0
  72. data/lib/pry/commands/ri.rb +60 -0
  73. data/lib/pry/commands/save_file.rb +61 -0
  74. data/lib/pry/commands/shell_command.rb +48 -0
  75. data/lib/pry/commands/shell_mode.rb +25 -0
  76. data/lib/pry/commands/show_doc.rb +83 -0
  77. data/lib/pry/commands/show_info.rb +195 -0
  78. data/lib/pry/commands/show_input.rb +17 -0
  79. data/lib/pry/commands/show_source.rb +50 -0
  80. data/lib/pry/commands/simple_prompt.rb +22 -0
  81. data/lib/pry/commands/stat.rb +40 -0
  82. data/lib/pry/commands/switch_to.rb +23 -0
  83. data/lib/pry/commands/toggle_color.rb +24 -0
  84. data/lib/pry/commands/watch_expression.rb +105 -0
  85. data/lib/pry/commands/watch_expression/expression.rb +38 -0
  86. data/lib/pry/commands/whereami.rb +190 -0
  87. data/lib/pry/commands/wtf.rb +57 -0
  88. data/lib/pry/config.rb +20 -229
  89. data/lib/pry/config/behavior.rb +139 -0
  90. data/lib/pry/config/convenience.rb +26 -0
  91. data/lib/pry/config/default.rb +165 -0
  92. data/lib/pry/core_extensions.rb +59 -38
  93. data/lib/pry/editor.rb +133 -0
  94. data/lib/pry/exceptions.rb +77 -0
  95. data/lib/pry/helpers.rb +1 -0
  96. data/lib/pry/helpers/base_helpers.rb +40 -154
  97. data/lib/pry/helpers/command_helpers.rb +19 -130
  98. data/lib/pry/helpers/documentation_helpers.rb +21 -11
  99. data/lib/pry/helpers/table.rb +109 -0
  100. data/lib/pry/helpers/text.rb +8 -9
  101. data/lib/pry/history.rb +61 -45
  102. data/lib/pry/history_array.rb +11 -1
  103. data/lib/pry/hooks.rb +10 -32
  104. data/lib/pry/indent.rb +110 -38
  105. data/lib/pry/input_completer.rb +242 -0
  106. data/lib/pry/input_lock.rb +132 -0
  107. data/lib/pry/inspector.rb +27 -0
  108. data/lib/pry/last_exception.rb +61 -0
  109. data/lib/pry/method.rb +199 -200
  110. data/lib/pry/method/disowned.rb +53 -0
  111. data/lib/pry/method/patcher.rb +125 -0
  112. data/lib/pry/method/weird_method_locator.rb +186 -0
  113. data/lib/pry/module_candidate.rb +39 -33
  114. data/lib/pry/object_path.rb +82 -0
  115. data/lib/pry/output.rb +50 -0
  116. data/lib/pry/pager.rb +234 -0
  117. data/lib/pry/plugins.rb +4 -3
  118. data/lib/pry/prompt.rb +26 -0
  119. data/lib/pry/pry_class.rb +199 -227
  120. data/lib/pry/pry_instance.rb +344 -403
  121. data/lib/pry/rbx_path.rb +1 -1
  122. data/lib/pry/repl.rb +202 -0
  123. data/lib/pry/repl_file_loader.rb +20 -26
  124. data/lib/pry/rubygem.rb +82 -0
  125. data/lib/pry/terminal.rb +79 -0
  126. data/lib/pry/test/helper.rb +170 -0
  127. data/lib/pry/version.rb +1 -1
  128. data/lib/pry/wrapped_module.rb +133 -48
  129. metadata +132 -197
  130. data/.document +0 -2
  131. data/.gemtest +0 -0
  132. data/.gitignore +0 -16
  133. data/.travis.yml +0 -17
  134. data/.yardopts +0 -1
  135. data/CHANGELOG +0 -387
  136. data/CONTRIBUTORS +0 -36
  137. data/Gemfile +0 -2
  138. data/Rakefile +0 -137
  139. data/TODO +0 -117
  140. data/examples/example_basic.rb +0 -15
  141. data/examples/example_command_override.rb +0 -32
  142. data/examples/example_commands.rb +0 -36
  143. data/examples/example_hooks.rb +0 -9
  144. data/examples/example_image_edit.rb +0 -67
  145. data/examples/example_input.rb +0 -7
  146. data/examples/example_input2.rb +0 -29
  147. data/examples/example_output.rb +0 -11
  148. data/examples/example_print.rb +0 -6
  149. data/examples/example_prompt.rb +0 -9
  150. data/examples/helper.rb +0 -6
  151. data/lib/pry/completion.rb +0 -221
  152. data/lib/pry/custom_completions.rb +0 -6
  153. data/lib/pry/default_commands/cd.rb +0 -81
  154. data/lib/pry/default_commands/commands.rb +0 -62
  155. data/lib/pry/default_commands/context.rb +0 -98
  156. data/lib/pry/default_commands/easter_eggs.rb +0 -95
  157. data/lib/pry/default_commands/editing.rb +0 -420
  158. data/lib/pry/default_commands/find_method.rb +0 -169
  159. data/lib/pry/default_commands/gems.rb +0 -84
  160. data/lib/pry/default_commands/gist.rb +0 -187
  161. data/lib/pry/default_commands/help.rb +0 -127
  162. data/lib/pry/default_commands/hist.rb +0 -120
  163. data/lib/pry/default_commands/input_and_output.rb +0 -306
  164. data/lib/pry/default_commands/introspection.rb +0 -410
  165. data/lib/pry/default_commands/ls.rb +0 -272
  166. data/lib/pry/default_commands/misc.rb +0 -38
  167. data/lib/pry/default_commands/navigating_pry.rb +0 -110
  168. data/lib/pry/default_commands/whereami.rb +0 -92
  169. data/lib/pry/extended_commands/experimental.rb +0 -7
  170. data/lib/pry/rbx_method.rb +0 -13
  171. data/man/pry.1 +0 -195
  172. data/man/pry.1.html +0 -204
  173. data/man/pry.1.ronn +0 -141
  174. data/pry.gemspec +0 -46
  175. data/test/candidate_helper1.rb +0 -11
  176. data/test/candidate_helper2.rb +0 -8
  177. data/test/helper.rb +0 -223
  178. data/test/test_cli.rb +0 -78
  179. data/test/test_code.rb +0 -201
  180. data/test/test_command.rb +0 -712
  181. data/test/test_command_helpers.rb +0 -9
  182. data/test/test_command_integration.rb +0 -668
  183. data/test/test_command_set.rb +0 -610
  184. data/test/test_completion.rb +0 -62
  185. data/test/test_control_d_handler.rb +0 -45
  186. data/test/test_default_commands/example.erb +0 -5
  187. data/test/test_default_commands/test_cd.rb +0 -318
  188. data/test/test_default_commands/test_context.rb +0 -280
  189. data/test/test_default_commands/test_documentation.rb +0 -314
  190. data/test/test_default_commands/test_find_method.rb +0 -50
  191. data/test/test_default_commands/test_gems.rb +0 -18
  192. data/test/test_default_commands/test_help.rb +0 -57
  193. data/test/test_default_commands/test_input.rb +0 -428
  194. data/test/test_default_commands/test_introspection.rb +0 -511
  195. data/test/test_default_commands/test_ls.rb +0 -151
  196. data/test/test_default_commands/test_shell.rb +0 -343
  197. data/test/test_default_commands/test_show_source.rb +0 -432
  198. data/test/test_exception_whitelist.rb +0 -21
  199. data/test/test_history_array.rb +0 -65
  200. data/test/test_hooks.rb +0 -521
  201. data/test/test_indent.rb +0 -277
  202. data/test/test_input_stack.rb +0 -86
  203. data/test/test_method.rb +0 -401
  204. data/test/test_pry.rb +0 -463
  205. data/test/test_pry_defaults.rb +0 -419
  206. data/test/test_pry_history.rb +0 -84
  207. data/test/test_pry_output.rb +0 -41
  208. data/test/test_sticky_locals.rb +0 -155
  209. data/test/test_syntax_checking.rb +0 -65
  210. data/test/test_wrapped_module.rb +0 -174
  211. data/test/testrc +0 -2
  212. data/test/testrcbad +0 -2
  213. data/wiki/Customizing-pry.md +0 -397
  214. data/wiki/Home.md +0 -4
@@ -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,5 +0,0 @@
1
- <html>
2
-
3
- Look at me, testing my erb!
4
-
5
- </html>
@@ -1,318 +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
- @os1 = "Pad.os1 = _pry_.command_state['cd'].old_stack.dup"
12
- @os2 = "Pad.os2 = _pry_.command_state['cd'].old_stack.dup"
13
-
14
- @bs1 = "Pad.bs1 = _pry_.binding_stack.dup"
15
- @bs2 = "Pad.bs2 = _pry_.binding_stack.dup"
16
- @bs3 = "Pad.bs3 = _pry_.binding_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 -", @bs2, "exit-all")) do
41
- Pry.start(@o)
42
- end
43
-
44
- Pad.bs1.map { |v| v.eval("self") }.should == [@o]
45
- Pad.bs2.map { |v| v.eval("self") }.should == [@o]
46
- end
47
- end
48
-
49
- describe 'when an error was raised' do
50
- it 'should ensure cd @ raises SyntaxError' do
51
- mock_pry("cd @").should =~ /SyntaxError/
52
- end
53
-
54
- it 'should not toggle and should keep correct old stack' do
55
- redirect_pry_io(InputTester.new("cd @", @os1, "cd -", @os2, "exit-all")) do
56
- Pry.start(@o)
57
- end
58
-
59
- Pad.os1.should == []
60
- Pad.os2.should == []
61
- end
62
-
63
- it 'should not toggle and should keep correct current binding stack' do
64
- redirect_pry_io(InputTester.new("cd @", @bs1, "cd -", @bs2, "exit-all")) do
65
- Pry.start(@o)
66
- end
67
-
68
- Pad.bs1.map { |v| v.eval("self") }.should == [@o]
69
- Pad.bs2.map { |v| v.eval("self") }.should == [@o]
70
- end
71
- end
72
-
73
- describe 'when using simple cd syntax' do
74
- it 'should toggle' do
75
- redirect_pry_io(InputTester.new("cd :mon_dogg", "cd -", @bs1,
76
- "cd -", @bs2, "exit-all")) do
77
- Pry.start(@o)
78
- end
79
-
80
- Pad.bs1.map { |v| v.eval("self") }.should == [@o]
81
- Pad.bs2.map { |v| v.eval("self") }.should == [@o, :mon_dogg]
82
- end
83
- end
84
-
85
- describe "when using complex cd syntax" do
86
- it 'should toggle with a complex path (simple case)' do
87
- redirect_pry_io(InputTester.new("cd 1/2/3", "cd -", @bs1,
88
- "cd -", @bs2, "exit-all")) do
89
- Pry.start(@o)
90
- end
91
-
92
- Pad.bs1.map { |v| v.eval('self') }.should == [@o]
93
- Pad.bs2.map { |v| v.eval('self') }.should == [@o, 1, 2, 3]
94
- end
95
-
96
- it 'should toggle with a complex path (more complex case)' do
97
- redirect_pry_io(InputTester.new("cd 1/2/3", "cd ../4", "cd -",
98
- @bs1, "cd -", @bs2, "exit-all")) do
99
- Pry.start(@o)
100
- end
101
-
102
- Pad.bs1.map { |v| v.eval('self') }.should == [@o, 1, 2, 3]
103
- Pad.bs2.map { |v| v.eval('self') }.should == [@o, 1, 2, 4]
104
- end
105
- end
106
-
107
- describe 'series of cd calls' do
108
- it 'should toggle with fuzzy `cd -` calls' do
109
- redirect_pry_io(InputTester.new("cd :mon_dogg", "cd -", "cd 42", "cd -",
110
- @bs1, "cd -", @bs2, "exit-all")) do
111
- Pry.start(@o)
112
- end
113
-
114
- Pad.bs1.map { |v| v.eval('self') }.should == [@o]
115
- Pad.bs2.map { |v| v.eval('self') }.should == [@o, 42]
116
- end
117
- end
118
-
119
- describe 'when using cd ..' do
120
- it 'should toggle with a simple path' do
121
- redirect_pry_io(InputTester.new("cd :john_dogg", "cd ..", @bs1,
122
- "cd -", @bs2, "exit-all")) do
123
- Pry.start(@o)
124
- end
125
-
126
- Pad.bs1.map { |v| v.eval('self') }.should == [@o]
127
- Pad.bs2.map { |v| v.eval('self') }.should == [@o, :john_dogg]
128
- end
129
-
130
- it 'should toggle with a complex path' do
131
- redirect_pry_io(InputTester.new("cd 1/2/3/../4", "cd -", @bs1,
132
- "cd -", @bs2, "exit-all")) do
133
- Pry.start(@o)
134
- end
135
-
136
- Pad.bs1.map { |v| v.eval('self') }.should == [@o]
137
- Pad.bs2.map { |v| v.eval('self') }.should == [@o, 1, 2, 4]
138
- end
139
- end
140
-
141
- describe 'when using cd ::' do
142
- it 'should toggle' do
143
- redirect_pry_io(InputTester.new("cd ::", "cd -", @bs1,
144
- "cd -", @bs2, "exit-all")) do
145
- Pry.start(@o)
146
- end
147
-
148
- Pad.bs1.map { |v| v.eval('self') }.should == [@o]
149
- Pad.bs2.map { |v| v.eval('self') }.should == [@o, TOPLEVEL_BINDING.eval("self")]
150
- end
151
- end
152
-
153
- describe 'when using cd /' do
154
- it 'should toggle' do
155
- redirect_pry_io(InputTester.new("cd /", "cd -", @bs1, "cd :john_dogg",
156
- "cd /", "cd -", @bs2, "exit-all")) do
157
- Pry.start(@o)
158
- end
159
-
160
- Pad.bs1.map { |v| v.eval('self') }.should == [@o]
161
- Pad.bs2.map { |v| v.eval('self') }.should == [@o, :john_dogg]
162
- end
163
- end
164
-
165
- describe 'when using ^D (Control-D) key press' do
166
- before do
167
- @control_d = "Pry::DEFAULT_CONTROL_D_HANDLER.call('', _pry_)"
168
- end
169
-
170
- it 'should keep correct old binding' do
171
- redirect_pry_io(InputTester.new("cd :john_dogg", "cd :mon_dogg",
172
- "cd :kyr_dogg", @control_d, @bs1, "cd -",
173
- @bs2, "cd -", @bs3, "exit-all")) do
174
- Pry.start(@o)
175
- end
176
-
177
- Pad.bs1.map { |v| v.eval('self') }.should == [@o, :john_dogg, :mon_dogg]
178
- Pad.bs2.map { |v| v.eval('self') }.should == [@o, :john_dogg, :mon_dogg, :kyr_dogg]
179
- Pad.bs3.map { |v| v.eval('self') }.should == [@o, :john_dogg, :mon_dogg]
180
- end
181
- end
182
- end
183
-
184
- it 'should cd into simple input' do
185
- redirect_pry_io(InputTester.new("cd :mon_ouie", @inner, "exit-all")) do
186
- Pry.start(@o)
187
- end
188
-
189
- Pad.inner.should == :mon_ouie
190
- end
191
-
192
- it 'should break out of session with cd ..' do
193
- redirect_pry_io(InputTester.new("cd :inner", @inner, "cd ..", @outer, "exit-all")) do
194
- Pry.start(:outer)
195
- end
196
-
197
- Pad.inner.should == :inner
198
- Pad.outer.should == :outer
199
- end
200
-
201
- it "should not leave the REPL session when given 'cd ..'" do
202
- redirect_pry_io(InputTester.new("cd ..", @self, "exit-all")) do
203
- Pry.start(@o)
204
- end
205
-
206
- Pad.self.should == @o
207
- end
208
-
209
- it 'should break out to outer-most session with cd /' do
210
- redirect_pry_io(InputTester.new("cd :inner", @inner, "cd 5", "Pad.five = self",
211
- "cd /", @outer, "exit-all")) do
212
- Pry.start(:outer)
213
- end
214
-
215
- Pad.inner.should == :inner
216
- Pad.five.should == 5
217
- Pad.outer.should == :outer
218
- end
219
-
220
- it 'should break out to outer-most session with just cd (no args)' do
221
- redirect_pry_io(InputTester.new("cd :inner", @inner, "cd 5", "Pad.five = self",
222
- "cd", @outer, "exit-all")) do
223
- Pry.start(:outer)
224
- end
225
-
226
- Pad.inner.should == :inner
227
- Pad.five.should == 5
228
- Pad.outer.should == :outer
229
- end
230
-
231
- it 'should cd into an object and its ivar using cd obj/@ivar syntax' do
232
- redirect_pry_io(InputTester.new("cd @obj/@x", @bs1, "exit-all")) do
233
- Pry.start(@o)
234
- end
235
-
236
- Pad.bs1.map { |v| v.eval("self") }.should == [@o, @obj, 66]
237
- end
238
-
239
- it 'should cd into an object and its ivar using cd obj/@ivar/ syntax (note following /)' do
240
- redirect_pry_io(InputTester.new("cd @obj/@x/", @bs1, "exit-all")) do
241
- Pry.start(@o)
242
- end
243
-
244
- Pad.bs1.map { |v| v.eval("self") }.should == [@o, @obj, 66]
245
- end
246
-
247
- it 'should cd into previous object and its local using cd ../local syntax' do
248
- redirect_pry_io(InputTester.new("cd @obj", "local = :local", "cd @x",
249
- "cd ../local", @bs1, "exit-all")) do
250
- Pry.start(@o)
251
- end
252
-
253
- Pad.bs1.map { |v| v.eval("self") }.should == [@o, @obj, :local]
254
- end
255
-
256
- it 'should cd into an object and its ivar and back again using cd obj/@ivar/.. syntax' do
257
- redirect_pry_io(InputTester.new("cd @obj/@x/..", @bs1, "exit-all")) do
258
- Pry.start(@o)
259
- end
260
-
261
- Pad.bs1.map { |v| v.eval("self") }.should == [@o, @obj]
262
- end
263
-
264
- it 'should cd into an object and its ivar and back and then into another ivar using cd obj/@ivar/../@y syntax' do
265
- redirect_pry_io(InputTester.new("cd @obj/@x/../@y", @bs1, "exit-all")) do
266
- Pry.start(@o)
267
- end
268
-
269
- Pad.bs1.map { |v| v.eval("self") }.should == [@o, @obj, 79]
270
- end
271
-
272
- it 'should cd back to top-level and then into another ivar using cd /@ivar/ syntax' do
273
- redirect_pry_io(InputTester.new("@z = 20", "cd @obj/@x/", "cd /@z", @bs1, "exit-all")) do
274
- Pry.start(@o)
275
- end
276
-
277
- Pad.bs1.map { |v| v.eval("self") }.should == [@o, 20]
278
- end
279
-
280
- it 'should start a session on TOPLEVEL_BINDING with cd ::' do
281
- redirect_pry_io(InputTester.new("cd ::", @self, "exit-all")) do
282
- Pry.start(@o)
283
- end
284
-
285
- Pad.self.should == TOPLEVEL_BINDING.eval("self")
286
- end
287
-
288
- it 'should cd into complex input (with spaces)' do
289
- def @o.hello(x, y, z)
290
- :mon_ouie
291
- end
292
-
293
- redirect_pry_io(InputTester.new("cd hello 1, 2, 3", @self, "exit-all")) do
294
- Pry.start(@o)
295
- end
296
-
297
- Pad.self.should == :mon_ouie
298
- end
299
-
300
- it 'should not cd into complex input when it encounters an exception' do
301
- redirect_pry_io(InputTester.new("cd 1/2/swoop_a_doop/3", @bs1, "exit-all")) do
302
- Pry.start(@o)
303
- end
304
-
305
- Pad.bs1.map { |v| v.eval("self") }.should == [@o]
306
- end
307
-
308
- # Regression test for ticket #516.
309
- #it 'should be able to cd into the Object BasicObject.' do
310
- # mock_pry('cd BasicObject.new').should.not =~ /\Aundefined method `__binding__'/
311
- #end
312
-
313
- # Regression test for ticket #516
314
- # Possibly move higher up.
315
- it 'should not fail with undefined BasicObject#is_a?' do
316
- mock_pry('cd BasicObject.new').should.not =~ /undefined method `is_a\?'/
317
- end
318
- end
@@ -1,280 +0,0 @@
1
- require 'helper'
2
-
3
- describe "Pry::DefaultCommands::Context" do
4
- describe "exit-all" do
5
- it 'should break out of the repl loop of Pry instance and return nil' do
6
- redirect_pry_io(InputTester.new("exit-all")) do
7
- Pry.new.repl(0).should == nil
8
- end
9
- end
10
-
11
- it 'should break out of the repl loop of Pry instance wth a user specified value' do
12
- redirect_pry_io(InputTester.new("exit-all 'message'")) do
13
- Pry.new.repl(0).should == 'message'
14
- end
15
- end
16
-
17
- it 'should break of the repl loop even if multiple bindings still on stack' do
18
- ins = nil
19
- redirect_pry_io(InputTester.new("cd 1", "cd 2", "exit-all 'message'")) do
20
- ins = Pry.new.tap { |v| v.repl(0).should == 'message' }
21
- end
22
- end
23
-
24
- it 'binding_stack should be empty after breaking out of the repl loop' do
25
- ins = nil
26
- redirect_pry_io(InputTester.new("cd 1", "cd 2", "exit-all")) do
27
- ins = Pry.new.tap { |v| v.repl(0) }
28
- end
29
-
30
- ins.binding_stack.empty?.should == true
31
- end
32
- end
33
-
34
- describe "whereami" do
35
- it 'should work with methods that have been undefined' do
36
- class Cor
37
- def blimey!
38
- Cor.send :undef_method, :blimey!
39
- # using [.] so the regex doesn't match itself
40
- mock_pry(binding, 'whereami').should =~ /self[.]blimey!/
41
- end
42
- end
43
-
44
- Cor.new.blimey!
45
- Object.remove_const(:Cor)
46
- end
47
-
48
- it 'should work in objects with no method methods' do
49
- class Cor
50
- def blimey!
51
- mock_pry(binding, 'whereami').should =~ /Cor[#]blimey!/
52
- end
53
-
54
- def method; "moo"; end
55
- end
56
- Cor.new.blimey!
57
- Object.remove_const(:Cor)
58
- end
59
-
60
- it 'should properly set _file_, _line_ and _dir_' do
61
- class Cor
62
- def blimey!
63
- mock_pry(binding, 'whereami', '_file_') \
64
- .should =~ /#{File.expand_path(__FILE__)}/
65
- end
66
- end
67
-
68
- Cor.new.blimey!
69
- Object.remove_const(:Cor)
70
- end
71
-
72
- it 'should show description and correct code when __LINE__ and __FILE__ are outside @method.source_location' do
73
- class Cor
74
- def blimey!
75
- eval <<-END, binding, "test/test_default_commands/example.erb", 1
76
- mock_pry(binding, 'whereami')
77
- END
78
- end
79
- end
80
-
81
- Cor.instance_method(:blimey!).source.should =~ /mock_pry/
82
-
83
- Cor.new.blimey!.should =~ /Cor#blimey!.*Look at me/m
84
- Object.remove_const(:Cor)
85
- end
86
-
87
- it 'should show description and correct code when @method.source_location would raise an error' do
88
- class Cor
89
- eval <<-END, binding, "test/test_default_commands/example.erb", 1
90
- def blimey!
91
- mock_pry(binding, 'whereami')
92
- end
93
- END
94
- end
95
-
96
- lambda{
97
- Cor.instance_method(:blimey!).source
98
- }.should.raise(MethodSource::SourceNotFoundError)
99
-
100
- Cor.new.blimey!.should =~ /Cor#blimey!.*Look at me/m
101
- Object.remove_const(:Cor)
102
-
103
- end
104
-
105
- it 'should display a description and and error if reading the file goes wrong' do
106
- class Cor
107
- def blimey!
108
- eval <<-END, binding, "not.found.file.erb", 7
109
- mock_pry(binding, 'whereami')
110
- END
111
- end
112
- end
113
-
114
- Cor.new.blimey!.should =~ /From: not.found.file.erb @ line 7 Cor#blimey!:\n\nError: Cannot open "not.found.file.erb" for reading./m
115
- Object.remove_const(:Cor)
116
- end
117
-
118
- it 'should show code window (not just method source) if parameter passed to whereami' do
119
- class Cor
120
- def blimey!
121
- mock_pry(binding, 'whereami 3').should =~ /class Cor/
122
- end
123
- end
124
- Cor.new.blimey!
125
- Object.remove_const(:Cor)
126
- end
127
-
128
- it 'should use Pry.config.default_window_size for window size when outside a method context' do
129
- old_size, Pry.config.default_window_size = Pry.config.default_window_size, 1
130
- :litella
131
- :pig
132
- out = mock_pry(binding, 'whereami')
133
- :punk
134
- :sanders
135
-
136
- out.should.not =~ /:litella/
137
- out.should =~ /:pig/
138
- out.should =~ /:punk/
139
- out.should.not =~ /:sanders/
140
-
141
- Pry.config.default_window_size = old_size
142
- end
143
-
144
- it "should work at the top level" do
145
- mock_pry(Pry.toplevel_binding, 'whereami').should =~ /At the top level/
146
- end
147
-
148
- it "should work inside a class" do
149
- mock_pry(Pry.binding_for(Pry), 'whereami').should =~ /Inside Pry/
150
- end
151
-
152
- it "should work inside an object" do
153
- mock_pry(Pry.binding_for(Object.new), 'whereami').should =~ /Inside #<Object/
154
- end
155
- end
156
-
157
- describe "exit" do
158
- it 'should pop a binding with exit' do
159
- b = Pry.binding_for(:outer)
160
- b.eval("x = :inner")
161
-
162
- redirect_pry_io(InputTester.new("cd x", "$inner = self;", "exit", "$outer = self", "exit-all")) do
163
- b.pry
164
- end
165
- $inner.should == :inner
166
- $outer.should == :outer
167
- end
168
-
169
- it 'should break out of the repl loop of Pry instance when binding_stack has only one binding with exit' do
170
- Pry.start(0, :input => StringIO.new("exit")).should == nil
171
- end
172
-
173
- it 'should break out of the repl loop of Pry instance when binding_stack has only one binding with exit, and return user-given value' do
174
- Pry.start(0, :input => StringIO.new("exit :john")).should == :john
175
- end
176
-
177
- it 'should break out the repl loop of Pry instance even after an exception in user-given value' do
178
- redirect_pry_io(InputTester.new("exit = 42", "exit")) do
179
- ins = Pry.new.tap { |v| v.repl(0).should == nil }
180
- end
181
- end
182
- end
183
-
184
- describe "jump-to" do
185
- before do
186
- @str_output = StringIO.new
187
- end
188
-
189
- it 'should jump to the proper binding index in the stack' do
190
- redirect_pry_io(InputTester.new("cd 1", "cd 2", "jump-to 1", "$blah = self", "exit-all")) do
191
- Pry.start(0)
192
- end
193
-
194
- $blah.should == 1
195
- end
196
-
197
- it 'should print error when trying to jump to a non-existent binding index' do
198
- redirect_pry_io(InputTester.new("cd 1", "cd 2", "jump-to 100", "exit-all"), @str_output) do
199
- Pry.start(0)
200
- end
201
-
202
- @str_output.string.should =~ /Invalid nest level/
203
- end
204
-
205
- it 'should print error when trying to jump to the same binding index' do
206
- redirect_pry_io(InputTester.new("cd 1", "cd 2", "jump-to 2", "exit-all"), @str_output) do
207
- Pry.new.repl(0)
208
- end
209
-
210
- @str_output.string.should =~ /Already/
211
- end
212
- end
213
-
214
- describe "exit-program" do
215
- it 'should raise SystemExit' do
216
- redirect_pry_io(InputTester.new("exit-program")) do
217
- lambda { Pry.new.repl(0).should == 0 }.should.raise SystemExit
218
- end
219
- end
220
-
221
- it 'should exit the program with the provided value' do
222
- redirect_pry_io(InputTester.new("exit-program 66")) do
223
- begin
224
- Pry.new.repl(0)
225
- rescue SystemExit => e
226
- e.status.should == 66
227
- end
228
- end
229
- end
230
- end
231
-
232
- describe "raise-up" do
233
- it "should raise the exception with raise-up" do
234
- redirect_pry_io(InputTester.new("raise NoMethodError", "raise-up NoMethodError")) do
235
- lambda { Pry.new.repl(0) }.should.raise NoMethodError
236
- end
237
- end
238
-
239
- it "should raise an unamed exception with raise-up" do
240
- redirect_pry_io(InputTester.new("raise 'stop'","raise-up 'noreally'")) do
241
- lambda { Pry.new.repl(0) }.should.raise RuntimeError, "noreally"
242
- end
243
- end
244
-
245
- it "should eat the exception at the last new pry instance on raise-up" do
246
- b = Pry.binding_for(:outer)
247
- b.eval("x = :inner")
248
-
249
- redirect_pry_io(InputTester.new("x.pry", "raise NoMethodError",
250
- "$inner = self", "raise-up NoMethodError", "$outer = self", "exit-all")) do
251
- b.pry
252
- end
253
- $inner.should == :inner
254
- $outer.should == :outer
255
- end
256
-
257
- it "should raise the most recently raised exception" do
258
- lambda { mock_pry("raise NameError, 'homographery'","raise-up") }.should.raise NameError, 'homographery'
259
- end
260
-
261
- it "should allow you to cd up and (eventually) out" do
262
- $deep = $inner = $outer = nil
263
- b = Pry.binding_for(:outer)
264
- b.eval("x = :inner")
265
- redirect_pry_io(InputTester.new("cd x", "raise NoMethodError","$inner = self",
266
- "deep = :deep", "cd deep","$deep = self","raise-up NoMethodError", "raise-up", "$outer = self", "raise-up", "exit-all")) do
267
- lambda { b.pry }.should.raise NoMethodError
268
- end
269
- $deep.should == :deep
270
- $inner.should == :inner
271
- $outer.should == :outer
272
- end
273
- end
274
-
275
- describe "raise-up!" do
276
- it "should jump immediately out of nested context's" do
277
- lambda { mock_pry("cd 1", "cd 2", "cd 3", "raise-up! 'fancy that...'") }.should.raise RuntimeError, 'fancy that...'
278
- end
279
- end
280
- end