mirror of
https://github.com/Llewellynvdm/fzf.git
synced 2024-11-22 04:45:14 +00:00
Test multi-line C-r (#1892)
This commit is contained in:
parent
7c447bbdc7
commit
e34c7c00b1
@ -87,8 +87,8 @@ class Tmux
|
|||||||
attr_reader :win
|
attr_reader :win
|
||||||
|
|
||||||
def initialize(shell = :bash)
|
def initialize(shell = :bash)
|
||||||
@win = go("new-window -d -P -F '#I' '#{Shell.send(shell)}'").first
|
@win = go(%W[new-window -d -P -F #I #{Shell.send(shell)}]).first
|
||||||
go("set-window-option -t #{@win} pane-base-index 0")
|
go(%W[set-window-option -t #{@win} pane-base-index 0])
|
||||||
return unless shell == :fish
|
return unless shell == :fish
|
||||||
|
|
||||||
send_keys('function fish_prompt; end; clear', :Enter)
|
send_keys('function fish_prompt; end; clear', :Enter)
|
||||||
@ -96,30 +96,19 @@ class Tmux
|
|||||||
end
|
end
|
||||||
|
|
||||||
def kill
|
def kill
|
||||||
go("kill-window -t #{win} 2> /dev/null")
|
go(%W[kill-window -t #{win}])
|
||||||
end
|
end
|
||||||
|
|
||||||
def send_keys(*args)
|
def send_keys(*args)
|
||||||
target =
|
target =
|
||||||
if args.last.is_a?(Hash)
|
if args.last.is_a?(Hash)
|
||||||
hash = args.pop
|
hash = args.pop
|
||||||
go("select-window -t #{win}")
|
go(%W[select-window -t #{win}])
|
||||||
"#{win}.#{hash[:pane]}"
|
"#{win}.#{hash[:pane]}"
|
||||||
else
|
else
|
||||||
win
|
win
|
||||||
end
|
end
|
||||||
enum = (args + [nil]).each_cons(2)
|
go(%W[send-keys -t #{target}] + args.map(&:to_s))
|
||||||
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
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def paste(str)
|
def paste(str)
|
||||||
@ -127,7 +116,7 @@ class Tmux
|
|||||||
end
|
end
|
||||||
|
|
||||||
def capture(pane = 0)
|
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
|
end
|
||||||
|
|
||||||
def until(refresh = false, pane = 0)
|
def until(refresh = false, pane = 0)
|
||||||
@ -189,8 +178,8 @@ class Tmux
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def go(*args)
|
def go(args)
|
||||||
`tmux #{args.join ' '}`.split($INPUT_RECORD_SEPARATOR)
|
IO.popen(['tmux'] + args) { |io| io.readlines(chomp: true) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -501,7 +490,7 @@ class TestGoFZF < TestBase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_sync
|
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.until { |lines| lines[-1] == '>' }
|
||||||
tmux.send_keys 9
|
tmux.send_keys 9
|
||||||
tmux.until { |lines| lines[-2] == ' 19/100' }
|
tmux.until { |lines| lines[-2] == ' 19/100' }
|
||||||
@ -782,7 +771,7 @@ class TestGoFZF < TestBase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_invalid_cache_query_type
|
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
|
# Suffix match
|
||||||
tmux.send_keys command, :Enter
|
tmux.send_keys command, :Enter
|
||||||
@ -941,7 +930,7 @@ class TestGoFZF < TestBase
|
|||||||
|
|
||||||
def test_execute
|
def test_execute
|
||||||
output = '/tmp/fzf-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 } }
|
wait = ->(exp) { tmux.until { |lines| lines[-2].include? exp } }
|
||||||
writelines tempname, %w[foo'bar foo"bar foo$bar]
|
writelines tempname, %w[foo'bar foo"bar foo$bar]
|
||||||
tmux.send_keys "cat #{tempname} | #{fzf opts}; sync", :Enter
|
tmux.send_keys "cat #{tempname} | #{fzf opts}; sync", :Enter
|
||||||
@ -980,7 +969,7 @@ class TestGoFZF < TestBase
|
|||||||
|
|
||||||
def test_execute_multi
|
def test_execute_multi
|
||||||
output = '/tmp/fzf-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]
|
writelines tempname, %w[foo'bar foo"bar foo$bar foobar]
|
||||||
tmux.send_keys "cat #{tempname} | #{fzf opts}", :Enter
|
tmux.send_keys "cat #{tempname} | #{fzf opts}", :Enter
|
||||||
tmux.until { |lines| lines[-2].include? '4/4' }
|
tmux.until { |lines| lines[-2].include? '4/4' }
|
||||||
@ -1166,7 +1155,7 @@ class TestGoFZF < TestBase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_header
|
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)
|
header = File.readlines(FILE).take(5).map(&:strip)
|
||||||
tmux.until do |lines|
|
tmux.until do |lines|
|
||||||
lines[-2].include?('100/100') &&
|
lines[-2].include?('100/100') &&
|
||||||
@ -1176,7 +1165,7 @@ class TestGoFZF < TestBase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_header_reverse
|
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)
|
header = File.readlines(FILE).take(5).map(&:strip)
|
||||||
tmux.until do |lines|
|
tmux.until do |lines|
|
||||||
lines[1].include?('100/100') &&
|
lines[1].include?('100/100') &&
|
||||||
@ -1186,7 +1175,7 @@ class TestGoFZF < TestBase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_header_reverse_list
|
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)
|
header = File.readlines(FILE).take(5).map(&:strip)
|
||||||
tmux.until do |lines|
|
tmux.until do |lines|
|
||||||
lines[-2].include?('100/100') &&
|
lines[-2].include?('100/100') &&
|
||||||
@ -1196,7 +1185,7 @@ class TestGoFZF < TestBase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_header_and_header_lines
|
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)
|
header = File.readlines(FILE).take(5).map(&:strip)
|
||||||
tmux.until do |lines|
|
tmux.until do |lines|
|
||||||
lines[-2].include?('90/90') &&
|
lines[-2].include?('90/90') &&
|
||||||
@ -1206,7 +1195,7 @@ class TestGoFZF < TestBase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_header_and_header_lines_reverse
|
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)
|
header = File.readlines(FILE).take(5).map(&:strip)
|
||||||
tmux.until do |lines|
|
tmux.until do |lines|
|
||||||
lines[1].include?('90/90') &&
|
lines[1].include?('90/90') &&
|
||||||
@ -1216,7 +1205,7 @@ class TestGoFZF < TestBase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_header_and_header_lines_reverse_list
|
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)
|
header = File.readlines(FILE).take(5).map(&:strip)
|
||||||
tmux.until do |lines|
|
tmux.until do |lines|
|
||||||
lines[-2].include?('90/90') &&
|
lines[-2].include?('90/90') &&
|
||||||
@ -1327,7 +1316,7 @@ class TestGoFZF < TestBase
|
|||||||
|
|
||||||
def test_exitstatus_empty
|
def test_exitstatus_empty
|
||||||
{ '99' => '0', '999' => '1' }.each do |query, status|
|
{ '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.until { |lines| lines[-2] =~ %r{ [10]/100} }
|
||||||
tmux.send_keys :Enter
|
tmux.send_keys :Enter
|
||||||
tmux.until { |lines| lines.last.include? "--#{status}--" }
|
tmux.until { |lines| lines.last.include? "--#{status}--" }
|
||||||
@ -1472,7 +1461,7 @@ class TestGoFZF < TestBase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_preview_hidden
|
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.until { |lines| lines[-1] == '>' }
|
||||||
tmux.send_keys '?'
|
tmux.send_keys '?'
|
||||||
tmux.until { |lines| lines[-2] =~ / {1-1-1-[0-9]+}/ }
|
tmux.until { |lines| lines[-2] =~ / {1-1-1-[0-9]+}/ }
|
||||||
@ -1849,6 +1838,19 @@ module TestShell
|
|||||||
tmux.until { |lines| lines[-1] == '3rd' }
|
tmux.until { |lines| lines[-1] == '3rd' }
|
||||||
end
|
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
|
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
|
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'
|
tmux.send_keys 'foo'
|
||||||
@ -1988,7 +1990,7 @@ module CompletionTest
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_custom_completion
|
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.prepare
|
||||||
tmux.send_keys 'ls /tmp/**', :Tab
|
tmux.send_keys 'ls /tmp/**', :Tab
|
||||||
tmux.until { |lines| lines.match_count == 11 }
|
tmux.until { |lines| lines.match_count == 11 }
|
||||||
|
Loading…
Reference in New Issue
Block a user