added tests for intrrospection and input commands to work with unified one-indexing (show-input, amend-line, play, etc)

This commit is contained in:
John Mair 2011-06-17 01:51:32 +12:00
parent 83f3d3cfef
commit 82f348ac04
2 changed files with 43 additions and 10 deletions

View File

@ -13,7 +13,15 @@ describe "Pry::DefaultCommands::Input" do
it 'should correctly amend the specified line of input when line number given ' do it 'should correctly amend the specified line of input when line number given ' do
str_output = StringIO.new str_output = StringIO.new
redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "amend-line-0 def goodbye", "show-input", "exit-all"), str_output) do redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "amend-line 1 def goodbye", "show-input", "exit-all"), str_output) do
pry
end
str_output.string.should =~ /\A\d+: def goodbye\n\d+: puts :bing\n\d+: puts :bang/
end
it 'should correctly amend the specified line of input when line number given, 0 should behave as 1 ' do
str_output = StringIO.new
redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "amend-line 0 def goodbye", "show-input", "exit-all"), str_output) do
pry pry
end end
str_output.string.should =~ /\A\d+: def goodbye\n\d+: puts :bing\n\d+: puts :bang/ str_output.string.should =~ /\A\d+: def goodbye\n\d+: puts :bing\n\d+: puts :bang/
@ -61,7 +69,7 @@ describe "Pry::DefaultCommands::Input" do
it 'should correctly amend the specified range of lines' do it 'should correctly amend the specified range of lines' do
str_output = StringIO.new str_output = StringIO.new
redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "puts :heart", "amend-line-1..2 puts :bong", "show-input", "exit-all"), str_output) do redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "puts :heart", "amend-line 2..3 puts :bong", "show-input", "exit-all"), str_output) do
pry pry
end end
str_output.string.should =~ /\A\d+: def hello\n\d+: puts :bong\n\d+: puts :heart/ str_output.string.should =~ /\A\d+: def hello\n\d+: puts :bong\n\d+: puts :heart/
@ -69,7 +77,7 @@ describe "Pry::DefaultCommands::Input" do
it 'should correctly delete a specific line using the ! for content' do it 'should correctly delete a specific line using the ! for content' do
str_output = StringIO.new str_output = StringIO.new
redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "puts :boast", "puts :heart", "amend-line-2 !", "show-input", "exit-all"), str_output) do redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "puts :boast", "puts :heart", "amend-line 3 !", "show-input", "exit-all"), str_output) do
pry pry
end end
@ -78,7 +86,7 @@ describe "Pry::DefaultCommands::Input" do
it 'should correctly delete a range of lines using the ! for content' do it 'should correctly delete a range of lines using the ! for content' do
str_output = StringIO.new str_output = StringIO.new
redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "puts :boast", "puts :heart", "amend-line 1..3 !", "show-input", "exit-all"), str_output) do redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "puts :boast", "puts :heart", "amend-line 2..4 !", "show-input", "exit-all"), str_output) do
pry pry
end end
@ -96,7 +104,7 @@ describe "Pry::DefaultCommands::Input" do
it 'should correctly amend the specified range of lines, using negative numbers in range' do it 'should correctly amend the specified range of lines, using negative numbers in range' do
str_output = StringIO.new str_output = StringIO.new
redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "puts :boast", "puts :heart", "amend-line-1..-2 puts :bong", "show-input", "exit-all"), str_output) do redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "puts :boast", "puts :heart", "amend-line-2..-2 puts :bong", "show-input", "exit-all"), str_output) do
pry pry
end end
str_output.string.should =~ /\d+: def hello\n\d+: puts :bong\n\d+: puts :heart/ str_output.string.should =~ /\d+: def hello\n\d+: puts :bong\n\d+: puts :heart/
@ -104,7 +112,7 @@ describe "Pry::DefaultCommands::Input" do
it 'should correctly insert a new line of input before a specified line using the > syntax' do it 'should correctly insert a new line of input before a specified line using the > syntax' do
str_output = StringIO.new str_output = StringIO.new
redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "amend-line 1 >puts :inserted", "show-input", "exit-all"), str_output) do redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "amend-line 2 >puts :inserted", "show-input", "exit-all"), str_output) do
pry pry
end end
str_output.string.should =~ /\d+: def hello\n\d+: puts :inserted\n\d+: puts :bing\n\d+: puts :bang/ str_output.string.should =~ /\d+: def hello\n\d+: puts :inserted\n\d+: puts :bing\n\d+: puts :bang/
@ -112,7 +120,7 @@ describe "Pry::DefaultCommands::Input" do
it 'should correctly insert a new line of input before a specified line using the > syntax (should ignore second value of range)' do it 'should correctly insert a new line of input before a specified line using the > syntax (should ignore second value of range)' do
str_output = StringIO.new str_output = StringIO.new
redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "amend-line 1..20 >puts :inserted", "show-input", "exit-all"), str_output) do redirect_pry_io(InputTester.new("def hello", "puts :bing", "puts :bang", "amend-line 2..21 >puts :inserted", "show-input", "exit-all"), str_output) do
pry pry
end end
str_output.string.should =~ /\d+: def hello\n\d+: puts :inserted\n\d+: puts :bing\n\d+: puts :bang/ str_output.string.should =~ /\d+: def hello\n\d+: puts :inserted\n\d+: puts :bing\n\d+: puts :bang/
@ -163,7 +171,7 @@ describe "Pry::DefaultCommands::Input" do
:test_method_content :test_method_content
end end
redirect_pry_io(InputTester.new('play -m $o.test_method --lines 1', "exit-all"), str_output = StringIO.new) do redirect_pry_io(InputTester.new('play -m $o.test_method --lines 2', "exit-all"), str_output = StringIO.new) do
pry pry
end end
@ -178,7 +186,7 @@ describe "Pry::DefaultCommands::Input" do
5 * 6 5 * 6
end end
redirect_pry_io(InputTester.new('play -m $o.test_method --lines 1..2', "exit-all"), str_output = StringIO.new) do redirect_pry_io(InputTester.new('play -m $o.test_method --lines 2..3', "exit-all"), str_output = StringIO.new) do
pry pry
end end
@ -240,13 +248,29 @@ describe "Pry::DefaultCommands::Input" do
@hist.push "pepper" @hist.push "pepper"
@hist.push "orange" @hist.push "orange"
@hist.push "grape" @hist.push "grape"
@hist.push "def blah 1"
@hist.push "def boink 2"
@hist.push "place holder"
str_output = StringIO.new str_output = StringIO.new
redirect_pry_io(InputTester.new("hist --grep o", "exit-all"), str_output) do redirect_pry_io(InputTester.new("hist --grep o", "exit-all"), str_output) do
pry pry
end end
str_output.string.should =~ /\d:.*?box\n\d:.*?button\n\d:.*?orange/ str_output.string.should =~ /\d:.*?box\n\d:.*?button\n\d:.*?orange/
# test more than one word in a regex match (def blah)
str_output = StringIO.new
redirect_pry_io(InputTester.new("hist --grep def blah", "exit-all"), str_output) do
pry
end
str_output.string.should =~ /def blah 1/
# test more than one word with leading white space in a regex match (def boink)
str_output = StringIO.new
redirect_pry_io(InputTester.new("hist --grep def boink", "exit-all"), str_output) do
pry
end
str_output.string.should =~ /def boink 2/
end end
it 'should return last N lines in history with --tail switch' do it 'should return last N lines in history with --tail switch' do

View File

@ -20,6 +20,15 @@ describe "Pry::DefaultCommands::Introspection" do
str_output.string.should =~ /\d+: def sample/ str_output.string.should =~ /\d+: def sample/
end end
it 'should output a method\'s source with line numbers starting at 1' do
str_output = StringIO.new
redirect_pry_io(InputTester.new("show-method -b sample_method", "exit-all"), str_output) do
pry
end
str_output.string.should =~ /1: def sample/
end
it 'should output a method\'s source if inside method without needing to use method name' do it 'should output a method\'s source if inside method without needing to use method name' do
$str_output = StringIO.new $str_output = StringIO.new