proc setup {} { save_env } proc teardown {} { assert_env_unmodified { /BASH_LINENO=/d /BASH_SOURCE=/d /OLDPWD=/d } } setup set test "Tab should complete both commands and hostname" # Try completion set dir fixtures/ssh set prompt "/$dir/@" assert_bash_exec "cd $dir" "" $prompt set cmd "ssh -F config ls" send "$cmd\t" set expected "^$cmd\r\n.*ls.*ls_known_host.*\r\n$prompt$cmd$" expect { -re $expected { pass "$test" } -re $prompt { unresolved "$test at prompt" } default { unresolved "$test" } } sync_after_int $prompt assert_bash_exec {cd "$TESTDIR"} sync_after_int set test "-F without space shouldn't error" # Try completion set cmd "ssh -F" send "$cmd\t " set expected "^$cmd $" expect { -re "^${cmd}bash: option requires an argument -- F" { fail "$test" } -re "^$cmd\r\n.*\r\n/@" { pass "$test" } -re /@ { unresolved "$test at prompt" } default { unresolved "$test" } } sync_after_int set test "First argument shouldn't complete with commands" # NOTE: This test assumes there's a command "bash" and no host named "bash" set cmd "ssh bas" assert_complete [get_known_hosts "bas"] $cmd $test sync_after_int set test "First argument should complete partial hostname" assert_complete_partial [get_hosts] ssh "" $test /@ 20 \ [list "ltrim_colon_completions"] sync_after_int set test "-F should complete filename" set dir fixtures/ssh set prompt "/$dir/@" assert_bash_exec "cd $dir" "" $prompt set cmd "ssh -Fsp" send "$cmd\t" expect -ex "$cmd" expect { -ex "aced\\ \\ conf" { pass "$test" } # _filedir works only if `-o filenames' is in effect, which isn't the # case for `ssh' -re "aced conf" { xfail "$test" } -re $prompt { unresolved "$test at prompt" } default { unresolved "$test" } } sync_after_int $prompt assert_bash_exec {cd "$TESTDIR"} sync_after_int teardown