pry 0.9.8.4 → 0.9.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/.gitignore +1 -0
  2. data/CHANGELOG +26 -0
  3. data/README.markdown +3 -3
  4. data/lib/pry.rb +9 -1
  5. data/lib/pry/code.rb +93 -0
  6. data/lib/pry/command.rb +35 -22
  7. data/lib/pry/command_set.rb +97 -67
  8. data/lib/pry/config.rb +63 -10
  9. data/lib/pry/core_extensions.rb +24 -18
  10. data/lib/pry/default_commands/context.rb +72 -12
  11. data/lib/pry/default_commands/easter_eggs.rb +4 -0
  12. data/lib/pry/default_commands/editing.rb +43 -15
  13. data/lib/pry/default_commands/find_method.rb +171 -0
  14. data/lib/pry/default_commands/hist.rb +10 -6
  15. data/lib/pry/default_commands/introspection.rb +183 -30
  16. data/lib/pry/default_commands/ls.rb +77 -7
  17. data/lib/pry/default_commands/misc.rb +1 -0
  18. data/lib/pry/default_commands/navigating_pry.rb +1 -8
  19. data/lib/pry/helpers/base_helpers.rb +10 -2
  20. data/lib/pry/helpers/command_helpers.rb +23 -40
  21. data/lib/pry/helpers/documentation_helpers.rb +65 -0
  22. data/lib/pry/indent.rb +17 -4
  23. data/lib/pry/method.rb +61 -45
  24. data/lib/pry/pry_class.rb +9 -3
  25. data/lib/pry/pry_instance.rb +99 -65
  26. data/lib/pry/rbx_method.rb +2 -9
  27. data/lib/pry/version.rb +1 -1
  28. data/lib/pry/wrapped_module.rb +236 -1
  29. data/pry.gemspec +5 -5
  30. data/test/helper.rb +22 -0
  31. data/test/test_command.rb +29 -0
  32. data/test/test_command_integration.rb +193 -10
  33. data/test/test_command_set.rb +82 -17
  34. data/test/test_default_commands/test_cd.rb +16 -0
  35. data/test/test_default_commands/test_context.rb +61 -0
  36. data/test/test_default_commands/test_documentation.rb +163 -43
  37. data/test/test_default_commands/test_find_method.rb +42 -0
  38. data/test/test_default_commands/test_input.rb +32 -0
  39. data/test/test_default_commands/test_introspection.rb +50 -197
  40. data/test/test_default_commands/test_ls.rb +22 -0
  41. data/test/test_default_commands/test_show_source.rb +306 -0
  42. data/test/test_pry.rb +3 -3
  43. data/test/test_pry_defaults.rb +21 -0
  44. data/test/test_sticky_locals.rb +81 -1
  45. data/test/test_syntax_checking.rb +7 -6
  46. metadata +22 -14
@@ -2,20 +2,20 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "pry"
5
- s.version = "0.9.8.4"
5
+ s.version = "0.9.9"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["John Mair (banisterfiend)"]
9
- s.date = "2012-03-06"
9
+ s.date = "2012-04-18"
10
10
  s.description = "An IRB alternative and runtime developer console"
11
11
  s.email = "jrmair@gmail.com"
12
12
  s.executables = ["pry"]
13
- s.files = [".document", ".gemtest", ".gitignore", ".travis.yml", ".yardopts", "CHANGELOG", "CONTRIBUTORS", "Gemfile", "LICENSE", "README.markdown", "Rakefile", "TODO", "bin/pry", "examples/example_basic.rb", "examples/example_command_override.rb", "examples/example_commands.rb", "examples/example_hooks.rb", "examples/example_image_edit.rb", "examples/example_input.rb", "examples/example_input2.rb", "examples/example_output.rb", "examples/example_print.rb", "examples/example_prompt.rb", "examples/helper.rb", "lib/pry.rb", "lib/pry/cli.rb", "lib/pry/code.rb", "lib/pry/command.rb", "lib/pry/command_set.rb", "lib/pry/commands.rb", "lib/pry/completion.rb", "lib/pry/config.rb", "lib/pry/core_extensions.rb", "lib/pry/custom_completions.rb", "lib/pry/default_commands/cd.rb", "lib/pry/default_commands/commands.rb", "lib/pry/default_commands/context.rb", "lib/pry/default_commands/easter_eggs.rb", "lib/pry/default_commands/editing.rb", "lib/pry/default_commands/gems.rb", "lib/pry/default_commands/help.rb", "lib/pry/default_commands/hist.rb", "lib/pry/default_commands/input_and_output.rb", "lib/pry/default_commands/introspection.rb", "lib/pry/default_commands/ls.rb", "lib/pry/default_commands/misc.rb", "lib/pry/default_commands/navigating_pry.rb", "lib/pry/extended_commands/experimental.rb", "lib/pry/helpers.rb", "lib/pry/helpers/base_helpers.rb", "lib/pry/helpers/command_helpers.rb", "lib/pry/helpers/options_helpers.rb", "lib/pry/helpers/text.rb", "lib/pry/history.rb", "lib/pry/history_array.rb", "lib/pry/hooks.rb", "lib/pry/indent.rb", "lib/pry/method.rb", "lib/pry/plugins.rb", "lib/pry/pry_class.rb", "lib/pry/pry_instance.rb", "lib/pry/rbx_method.rb", "lib/pry/rbx_path.rb", "lib/pry/version.rb", "lib/pry/wrapped_module.rb", "man/pry.1", "man/pry.1.html", "man/pry.1.ronn", "pry.gemspec", "test/helper.rb", "test/test_cli.rb", "test/test_code.rb", "test/test_command.rb", "test/test_command_helpers.rb", "test/test_command_integration.rb", "test/test_command_set.rb", "test/test_completion.rb", "test/test_default_commands/test_context.rb", "test/test_default_commands/test_documentation.rb", "test/test_default_commands/test_gems.rb", "test/test_default_commands/test_help.rb", "test/test_default_commands/test_input.rb", "test/test_default_commands/test_introspection.rb", "test/test_default_commands/test_ls.rb", "test/test_default_commands/test_shell.rb", "test/test_exception_whitelist.rb", "test/test_history_array.rb", "test/test_hooks.rb", "test/test_indent.rb", "test/test_input_stack.rb", "test/test_method.rb", "test/test_pry.rb", "test/test_pry_defaults.rb", "test/test_pry_history.rb", "test/test_pry_output.rb", "test/test_sticky_locals.rb", "test/test_syntax_checking.rb", "test/test_wrapped_module.rb", "test/testrc", "test/testrcbad", "wiki/Customizing-pry.md", "wiki/Home.md"]
13
+ s.files = [".document", ".gemtest", ".gitignore", ".travis.yml", ".yardopts", "CHANGELOG", "CONTRIBUTORS", "Gemfile", "LICENSE", "README.markdown", "Rakefile", "TODO", "bin/pry", "examples/example_basic.rb", "examples/example_command_override.rb", "examples/example_commands.rb", "examples/example_hooks.rb", "examples/example_image_edit.rb", "examples/example_input.rb", "examples/example_input2.rb", "examples/example_output.rb", "examples/example_print.rb", "examples/example_prompt.rb", "examples/helper.rb", "lib/pry.rb", "lib/pry/cli.rb", "lib/pry/code.rb", "lib/pry/command.rb", "lib/pry/command_set.rb", "lib/pry/commands.rb", "lib/pry/completion.rb", "lib/pry/config.rb", "lib/pry/core_extensions.rb", "lib/pry/custom_completions.rb", "lib/pry/default_commands/cd.rb", "lib/pry/default_commands/commands.rb", "lib/pry/default_commands/context.rb", "lib/pry/default_commands/easter_eggs.rb", "lib/pry/default_commands/editing.rb", "lib/pry/default_commands/find_method.rb", "lib/pry/default_commands/gems.rb", "lib/pry/default_commands/help.rb", "lib/pry/default_commands/hist.rb", "lib/pry/default_commands/input_and_output.rb", "lib/pry/default_commands/introspection.rb", "lib/pry/default_commands/ls.rb", "lib/pry/default_commands/misc.rb", "lib/pry/default_commands/navigating_pry.rb", "lib/pry/extended_commands/experimental.rb", "lib/pry/helpers.rb", "lib/pry/helpers/base_helpers.rb", "lib/pry/helpers/command_helpers.rb", "lib/pry/helpers/documentation_helpers.rb", "lib/pry/helpers/options_helpers.rb", "lib/pry/helpers/text.rb", "lib/pry/history.rb", "lib/pry/history_array.rb", "lib/pry/hooks.rb", "lib/pry/indent.rb", "lib/pry/method.rb", "lib/pry/plugins.rb", "lib/pry/pry_class.rb", "lib/pry/pry_instance.rb", "lib/pry/rbx_method.rb", "lib/pry/rbx_path.rb", "lib/pry/version.rb", "lib/pry/wrapped_module.rb", "man/pry.1", "man/pry.1.html", "man/pry.1.ronn", "pry.gemspec", "test/helper.rb", "test/test_cli.rb", "test/test_code.rb", "test/test_command.rb", "test/test_command_helpers.rb", "test/test_command_integration.rb", "test/test_command_set.rb", "test/test_completion.rb", "test/test_default_commands/test_cd.rb", "test/test_default_commands/test_context.rb", "test/test_default_commands/test_documentation.rb", "test/test_default_commands/test_find_method.rb", "test/test_default_commands/test_gems.rb", "test/test_default_commands/test_help.rb", "test/test_default_commands/test_input.rb", "test/test_default_commands/test_introspection.rb", "test/test_default_commands/test_ls.rb", "test/test_default_commands/test_shell.rb", "test/test_default_commands/test_show_source.rb", "test/test_exception_whitelist.rb", "test/test_history_array.rb", "test/test_hooks.rb", "test/test_indent.rb", "test/test_input_stack.rb", "test/test_method.rb", "test/test_pry.rb", "test/test_pry_defaults.rb", "test/test_pry_history.rb", "test/test_pry_output.rb", "test/test_sticky_locals.rb", "test/test_syntax_checking.rb", "test/test_wrapped_module.rb", "test/testrc", "test/testrcbad", "wiki/Customizing-pry.md", "wiki/Home.md"]
14
14
  s.homepage = "http://pry.github.com"
15
15
  s.require_paths = ["lib"]
16
- s.rubygems_version = "1.8.16"
16
+ s.rubygems_version = "1.8.12"
17
17
  s.summary = "An IRB alternative and runtime developer console"
18
- s.test_files = ["test/helper.rb", "test/test_cli.rb", "test/test_code.rb", "test/test_command.rb", "test/test_command_helpers.rb", "test/test_command_integration.rb", "test/test_command_set.rb", "test/test_completion.rb", "test/test_default_commands/test_context.rb", "test/test_default_commands/test_documentation.rb", "test/test_default_commands/test_gems.rb", "test/test_default_commands/test_help.rb", "test/test_default_commands/test_input.rb", "test/test_default_commands/test_introspection.rb", "test/test_default_commands/test_ls.rb", "test/test_default_commands/test_shell.rb", "test/test_exception_whitelist.rb", "test/test_history_array.rb", "test/test_hooks.rb", "test/test_indent.rb", "test/test_input_stack.rb", "test/test_method.rb", "test/test_pry.rb", "test/test_pry_defaults.rb", "test/test_pry_history.rb", "test/test_pry_output.rb", "test/test_sticky_locals.rb", "test/test_syntax_checking.rb", "test/test_wrapped_module.rb", "test/testrc", "test/testrcbad"]
18
+ s.test_files = ["test/helper.rb", "test/test_cli.rb", "test/test_code.rb", "test/test_command.rb", "test/test_command_helpers.rb", "test/test_command_integration.rb", "test/test_command_set.rb", "test/test_completion.rb", "test/test_default_commands/test_cd.rb", "test/test_default_commands/test_context.rb", "test/test_default_commands/test_documentation.rb", "test/test_default_commands/test_find_method.rb", "test/test_default_commands/test_gems.rb", "test/test_default_commands/test_help.rb", "test/test_default_commands/test_input.rb", "test/test_default_commands/test_introspection.rb", "test/test_default_commands/test_ls.rb", "test/test_default_commands/test_shell.rb", "test/test_default_commands/test_show_source.rb", "test/test_exception_whitelist.rb", "test/test_history_array.rb", "test/test_hooks.rb", "test/test_indent.rb", "test/test_input_stack.rb", "test/test_method.rb", "test/test_pry.rb", "test/test_pry_defaults.rb", "test/test_pry_history.rb", "test/test_pry_output.rb", "test/test_sticky_locals.rb", "test/test_syntax_checking.rb", "test/test_wrapped_module.rb", "test/testrc", "test/testrcbad"]
19
19
 
20
20
  if s.respond_to? :specification_version then
21
21
  s.specification_version = 3
@@ -24,6 +24,28 @@ ensure
24
24
  Thread.current[:__pry_local__] = nil
25
25
  end
26
26
 
27
+ def constant_scope(*names)
28
+ names.each do |name|
29
+ Object.remove_const name if Object.const_defined?(name)
30
+ end
31
+
32
+ yield
33
+ ensure
34
+ names.each do |name|
35
+ Object.remove_const name if Object.const_defined?(name)
36
+ end
37
+ end
38
+
39
+ def mri18_and_no_real_source_location?
40
+ Pry::Helpers::BaseHelpers.mri_18? && !(Method.instance_method(:source_location).owner == Method)
41
+ end
42
+
43
+ # used by test_show_source.rb and test_documentation.rb
44
+ class TestClassForShowSource
45
+ def alpha
46
+ end
47
+ end
48
+
27
49
  # in case the tests call reset_defaults, ensure we reset them to
28
50
  # amended (test friendly) values
29
51
  class << Pry
@@ -594,4 +594,33 @@ describe "Pry::Command" do
594
594
  end
595
595
  end
596
596
  end
597
+
598
+ describe "commands made with custom sub-classes" do
599
+ before do
600
+
601
+ class MyTestCommand < Pry::ClassCommand
602
+ match /my-*test/
603
+ description "So just how many sound technicians does it take to change a lightbulb? 1? 2? 3? 1-2-3? Testing?"
604
+ options :shellwords => false, :listing => "my-test"
605
+
606
+ def process
607
+ output.puts command_name * 2
608
+ end
609
+ end
610
+
611
+ Pry.commands.add_command MyTestCommand
612
+ end
613
+
614
+ after do
615
+ Pry.commands.delete 'my-test'
616
+ end
617
+
618
+ it "should allow creating custom sub-classes of Pry::Command" do
619
+ mock_pry("my---test").should =~ /my-testmy-test/
620
+ end
621
+
622
+ it "should show the source of the process method" do
623
+ mock_pry("show-command my-test").should =~ /output.puts command_name/
624
+ end
625
+ end
597
626
  end
@@ -1,5 +1,117 @@
1
1
  require 'helper'
2
2
  describe "commands" do
3
+
4
+ describe "alias_command" do
5
+ it 'should make an aliasd command behave like its original' do
6
+ set = Pry::CommandSet.new do
7
+ command "test-command" do
8
+ output.puts "testing 1, 2, 3"
9
+ end
10
+ alias_command "test-alias", "test-command"
11
+ end
12
+ redirect_pry_io(InputTester.new("test-alias"), out1 = StringIO.new) do
13
+ Pry.start self, :commands => set
14
+ end
15
+
16
+ redirect_pry_io(InputTester.new("test-command"), out2 = StringIO.new) do
17
+ Pry.start self, :commands => set
18
+ end
19
+
20
+ out1.string.should == out2.string
21
+ end
22
+
23
+ it 'should pass on arguments to original' do
24
+ set = Pry::CommandSet.new do
25
+ command "test-command" do |*args|
26
+ output.puts "testing #{args.join(' ')}"
27
+ end
28
+ alias_command "test-alias", "test-command"
29
+ end
30
+
31
+ redirect_pry_io(InputTester.new("test-command hello baby duck"), out1 = StringIO.new) do
32
+ Pry.start self, :commands => set
33
+ end
34
+
35
+ out1.string.should =~ /hello baby duck/
36
+
37
+ redirect_pry_io(InputTester.new("test-alias hello baby duck"), out2 = StringIO.new) do
38
+ Pry.start self, :commands => set
39
+ end
40
+
41
+ out2.string.should == out1.string
42
+ end
43
+
44
+ it 'should pass option arguments to original' do
45
+ set = Pry::CommandSet.new do
46
+ import Pry::Commands
47
+ alias_command "test-alias", "ls"
48
+ end
49
+
50
+ obj = Class.new { @x = 10 }
51
+ redirect_pry_io(InputTester.new("ls -i"), out1 = StringIO.new) do
52
+ Pry.start obj, :commands => set
53
+ end
54
+
55
+ out1.string.should =~ /@x/
56
+
57
+ redirect_pry_io(InputTester.new("test-alias -i"), out2 = StringIO.new) do
58
+ Pry.start obj, :commands => set
59
+ end
60
+
61
+ out2.string.should == out1.string
62
+ end
63
+
64
+ it 'should pass option arguments to original with additional parameters' do
65
+ set = Pry::CommandSet.new do
66
+ import Pry::Commands
67
+ alias_command "test-alias", "ls -M"
68
+ end
69
+
70
+ obj = Class.new { @x = Class.new { define_method(:plymouth) {} } }
71
+ redirect_pry_io(InputTester.new("ls -M @x"), out1 = StringIO.new) do
72
+ Pry.start obj, :commands => set
73
+ end
74
+
75
+ out1.string.should =~ /plymouth/
76
+
77
+ redirect_pry_io(InputTester.new("test-alias @x"), out2 = StringIO.new) do
78
+ Pry.start obj, :commands => set
79
+ end
80
+
81
+ out2.string.should == out1.string
82
+ end
83
+
84
+ it 'should be able to alias a regex command' do
85
+ set = Pry::CommandSet.new do
86
+ command /du.k/ do
87
+ output.puts "ducky"
88
+ end
89
+ alias_command "test-alias", "duck"
90
+ end
91
+
92
+ redirect_pry_io(InputTester.new("test-alias"), out1 = StringIO.new) do
93
+ Pry.start self, :commands => set
94
+ end
95
+
96
+ out1.string.should =~ /ducky/
97
+ end
98
+
99
+ it 'should be able to make the alias a regex' do
100
+ set = Pry::CommandSet.new do
101
+ command /du.k/ do
102
+ output.puts "ducky"
103
+ end
104
+ alias_command /test-ali.s/, "duck"
105
+ end
106
+
107
+ redirect_pry_io(InputTester.new("test-alias"), out1 = StringIO.new) do
108
+ Pry.start self, :commands => set
109
+ end
110
+
111
+ out1.string.should =~ /ducky/
112
+ end
113
+ end
114
+
3
115
  it 'should interpolate ruby code into commands' do
4
116
  klass = Pry::CommandSet.new do
5
117
  command "hello", "", :keep_retval => true do |arg|
@@ -199,7 +311,7 @@ describe "commands" do
199
311
  str_output = StringIO.new
200
312
  Pry.new(:input => StringIO.new("hello\n"), :output => str_output, :commands => klass).rep
201
313
  (str_output.string =~ /:kept_hello/).should == nil
202
- str_output.string !~ /=>/
314
+ str_output.string !~ /=>/
203
315
  end
204
316
 
205
317
  it 'should define a command that keeps its return value even when nil' do
@@ -211,7 +323,7 @@ describe "commands" do
211
323
  str_output = StringIO.new
212
324
  Pry.new(:input => StringIO.new("hello\n"), :output => str_output, :commands => klass).rep
213
325
  str_output.string.should =~ /nil/
214
- str_output.string.should =~ /=>/
326
+ str_output.string.should =~ /=>/
215
327
  end
216
328
 
217
329
  it 'should define a command that keeps its return value but does not return when value is void' do
@@ -299,14 +411,6 @@ describe "commands" do
299
411
  klass.commands.include?("v").should == true
300
412
  end
301
413
 
302
- it 'should alias a command with another command' do
303
- klass = Pry::CommandSet.new do
304
- import Pry::DefaultCommands::Help
305
- alias_command "help2", "help"
306
- end
307
- klass.commands["help2"].block.should == klass.commands["help"].block
308
- end
309
-
310
414
  it 'should change description of a command using desc' do
311
415
  klass = Pry::CommandSet.new do; import Pry::DefaultCommands::Help; end
312
416
  orig = klass.commands["help"].description
@@ -317,6 +421,83 @@ describe "commands" do
317
421
  klass.commands["help"].description.should == "blah"
318
422
  end
319
423
 
424
+
425
+ describe "Pry::Command#run" do
426
+ it 'should allow running of commands with following whitespace' do
427
+ $_scratch = Object.new
428
+ o = Object.new
429
+
430
+ set = Pry::CommandSet.new do
431
+ import Pry::Commands
432
+ command "test-run" do
433
+ run "cd / "
434
+ end
435
+ end
436
+ redirect_pry_io(InputTester.new("cd 1/2/3/4/5/6/$_scratch",
437
+ "@nesting1 = _pry_.binding_stack.size",
438
+ "test-run",
439
+ "@obj = self",
440
+ "@nesting2 = _pry_.binding_stack.size",
441
+ "exit-all")) do
442
+ Pry.start(o, :commands => set)
443
+ end
444
+
445
+ $_scratch.instance_variable_get(:@nesting1).should == 8
446
+ o.instance_variable_get(:@obj).should == o
447
+ o.instance_variable_get(:@nesting2).should == 1
448
+ $_scratch = nil
449
+ end
450
+
451
+ it 'should allow running of cd command when contained in a single string' do
452
+ $_scratch = Object.new
453
+ o = Object.new
454
+
455
+ set = Pry::CommandSet.new do
456
+ import Pry::Commands
457
+ command "test-run" do
458
+ run "cd /"
459
+ end
460
+ end
461
+ redirect_pry_io(InputTester.new("cd 1/2/3/4/5/6/$_scratch",
462
+ "@nesting1 = _pry_.binding_stack.size",
463
+ "test-run",
464
+ "@obj = self",
465
+ "@nesting2 = _pry_.binding_stack.size",
466
+ "exit-all")) do
467
+ Pry.start(o, :commands => set)
468
+ end
469
+
470
+ $_scratch.instance_variable_get(:@nesting1).should == 8
471
+ o.instance_variable_get(:@obj).should == o
472
+ o.instance_variable_get(:@nesting2).should == 1
473
+ $_scratch = nil
474
+ end
475
+
476
+ it 'should allow running of cd command when split into array' do
477
+ $_scratch = Object.new
478
+ o = Object.new
479
+
480
+ set = Pry::CommandSet.new do
481
+ import Pry::Commands
482
+ command "test-run" do
483
+ run "cd", "/"
484
+ end
485
+ end
486
+ redirect_pry_io(InputTester.new("cd 1/2/3/4/5/6/$_scratch",
487
+ "@nesting1 = _pry_.binding_stack.size",
488
+ "test-run",
489
+ "@obj = self",
490
+ "@nesting2 = _pry_.binding_stack.size",
491
+ "exit-all")) do
492
+ Pry.start(o, :commands => set)
493
+ end
494
+
495
+ $_scratch.instance_variable_get(:@nesting1).should == 8
496
+ o.instance_variable_get(:@obj).should == o
497
+ o.instance_variable_get(:@nesting2).should == 1
498
+ $_scratch = nil
499
+ end
500
+
320
501
  it 'should run a command from within a command' do
321
502
  klass = Pry::CommandSet.new do
322
503
  command "v" do
@@ -376,6 +557,8 @@ describe "commands" do
376
557
  end
377
558
  end
378
559
 
560
+ end
561
+
379
562
  it 'should enable an inherited method to access opts and output and target, due to instance_exec' do
380
563
  klass = Pry::CommandSet.new do
381
564
  command "v" do
@@ -80,6 +80,28 @@ describe Pry::CommandSet do
80
80
  }.should.raise(Pry::NoCommandError)
81
81
  end
82
82
 
83
+ it 'should return command set after import' do
84
+ run = false
85
+
86
+ other_set = Pry::CommandSet.new do
87
+ command('foo') { run = true }
88
+ command('bar') {}
89
+ end
90
+
91
+ @set.import(other_set).should == @set
92
+ end
93
+
94
+ it 'should return command set after import_from' do
95
+ run = false
96
+
97
+ other_set = Pry::CommandSet.new do
98
+ command('foo') { run = true }
99
+ command('bar') {}
100
+ end
101
+
102
+ @set.import_from(other_set, 'foo').should == @set
103
+ end
104
+
83
105
  it 'should be able to import some commands from other sets using listing name' do
84
106
  run = false
85
107
 
@@ -121,28 +143,71 @@ describe Pry::CommandSet do
121
143
  @set.commands['foo'].description.should == 'some stuff'
122
144
  end
123
145
 
124
- it 'should be able to alias method' do
125
- run = false
126
- @set.command('foo', 'stuff') { run = true }
146
+ describe "aliases" do
147
+ it 'should be able to alias command' do
148
+ run = false
149
+ @set.command('foo', 'stuff') { run = true }
127
150
 
128
- @set.alias_command 'bar', 'foo'
129
- @set.commands['bar'].name.should == 'bar'
130
- @set.commands['bar'].description.should == ''
151
+ @set.alias_command 'bar', 'foo'
152
+ @set.commands['bar'].match.should == 'bar'
153
+ @set.commands['bar'].description.should == 'Alias for `foo`'
131
154
 
132
- @set.run_command @ctx, 'bar'
133
- run.should == true
134
- end
155
+ @set.run_command @ctx, 'bar'
156
+ run.should == true
157
+ end
135
158
 
136
- it "should be able to alias a method by the command's listing name" do
137
- run = false
138
- @set.command(/^foo1/, 'stuff', :listing => 'foo') { run = true }
159
+ it 'should inherit options from original command' do
160
+ run = false
161
+ @set.command('foo', 'stuff', :shellwords => true, :interpolate => false) { run = true }
139
162
 
140
- @set.alias_command 'bar', 'foo'
141
- @set.commands['bar'].name.should == 'bar'
142
- @set.commands['bar'].description.should == ''
163
+ @set.alias_command 'bar', 'foo'
164
+ @set.commands['bar'].options[:shellwords].should == @set.commands['foo'].options[:shellwords]
165
+ @set.commands['bar'].options[:interpolate].should == @set.commands['foo'].options[:interpolate]
143
166
 
144
- @set.run_command @ctx, 'bar'
145
- run.should == true
167
+ # however some options should not be inherited
168
+ @set.commands['bar'].options[:listing].should.not == @set.commands['foo'].options[:listing]
169
+ @set.commands['bar'].options[:listing].should == "bar"
170
+ end
171
+
172
+ it 'should be able to specify alias\'s description when aliasing' do
173
+ run = false
174
+ @set.command('foo', 'stuff') { run = true }
175
+
176
+ @set.alias_command 'bar', 'foo', :desc => "tobina"
177
+ @set.commands['bar'].match.should == 'bar'
178
+ @set.commands['bar'].description.should == "tobina"
179
+
180
+ @set.run_command @ctx, 'bar'
181
+ run.should == true
182
+ end
183
+
184
+ it "should be able to alias a command by its invocation line" do
185
+ run = false
186
+ @set.command(/^foo1/, 'stuff', :listing => 'foo') { run = true }
187
+
188
+ @set.alias_command 'bar', 'foo1'
189
+ @set.commands['bar'].match.should == 'bar'
190
+ @set.commands['bar'].description.should == 'Alias for `foo1`'
191
+
192
+ @set.run_command @ctx, 'bar'
193
+ run.should == true
194
+ end
195
+
196
+ it "should be able to specify options when creating alias" do
197
+ run = false
198
+ @set.command(/^foo1/, 'stuff', :listing => 'foo') { run = true }
199
+
200
+ @set.alias_command /^b.r/, 'foo1', :listing => "bar"
201
+ @set.commands[/^b.r/].options[:listing].should == "bar"
202
+ end
203
+
204
+ it "should set description to default if description parameter is nil" do
205
+ run = false
206
+ @set.command(/^foo1/, 'stuff', :listing => 'foo') { run = true }
207
+
208
+ @set.alias_command "bar", 'foo1'
209
+ @set.commands["bar"].description.should == "Alias for `foo1`"
210
+ end
146
211
  end
147
212
 
148
213
  it 'should be able to change the descriptions of commands' do
@@ -0,0 +1,16 @@
1
+ require 'helper'
2
+
3
+ describe 'Pry::DefaultCommands::CD' do
4
+ describe 'cd' do
5
+ # Regression test for ticket #516.
6
+ #it 'should be able to cd into the Object BasicObject.' do
7
+ # mock_pry('cd BasicObject.new').should.not =~ /\Aundefined method `__binding__'/
8
+ #end
9
+
10
+ # Regression test for ticket #516
11
+ # Possibly move higher up.
12
+ it 'should not fail with undefined BasicObject#is_a?' do
13
+ mock_pry('cd BasicObject.new').should.not =~ /undefined method `is_a\?'/
14
+ end
15
+ end
16
+ end