Skip to content

Commit

Permalink
test(scp): Add unit tests for getting remote files
Browse files Browse the repository at this point in the history
This tests the current behaviour of the
xfunc_scp_compgen_remote_files function, including escaping, by
introducing a fixture to mock ssh invocation on the local host.
  • Loading branch information
yedayak committed Sep 15, 2024
1 parent 497345f commit b6e9900
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 3 deletions.
19 changes: 19 additions & 0 deletions test/fixtures/scp/bin/ssh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/bash
set -eu
args=("$@")
while true; do
arg="${args[0]-}"
case "$arg" in
-o)
args=("${args[@]:2}")
;;
local)
args=("${args[@]:1}")
;;
*)
break
;;
esac
done
#shellcheck disable=SC2068
${args[@]}
46 changes: 43 additions & 3 deletions test/t/test_scp.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import pytest

from conftest import assert_bash_exec, assert_complete
from conftest import assert_bash_exec, assert_complete, bash_env_saved

LIVE_HOST = "bash_completion"

Expand All @@ -23,7 +23,7 @@ def test_basic(self, hosts, completion):
)
),
# Local filenames
["config", "known_hosts", r"spaced\ \ conf"],
["bin/", "config", "known_hosts", r"spaced\ \ conf"],
)
)
assert completion == expected
Expand All @@ -43,7 +43,7 @@ def test_basic_spaced_conf(self, hosts, completion):
)
),
# Local filenames
["config", "known_hosts", r"spaced\ \ conf"],
["bin/", "config", "known_hosts", r"spaced\ \ conf"],
)
)
assert completion == expected
Expand Down Expand Up @@ -101,3 +101,43 @@ def test_remote_path_with_spaces(self, bash):
completion = assert_complete(bash, "scp remote_host:spaces")
assert_bash_exec(bash, "unset -f ssh")
assert completion == r"\\\ in\\\ filename.txt"

def test_xfunc_remote_files(self, bash):
with bash_env_saved(bash) as bash_env:
bash_env.save_variable("COMPREPLY")
bash_env.write_variable(
"PATH",
"$PWD/scp/bin:$PATH",
quote=False,
)
bash_env.write_variable("cur", "local:shared/default/")
completions_regular_escape = (
assert_bash_exec(
bash,
r'_comp_compgen -x scp remote_files; printf "%s\n" "${COMPREPLY[@]}"',
want_output=True,
)
.strip()
.splitlines()
)
completions_less_escape = (
assert_bash_exec(
bash,
r'_comp_compgen -x scp remote_files -l; printf "%s\n" "${COMPREPLY[@]}"',
want_output=True,
)
.strip()
.splitlines()
)
assert completions_regular_escape == [
"shared/default/bar ",
r"shared/default/bar\\\ bar.d/",
"shared/default/foo ",
"shared/default/foo.d/",
]
assert completions_less_escape == [
"shared/default/bar ",
r"shared/default/bar\ bar.d/",
"shared/default/foo ",
"shared/default/foo.d/",
]

0 comments on commit b6e9900

Please sign in to comment.