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,34 @@
1
+ require 'helper'
2
+
3
+ describe "exit-all" do
4
+ it 'should break out of the repl loop of Pry instance and return nil' do
5
+ pry_tester(0).simulate_repl do |t|
6
+ t.eval 'exit-all'
7
+ end.should == nil
8
+ end
9
+
10
+ it 'should break out of the repl loop of Pry instance wth a user specified value' do
11
+ pry_tester(0).simulate_repl do |t|
12
+ t.eval "exit-all 'message'"
13
+ end.should == 'message'
14
+ end
15
+
16
+ it 'should break of the repl loop even if multiple bindings still on stack' do
17
+ pry_tester(0).simulate_repl do |t|
18
+ t.eval 'cd 1', 'cd 2', "exit-all 'message'"
19
+ end.should == 'message'
20
+ end
21
+
22
+ it 'binding_stack should be empty after breaking out of the repl loop' do
23
+ t = pry_tester(0) do
24
+ def binding_stack
25
+ @pry.binding_stack
26
+ end
27
+ end
28
+
29
+ t.simulate_repl do |t|
30
+ t.eval 'cd 1', 'cd 2', 'exit-all'
31
+ end
32
+ t.binding_stack.empty?.should == true
33
+ end
34
+ end
@@ -0,0 +1,19 @@
1
+ require 'helper'
2
+
3
+ describe "exit-program" do
4
+ it 'should raise SystemExit' do
5
+ proc {
6
+ pry_eval('exit-program')
7
+ }.should.raise SystemExit
8
+ end
9
+
10
+ it 'should exit the program with the provided value' do
11
+ begin
12
+ pry_eval 'exit-program 66'
13
+ rescue SystemExit => e
14
+ e.status.should == 66
15
+ else
16
+ raise "Failed to raise SystemExit"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,34 @@
1
+ require 'helper'
2
+
3
+ describe "exit" do
4
+ it 'should pop a binding with exit' do
5
+ pry_tester(:outer).simulate_repl do |t|
6
+ t.eval 'cd :inner'
7
+ t.eval('self').should == :inner
8
+ t.eval 'exit'
9
+ t.eval('self').should == :outer
10
+ t.eval 'exit-all'
11
+ end
12
+ end
13
+
14
+ it 'should break out of the repl loop of Pry instance when binding_stack has only one binding with exit' do
15
+ pry_tester(0).simulate_repl do |t|
16
+ t.eval 'exit'
17
+ end.should == nil
18
+ end
19
+
20
+ 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
21
+ pry_tester(0).simulate_repl do |t|
22
+ t.eval 'exit :john'
23
+ end.should == :john
24
+ end
25
+
26
+ it 'should break out the repl loop of Pry instance even after an exception in user-given value' do
27
+ pry_tester(0).simulate_repl do |t|
28
+ proc {
29
+ t.eval 'exit = 42'
30
+ }.should.raise(SyntaxError)
31
+ t.eval 'exit'
32
+ end.should == nil
33
+ end
34
+ end
@@ -4,7 +4,7 @@ require 'helper'
4
4
  # for C methods actually runs the methods - and since it runs ALL
5
5
  # methods (in an attempt to find a match) it runs 'exit' and aborts
6
6
  # the test, causing a failure. We should fix this in the future by
7
- # blacklisting certain methods for 1.8 MRI (such as exit, fork, and so on)
7
+ # blacklisting certain methods for 1.8 MRI (such as exit, fork, and so on)
8
8
  unless Pry::Helpers::BaseHelpers.mri_18?
9
9
  MyKlass = Class.new do
10
10
  def hello
@@ -13,26 +13,36 @@ unless Pry::Helpers::BaseHelpers.mri_18?
13
13
  def goodbye
14
14
  "jenny"
15
15
  end
16
+ def tea_tim?
17
+ "timothy"
18
+ end
19
+ def tea_time?
20
+ "polly"
21
+ end
16
22
  end
17
23
 
18
- describe "find-command" do
24
+ describe "find-method" do
19
25
  describe "find matching methods by name regex (-n option)" do
20
26
  it "should find a method by regex" do
21
- mock_pry("find-method hell MyKlass").should =~ /MyKlass.*?hello/m
27
+ pry_eval("find-method hell MyKlass").should =~
28
+ /MyKlass.*?hello/m
22
29
  end
23
30
 
24
31
  it "should NOT match a method that does not match the regex" do
25
- mock_pry("find-method hell MyKlass").should.not =~ /MyKlass.*?goodbye/m
32
+ pry_eval("find-method hell MyKlass").should.not =~
33
+ /MyKlass.*?goodbye/m
26
34
  end
27
35
  end
28
36
 
29
37
  describe "find matching methods by content regex (-c option)" do
30
38
  it "should find a method by regex" do
31
- mock_pry("find-method -c timothy MyKlass").should =~ /MyKlass.*?hello/m
39
+ pry_eval("find-method -c timothy MyKlass").should =~
40
+ /MyKlass.*?hello/m
32
41
  end
33
42
 
34
43
  it "should NOT match a method that does not match the regex" do
35
- mock_pry("find-method timothy MyKlass").should.not =~ /MyKlass.*?goodbye/m
44
+ pry_eval("find-method timothy MyKlass").should.not =~
45
+ /MyKlass.*?goodbye/m
36
46
  end
37
47
  end
38
48
 
@@ -42,7 +52,17 @@ unless Pry::Helpers::BaseHelpers.mri_18?
42
52
  raise "mooo"
43
53
  end
44
54
 
45
- mock_pry("find-method -c timothy MyKlass").should =~ /MyKlass.*?hello/m
55
+ pry_eval("find-method -c timothy MyKlass").should =~
56
+ /MyKlass.*?hello/m
57
+ end
58
+
59
+ it "should escape regexes correctly" do
60
+ good = /tea_time\?/
61
+ bad = /tea_tim\?/
62
+ pry_eval('find-method tea_time? MyKlass').should =~ good
63
+ pry_eval('find-method tea_time? MyKlass').should =~ good
64
+ pry_eval('find-method tea_time\? MyKlass').should.not =~ bad
65
+ pry_eval('find-method tea_time\? MyKlass').should =~ good
46
66
  end
47
67
  end
48
68
 
@@ -0,0 +1,26 @@
1
+ require 'helper'
2
+
3
+ describe "gem-list" do
4
+ # fixing bug for 1.8 compat
5
+ it 'should not raise when invoked' do
6
+ proc {
7
+ pry_eval(self, 'gem-list')
8
+ }.should.not.raise
9
+ end
10
+
11
+ it 'should work arglessly' do
12
+ list = pry_eval('gem-list')
13
+ list.should =~ /slop \(/
14
+ list.should =~ /bacon \(/
15
+ end
16
+
17
+ it 'should find arg' do
18
+ prylist = pry_eval('gem-list slop')
19
+ prylist.should =~ /slop \(/
20
+ prylist.should.not =~ /bacon/
21
+ end
22
+
23
+ it 'should return non-results as silence' do
24
+ pry_eval('gem-list aoeuoueouaou').should.empty?
25
+ end
26
+ end
@@ -0,0 +1,75 @@
1
+ # These tests are out of date.
2
+ # THey need to be updated for the new 'gist' API, but im too sleepy to
3
+ # do that now.
4
+
5
+
6
+ # require 'helper'
7
+
8
+ # describe 'gist' do
9
+ # before do
10
+ # Pad.jist_calls = {}
11
+ # end
12
+
13
+ # # In absence of normal mocking, just monkeysmash these with no undoing after.
14
+ # module Jist
15
+ # class << self
16
+ # def login!; Pad.jist_calls[:login!] = true end
17
+ # def gist(*args)
18
+ # Pad.jist_calls[:gist_args] = args
19
+ # {'html_url' => 'http://gist.blahblah'}
20
+ # end
21
+ # def copy(content); Pad.jist_calls[:copy_args] = content end
22
+ # end
23
+ # end
24
+
25
+ # module Pry::Gist
26
+ # # a) The actual require fails for jruby for some odd reason.
27
+ # # b) 100% of jist should be stubbed by the above, so this ensures that.
28
+ # def self.require_jist; 'nope' end
29
+ # end
30
+
31
+ # it 'nominally logs in' do
32
+ # pry_eval 'gist --login'
33
+ # Pad.jist_calls[:login!].should.not.be.nil
34
+ # end
35
+
36
+ # EXAMPLE_REPL_METHOD = <<-EOT
37
+ # # docdoc
38
+ # def my_method
39
+ # # line 1
40
+ # 'line 2'
41
+ # line 3
42
+ # Line.four
43
+ # end
44
+ # EOT
45
+
46
+ # RANDOM_COUPLE_OF_LINES = %w(a=1 b=2)
47
+ # run_case = proc do |sym|
48
+ # actual_command = Pry::Gist.example_code(sym)
49
+ # pry_eval EXAMPLE_REPL_METHOD, RANDOM_COUPLE_OF_LINES, actual_command
50
+ # end
51
+
52
+ # it 'deduces filenames' do
53
+ # Pry::Gist::INVOCATIONS.keys.each do |e|
54
+ # run_case.call(e)
55
+ # if Pad.jist_calls[:gist_args]
56
+ # text, args = Pad.jist_calls[:gist_args]
57
+ # args[:filename].should.not == '(pry)'
58
+ # end
59
+ # Pad.jist_calls[:copy_args].should.not.be.nil
60
+ # end
61
+ # end
62
+
63
+ # it 'equates aliae' do
64
+ # run_case.call(:clipit).should == run_case.call(:cliponly)
65
+ # run_case.call(:jist).should == run_case.call(:class)
66
+ # end
67
+
68
+ # it 'has a reasonable --help' do
69
+ # help = pry_eval('gist --help')
70
+ # Pry::Gist::INVOCATIONS.keys.each do |e|
71
+ # help.should.include? Pry::Gist.example_code(e)
72
+ # help.should.include? Pry::Gist.example_description(e)
73
+ # end
74
+ # end
75
+ # end
@@ -1,11 +1,10 @@
1
1
  require 'helper'
2
2
 
3
- describe "'help' command" do
3
+ describe "help" do
4
4
  before do
5
5
  @oldset = Pry.config.commands
6
6
  @set = Pry.config.commands = Pry::CommandSet.new do
7
- import Pry::DefaultCommands::Help
8
- import Pry::DefaultCommands::Ls
7
+ import Pry::Commands
9
8
  end
10
9
  end
11
10
 
@@ -14,17 +13,17 @@ describe "'help' command" do
14
13
  end
15
14
 
16
15
  it 'should display help for a specific command' do
17
- mock_pry('help ls').should =~ /Usage: ls/
16
+ pry_eval('help ls').should =~ /Usage: ls/
18
17
  end
19
18
 
20
19
  it 'should display help for a regex command with a "listing"' do
21
20
  @set.command /bar(.*)/, "Test listing", :listing => "foo" do; end
22
- mock_pry('help foo').should =~ /Test listing/
21
+ pry_eval('help foo').should =~ /Test listing/
23
22
  end
24
23
 
25
24
  it 'should display help for a command with a spaces in its name' do
26
- @set.command "command with spaces", "description of a command with spaces" do; end
27
- mock_pry('help "command with spaces"').should =~ /description of a command with spaces/
25
+ @set.command "cmd with spaces", "desc of a cmd with spaces" do; end
26
+ pry_eval('help "cmd with spaces"').should =~ /desc of a cmd with spaces/
28
27
  end
29
28
 
30
29
  it 'should display help for all commands with a description' do
@@ -33,7 +32,7 @@ describe "'help' command" do
33
32
  @set.command "c" do;end
34
33
  @set.command "d", "" do;end
35
34
 
36
- output = mock_pry('help')
35
+ output = pry_eval('help')
37
36
  output.should =~ /Test listing/
38
37
  output.should =~ /description for b/
39
38
  output.should =~ /No description/
@@ -45,7 +44,7 @@ describe "'help' command" do
45
44
  @set.command 'maa', "Mooerizes" do; end
46
45
  @set.command 'baa', "Booerizes" do; end
47
46
 
48
- doc = mock_pry('help')
47
+ doc = pry_eval('help')
49
48
 
50
49
  order = [doc.index("baa"),
51
50
  doc.index("faa"),
@@ -0,0 +1,181 @@
1
+ require 'helper'
2
+
3
+ describe "hist" do
4
+ before do
5
+ Pry.history.clear
6
+ @hist = Pry.history
7
+
8
+ @str_output = StringIO.new
9
+ @t = pry_tester do
10
+ # For looking at what hist pushes into the input stack. The
11
+ # implementation of this helper will definitely have to change at some
12
+ # point.
13
+ def next_input
14
+ @pry.input.string
15
+ end
16
+ end
17
+ end
18
+
19
+ it 'should display the correct history' do
20
+ @hist.push "hello"
21
+ @hist.push "world"
22
+
23
+ @t.eval('hist').should =~ /hello\n.*world/
24
+ end
25
+
26
+ it 'should replay history correctly (single item)' do
27
+ o = Object.new
28
+ @hist.push "@x = 10"
29
+ @hist.push "@y = 20"
30
+ @hist.push "@z = 30"
31
+
32
+ @t.context = o
33
+ @t.eval 'hist --replay -1'
34
+
35
+ @t.next_input.should == "@z = 30\n"
36
+ end
37
+
38
+ it 'should replay a range of history correctly (range of items)' do
39
+ o = Object.new
40
+ @hist.push "@x = 10"
41
+ @hist.push "@y = 20"
42
+
43
+ @t.context = o
44
+ @t.eval 'hist --replay 0..2'
45
+
46
+ @t.next_input.should == "@x = 10\n@y = 20\n"
47
+ end
48
+
49
+ # this is to prevent a regression where input redirection is
50
+ # replaced by just appending to `eval_string`
51
+ it 'should replay a range of history correctly (range of commands)' do
52
+ o = Object.new
53
+ @hist.push "cd 1"
54
+ @hist.push "cd 2"
55
+ redirect_pry_io(InputTester.new("hist --replay 0..2", "Pad.stack = _pry_.binding_stack.dup", "exit-all")) do
56
+ o.pry
57
+ end
58
+ o = Pad.stack[-2..-1].map { |v| v.eval('self') }
59
+ o.should == [1, 2]
60
+ Pad.clear
61
+ end
62
+
63
+ it 'should grep for correct lines in history' do
64
+ @hist.push "abby"
65
+ @hist.push "box"
66
+ @hist.push "button"
67
+ @hist.push "pepper"
68
+ @hist.push "orange"
69
+ @hist.push "grape"
70
+ @hist.push "def blah 1"
71
+ @hist.push "def boink 2"
72
+ @hist.push "place holder"
73
+
74
+ @t.eval('hist --grep o').should =~ /\d:.*?box\n\d:.*?button\n\d:.*?orange/
75
+
76
+ # test more than one word in a regex match (def blah)
77
+ @t.eval('hist --grep def blah').should =~ /def blah 1/
78
+
79
+ # test more than one word with leading white space in a regex match (def boink)
80
+ @t.eval('hist --grep def boink').should =~ /def boink 2/
81
+ end
82
+
83
+ it 'should return last N lines in history with --tail switch' do
84
+ ("a".."z").each do |v|
85
+ @hist.push v
86
+ end
87
+
88
+ out = @t.eval 'hist --tail 3'
89
+ out.each_line.count.should == 3
90
+ out.should =~ /x\n\d+:.*y\n\d+:.*z/
91
+ end
92
+
93
+ it 'should apply --tail after --grep' do
94
+ @hist.push "print 1"
95
+ @hist.push "print 2"
96
+ @hist.push "puts 3"
97
+ @hist.push "print 4"
98
+ @hist.push "puts 5"
99
+
100
+ out = @t.eval 'hist --tail 2 --grep print'
101
+ out.each_line.count.should == 2
102
+ out.should =~ /\d:.*?print 2\n\d:.*?print 4/
103
+ end
104
+
105
+ it 'should apply --head after --grep' do
106
+ @hist.push "puts 1"
107
+ @hist.push "print 2"
108
+ @hist.push "puts 3"
109
+ @hist.push "print 4"
110
+ @hist.push "print 5"
111
+
112
+ out = @t.eval 'hist --head 2 --grep print'
113
+ out.each_line.count.should == 2
114
+ out.should =~ /\d:.*?print 2\n\d:.*?print 4/
115
+ end
116
+
117
+ # strangeness in this test is due to bug in Readline::HISTORY not
118
+ # always registering first line of input
119
+ it 'should return first N lines in history with --head switch' do
120
+ ("a".."z").each do |v|
121
+ @hist.push v
122
+ end
123
+
124
+ out = @t.eval 'hist --head 4'
125
+ out.each_line.count.should == 4
126
+ out.should =~ /a\n\d+:.*b\n\d+:.*c/
127
+ end
128
+
129
+ # strangeness in this test is due to bug in Readline::HISTORY not
130
+ # always registering first line of input
131
+ it 'should show lines between lines A and B with the --show switch' do
132
+ ("a".."z").each do |v|
133
+ @hist.push v
134
+ end
135
+
136
+ out = @t.eval 'hist --show 1..4'
137
+ out.each_line.count.should == 4
138
+ out.should =~ /b\n\d+:.*c\n\d+:.*d/
139
+ end
140
+
141
+ it "should store a call with `--replay` flag" do
142
+ redirect_pry_io(InputTester.new(":banzai", "hist --replay 1",
143
+ "hist", "exit-all"), @str_output) do
144
+ Pry.start
145
+ end
146
+
147
+ @str_output.string.should =~ /hist --replay 1/
148
+ end
149
+
150
+ it "should not contain lines produced by `--replay` flag" do
151
+ redirect_pry_io(InputTester.new(":banzai", ":geronimo", ":huzzah",
152
+ "hist --replay 1..3", "hist",
153
+ "exit-all"), @str_output) do
154
+ Pry.start
155
+ end
156
+
157
+ @str_output.string.each_line.to_a.reject { |line| line.start_with?("=>") }.size.should == 4
158
+ @str_output.string.each_line.to_a.last.should =~ /hist --replay 1\.\.3/
159
+ @str_output.string.each_line.to_a[-2].should =~ /:huzzah/
160
+ end
161
+
162
+ it "should raise CommandError when index of `--replay` points out to another `hist --replay`" do
163
+ redirect_pry_io(InputTester.new(":banzai", "hist --replay 1",
164
+ "hist --replay 2", "exit-all"), @str_output) do
165
+ Pry.start
166
+ end
167
+
168
+ @str_output.string.should =~ /Replay index 2 points out to another replay call: `hist --replay 1`/
169
+ end
170
+
171
+ it "should disallow execution of `--replay <i>` when CommandError raised" do
172
+ redirect_pry_io(InputTester.new("a = 0", "a += 1", "hist --replay 2",
173
+ "hist --replay 3", "'a is ' + a.to_s",
174
+ "hist", "exit-all"), @str_output) do
175
+ Pry.start
176
+ end
177
+
178
+ @str_output.string.each_line.to_a.reject { |line| line !~ /\A\d/ }.size.should == 5
179
+ @str_output.string.should =~ /a is 2/
180
+ end
181
+ end