Test multi-line C-r (#1892)

This commit is contained in:
Jack Bates 2020-02-28 04:06:38 -07:00 committed by GitHub
parent 7c447bbdc7
commit e34c7c00b1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -87,8 +87,8 @@ class Tmux
attr_reader :win
def initialize(shell = :bash)
@win = go("new-window -d -P -F '#I' '#{Shell.send(shell)}'").first
go("set-window-option -t #{@win} pane-base-index 0")
@win = go(%W[new-window -d -P -F #I #{Shell.send(shell)}]).first
go(%W[set-window-option -t #{@win} pane-base-index 0])
return unless shell == :fish
send_keys('function fish_prompt; end; clear', :Enter)
@ -96,30 +96,19 @@ class Tmux
end
def kill
go("kill-window -t #{win} 2> /dev/null")
go(%W[kill-window -t #{win}])
end
def send_keys(*args)
target =
if args.last.is_a?(Hash)
hash = args.pop
go("select-window -t #{win}")
go(%W[select-window -t #{win}])
"#{win}.#{hash[:pane]}"
else
win
end
enum = (args + [nil]).each_cons(2)
loop do
pair = enum.next
if pair.first == :Escape
arg = pair.compact.map { |key| %("#{key}") }.join(' ')
go(%(send-keys -t #{target} #{arg}))
enum.next if pair.last
else
go(%(send-keys -t #{target} "#{pair.first}"))
end
break unless pair.last
end
go(%W[send-keys -t #{target}] + args.map(&:to_s))
end
def paste(str)
@ -127,7 +116,7 @@ class Tmux
end
def capture(pane = 0)
go("capture-pane -p -t #{win}.#{pane}")
go(%W[capture-pane -p -t #{win}.#{pane}]).reverse.drop_while(&:empty?).reverse
end
def until(refresh = false, pane = 0)
@ -189,8 +178,8 @@ class Tmux
private
def go(*args)
`tmux #{args.join ' '}`.split($INPUT_RECORD_SEPARATOR)
def go(args)
IO.popen(['tmux'] + args) { |io| io.readlines(chomp: true) }
end
end
@ -501,7 +490,7 @@ class TestGoFZF < TestBase
end
def test_sync
tmux.send_keys "seq 1 100 | #{fzf! :multi} | awk '{print \\$1 \\$1}' | #{fzf :sync}", :Enter
tmux.send_keys "seq 1 100 | #{fzf! :multi} | awk '{print $1 $1}' | #{fzf :sync}", :Enter
tmux.until { |lines| lines[-1] == '>' }
tmux.send_keys 9
tmux.until { |lines| lines[-2] == ' 19/100' }
@ -782,7 +771,7 @@ class TestGoFZF < TestBase
end
def test_invalid_cache_query_type
command = %[(echo 'foo\\$bar'; echo 'barfoo'; echo 'foo^bar'; echo \\"foo'1-2\\"; seq 100) | #{fzf}]
command = %[(echo 'foo$bar'; echo 'barfoo'; echo 'foo^bar'; echo "foo'1-2"; seq 100) | #{fzf}]
# Suffix match
tmux.send_keys command, :Enter
@ -941,7 +930,7 @@ class TestGoFZF < TestBase
def test_execute
output = '/tmp/fzf-test-execute'
opts = %[--bind \\"alt-a:execute(echo /{}/ >> #{output}),alt-b:execute[echo /{}{}/ >> #{output}],C:execute:echo /{}{}{}/ >> #{output}\\"]
opts = %[--bind "alt-a:execute(echo /{}/ >> #{output}),alt-b:execute[echo /{}{}/ >> #{output}],C:execute:echo /{}{}{}/ >> #{output}"]
wait = ->(exp) { tmux.until { |lines| lines[-2].include? exp } }
writelines tempname, %w[foo'bar foo"bar foo$bar]
tmux.send_keys "cat #{tempname} | #{fzf opts}; sync", :Enter
@ -980,7 +969,7 @@ class TestGoFZF < TestBase
def test_execute_multi
output = '/tmp/fzf-test-execute-multi'
opts = %[--multi --bind \\"alt-a:execute-multi(echo {}/{+} >> #{output}; sync)\\"]
opts = %[--multi --bind "alt-a:execute-multi(echo {}/{+} >> #{output}; sync)"]
writelines tempname, %w[foo'bar foo"bar foo$bar foobar]
tmux.send_keys "cat #{tempname} | #{fzf opts}", :Enter
tmux.until { |lines| lines[-2].include? '4/4' }
@ -1166,7 +1155,7 @@ class TestGoFZF < TestBase
end
def test_header
tmux.send_keys "seq 100 | #{fzf "--header \\\"\\$(head -5 #{FILE})\\\""}", :Enter
tmux.send_keys "seq 100 | #{fzf "--header \"$(head -5 #{FILE})\""}", :Enter
header = File.readlines(FILE).take(5).map(&:strip)
tmux.until do |lines|
lines[-2].include?('100/100') &&
@ -1176,7 +1165,7 @@ class TestGoFZF < TestBase
end
def test_header_reverse
tmux.send_keys "seq 100 | #{fzf "--header=\\\"\\$(head -5 #{FILE})\\\" --reverse"}", :Enter
tmux.send_keys "seq 100 | #{fzf "--header \"$(head -5 #{FILE})\" --reverse"}", :Enter
header = File.readlines(FILE).take(5).map(&:strip)
tmux.until do |lines|
lines[1].include?('100/100') &&
@ -1186,7 +1175,7 @@ class TestGoFZF < TestBase
end
def test_header_reverse_list
tmux.send_keys "seq 100 | #{fzf "--header=\\\"\\$(head -5 #{FILE})\\\" --layout=reverse-list"}", :Enter
tmux.send_keys "seq 100 | #{fzf "--header \"$(head -5 #{FILE})\" --layout=reverse-list"}", :Enter
header = File.readlines(FILE).take(5).map(&:strip)
tmux.until do |lines|
lines[-2].include?('100/100') &&
@ -1196,7 +1185,7 @@ class TestGoFZF < TestBase
end
def test_header_and_header_lines
tmux.send_keys "seq 100 | #{fzf "--header-lines 10 --header \\\"\\$(head -5 #{FILE})\\\""}", :Enter
tmux.send_keys "seq 100 | #{fzf "--header-lines 10 --header \"$(head -5 #{FILE})\""}", :Enter
header = File.readlines(FILE).take(5).map(&:strip)
tmux.until do |lines|
lines[-2].include?('90/90') &&
@ -1206,7 +1195,7 @@ class TestGoFZF < TestBase
end
def test_header_and_header_lines_reverse
tmux.send_keys "seq 100 | #{fzf "--reverse --header-lines 10 --header \\\"\\$(head -5 #{FILE})\\\""}", :Enter
tmux.send_keys "seq 100 | #{fzf "--reverse --header-lines 10 --header \"$(head -5 #{FILE})\""}", :Enter
header = File.readlines(FILE).take(5).map(&:strip)
tmux.until do |lines|
lines[1].include?('90/90') &&
@ -1216,7 +1205,7 @@ class TestGoFZF < TestBase
end
def test_header_and_header_lines_reverse_list
tmux.send_keys "seq 100 | #{fzf "--layout=reverse-list --header-lines 10 --header \\\"\\$(head -5 #{FILE})\\\""}", :Enter
tmux.send_keys "seq 100 | #{fzf "--layout=reverse-list --header-lines 10 --header \"$(head -5 #{FILE})\""}", :Enter
header = File.readlines(FILE).take(5).map(&:strip)
tmux.until do |lines|
lines[-2].include?('90/90') &&
@ -1327,7 +1316,7 @@ class TestGoFZF < TestBase
def test_exitstatus_empty
{ '99' => '0', '999' => '1' }.each do |query, status|
tmux.send_keys "seq 100 | #{FZF} -q #{query}; echo --\\$?--", :Enter
tmux.send_keys "seq 100 | #{FZF} -q #{query}; echo --$?--", :Enter
tmux.until { |lines| lines[-2] =~ %r{ [10]/100} }
tmux.send_keys :Enter
tmux.until { |lines| lines.last.include? "--#{status}--" }
@ -1472,7 +1461,7 @@ class TestGoFZF < TestBase
end
def test_preview_hidden
tmux.send_keys %(seq 1000 | #{FZF} --preview 'echo {{}-{}-\\$FZF_PREVIEW_LINES-\\$FZF_PREVIEW_COLUMNS}' --preview-window down:1:hidden --bind ?:toggle-preview), :Enter
tmux.send_keys %(seq 1000 | #{FZF} --preview 'echo {{}-{}-$FZF_PREVIEW_LINES-$FZF_PREVIEW_COLUMNS}' --preview-window down:1:hidden --bind ?:toggle-preview), :Enter
tmux.until { |lines| lines[-1] == '>' }
tmux.send_keys '?'
tmux.until { |lines| lines[-2] =~ / {1-1-1-[0-9]+}/ }
@ -1849,6 +1838,19 @@ module TestShell
tmux.until { |lines| lines[-1] == '3rd' }
end
def test_ctrl_r_multiline
tmux.send_keys 'echo "foo', :Enter, 'bar"', :Enter
tmux.until { |lines| lines[-2..-1] == ['foo', 'bar'] }
tmux.send_keys 'C-r'
tmux.until { |lines| lines[-1] == '>' }
tmux.send_keys 'foo bar'
tmux.until { |lines| lines[-3].end_with? 'bar"' }
tmux.send_keys :Enter
tmux.until { |lines| lines[-1].end_with? 'bar"' }
tmux.send_keys :Enter
tmux.until { |lines| lines[-2..-1] == ['foo', 'bar'] }
end
def test_ctrl_r_abort
skip "doesn't restore the original line when search is aborted pre Bash 4" if shell == :bash && /(?<= version )\d+/.match(`#{Shell.bash} --version`).to_s.to_i < 4
tmux.send_keys 'foo'
@ -1988,7 +1990,7 @@ module CompletionTest
end
def test_custom_completion
tmux.send_keys '_fzf_compgen_path() { echo "\$1"; seq 10; }', :Enter
tmux.send_keys '_fzf_compgen_path() { echo "$1"; seq 10; }', :Enter
tmux.prepare
tmux.send_keys 'ls /tmp/**', :Tab
tmux.until { |lines| lines.match_count == 11 }