module CompletionTest

Public Instance Methods

test_custom_completion() click to toggle source
# File lib/helpers/fzf/test/test_go.rb, line 2414
def test_custom_completion
  tmux.send_keys '_fzf_compgen_path() { echo "$1"; seq 10; }', :Enter
  tmux.prepare
  tmux.send_keys 'ls /tmp/**', :Tab
  tmux.until { |lines| assert_equal 11, lines.match_count }
  tmux.send_keys :Tab, :Tab, :Tab
  tmux.until { |lines| assert_equal 3, lines.select_count }
  tmux.send_keys :Enter
  tmux.until(true) { |lines| assert_equal 'ls /tmp 1 2', lines[-1] }
end
test_custom_completion_api() click to toggle source
# File lib/helpers/fzf/test/test_go.rb, line 2471
def test_custom_completion_api
  tmux.send_keys 'eval "_fzf$(declare -f _comprun)"', :Enter
  %w[f g].each do |command|
    tmux.prepare
    tmux.send_keys "#{command} b**", :Tab
    tmux.until do |lines|
      assert_equal 2, lines.item_count
      assert_equal 1, lines.match_count
      assert lines.any_include?("prompt-#{command}")
      assert lines.any_include?("preview-#{command}-bar")
    end
    tmux.send_keys :Enter
    tmux.until { |lines| assert_equal "#{command} #{command}barbar", lines[-1] }
    tmux.send_keys 'C-u'
  end
ensure
  tmux.prepare
  tmux.send_keys 'unset -f _fzf_comprun', :Enter
end
test_dir_completion() click to toggle source
# File lib/helpers/fzf/test/test_go.rb, line 2363
def test_dir_completion
  (1..100).each do |idx|
    FileUtils.mkdir_p("/tmp/fzf-test/d#{idx}")
  end
  FileUtils.touch('/tmp/fzf-test/d55/xxx')
  tmux.prepare
  tmux.send_keys 'cd /tmp/fzf-test/**', :Tab
  tmux.until { |lines| assert_operator lines.match_count, :>, 0 }
  tmux.send_keys :Tab, :Tab # Tab does not work here
  tmux.send_keys 55
  tmux.until { |lines| assert_equal 1, lines.match_count }
  tmux.send_keys :Enter
  tmux.until(true) { |lines| assert_equal 'cd /tmp/fzf-test/d55/', lines[-1] }
  tmux.send_keys :xx
  tmux.until { |lines| assert_equal 'cd /tmp/fzf-test/d55/xx', lines[-1] }

  # Should not match regular files (bash-only)
  if instance_of?(TestBash)
    tmux.send_keys :Tab
    tmux.until { |lines| assert_equal 'cd /tmp/fzf-test/d55/xx', lines[-1] }
  end

  # Fail back to plusdirs
  tmux.send_keys :BSpace, :BSpace, :BSpace
  tmux.until { |lines| assert_equal 'cd /tmp/fzf-test/d55', lines[-1] }
  tmux.send_keys :Tab
  tmux.until { |lines| assert_equal 'cd /tmp/fzf-test/d55/', lines[-1] }
end
test_file_completion() click to toggle source
# File lib/helpers/fzf/test/test_go.rb, line 2295
def test_file_completion
  FileUtils.mkdir_p('/tmp/fzf-test')
  FileUtils.mkdir_p('/tmp/fzf test')
  (1..100).each { |i| FileUtils.touch("/tmp/fzf-test/#{i}") }
  ['no~such~user', '/tmp/fzf test/foobar'].each do |f|
    FileUtils.touch(File.expand_path(f))
  end
  tmux.prepare
  tmux.send_keys 'cat /tmp/fzf-test/10**', :Tab
  tmux.until { |lines| assert_operator lines.match_count, :>, 0 }
  tmux.send_keys ' !d'
  tmux.until { |lines| assert_equal 2, lines.match_count }
  tmux.send_keys :Tab, :Tab
  tmux.until { |lines| assert_equal 2, lines.select_count }
  tmux.send_keys :Enter
  tmux.until(true) do |lines|
    assert_equal 'cat /tmp/fzf-test/10 /tmp/fzf-test/100', lines[-1]
  end

  # ~USERNAME**<TAB>
  user = `whoami`.chomp
  tmux.send_keys 'C-u'
  tmux.send_keys "cat ~#{user}**", :Tab
  tmux.until { |lines| assert_operator lines.match_count, :>, 0 }
  tmux.send_keys "/#{user}"
  tmux.until { |lines| assert(lines.any? { |l| l.end_with?("/#{user}") }) }
  tmux.send_keys :Enter
  tmux.until(true) do |lines|
    assert_match %r{cat .*/#{user}}, lines[-1]
  end

  # ~INVALID_USERNAME**<TAB>
  tmux.send_keys 'C-u'
  tmux.send_keys 'cat ~such**', :Tab
  tmux.until(true) { |lines| assert lines.any_include?('no~such~user') }
  tmux.send_keys :Enter
  tmux.until(true) { |lines| assert_equal 'cat no~such~user', lines[-1] }

  # /tmp/fzf\ test**<TAB>
  tmux.send_keys 'C-u'
  tmux.send_keys 'cat /tmp/fzf\ test/**', :Tab
  tmux.until { |lines| assert_operator lines.match_count, :>, 0 }
  tmux.send_keys 'foobar$'
  tmux.until { |lines| assert_equal 1, lines.match_count }
  tmux.send_keys :Enter
  tmux.until(true) { |lines| assert_equal 'cat /tmp/fzf\ test/foobar', lines[-1] }

  # Should include hidden files
  (1..100).each { |i| FileUtils.touch("/tmp/fzf-test/.hidden-#{i}") }
  tmux.send_keys 'C-u'
  tmux.send_keys 'cat /tmp/fzf-test/hidden**', :Tab
  tmux.until(true) do |lines|
    assert_equal 100, lines.match_count
    assert lines.any_include?('/tmp/fzf-test/.hidden-')
  end
  tmux.send_keys :Enter
ensure
  ['/tmp/fzf-test', '/tmp/fzf test', '~/.fzf-home', 'no~such~user'].each do |f|
    FileUtils.rm_rf(File.expand_path(f))
  end
end
test_file_completion_root() click to toggle source
# File lib/helpers/fzf/test/test_go.rb, line 2357
def test_file_completion_root
  tmux.send_keys 'ls /**', :Tab
  tmux.until { |lines| assert_operator lines.match_count, :>, 0 }
  tmux.send_keys :Enter
end
test_file_completion_unicode() click to toggle source
# File lib/helpers/fzf/test/test_go.rb, line 2445
def test_file_completion_unicode
  FileUtils.mkdir_p('/tmp/fzf-test')
  tmux.paste "cd /tmp/fzf-test; echo test3 > $'fzf-unicode \\355\\205\\214\\354\\212\\244\\355\\212\\2701'; echo test4 > $'fzf-unicode \\355\\205\\214\\354\\212\\244\\355\\212\\2702'"
  tmux.prepare
  tmux.send_keys 'cat fzf-unicode**', :Tab
  tmux.until { |lines| assert_equal 2, lines.match_count }

  tmux.send_keys '1'
  tmux.until { |lines| assert_equal 1, lines.match_count }
  tmux.send_keys :Tab
  tmux.until { |lines| assert_equal 1, lines.select_count }

  tmux.send_keys :BSpace
  tmux.until { |lines| assert_equal 2, lines.match_count }

  tmux.send_keys '2'
  tmux.until { |lines| assert_equal 1, lines.select_count }
  tmux.send_keys :Tab
  tmux.until { |lines| assert_equal 2, lines.select_count }

  tmux.send_keys :Enter
  tmux.until(true) { |lines| assert_match(/cat .*fzf-unicode.*1.* .*fzf-unicode.*2/, lines[-1]) }
  tmux.send_keys :Enter
  tmux.until { |lines| assert_equal %w[test3 test4], lines[-2..-1] }
end
test_process_completion() click to toggle source
# File lib/helpers/fzf/test/test_go.rb, line 2392
def test_process_completion
  tmux.send_keys 'sleep 12345 &', :Enter
  lines = tmux.until { |lines| assert lines[-1]&.start_with?('[1] ') }
  pid = lines[-1]&.split&.last
  tmux.prepare
  tmux.send_keys 'C-L'
  tmux.send_keys 'kill ', :Tab
  tmux.until { |lines| assert_operator lines.match_count, :>, 0 }
  tmux.send_keys 'sleep12345'
  tmux.until { |lines| assert lines.any_include?('sleep 12345') }
  tmux.send_keys :Enter
  tmux.until(true) { |lines| assert_equal "kill #{pid}", lines[-1] }
ensure
  if pid
    begin
      Process.kill('KILL', pid.to_i)
    rescue StandardError
      nil
    end
  end
end
test_unset_completion() click to toggle source
# File lib/helpers/fzf/test/test_go.rb, line 2425
def test_unset_completion
  tmux.send_keys 'export FZFFOOBAR=BAZ', :Enter
  tmux.prepare

  # Using tmux
  tmux.send_keys 'unset FZFFOOBR**', :Tab
  tmux.until { |lines| assert_equal 1, lines.match_count }
  tmux.send_keys :Enter
  tmux.until { |lines| assert_equal 'unset FZFFOOBAR', lines[-1] }
  tmux.send_keys 'C-c'

  # FZF_TMUX=1
  new_shell
  tmux.focus
  tmux.send_keys 'unset FZFFOOBR**', :Tab
  tmux.until { |lines| assert_equal 1, lines.match_count }
  tmux.send_keys :Enter
  tmux.until { |lines| assert_equal 'unset FZFFOOBAR', lines[-1] }
end