aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/test6.in
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2016-04-07 15:24:52 -0700
committerGravatar Kurtis Rader <krader@skepticism.us>2016-04-07 20:15:32 -0700
commite395a0eb6927f298fcc7d0764ed27605941f34c0 (patch)
tree9f8bda281145b800128c246fbf84952a0dc8a191 /tests/test6.in
parent36691df6fe4667645b71b550ce5eea90762ac23a (diff)
Migrate PATH-completion logic from complete.cpp to expand.cpp
Prior to this fix, when completing a command that doesn't have a /, we would prepend each component of PATH and then expand the whole thing. So any special characters in the PATH would be interpreted when performing tab completion. With this fix, we pull the PATH resolution out of complete.cpp and migrate it to expand.cpp. This unifies nicely with the CDPATH resolution already in that file. This requires introducing a new expand flag EXPAND_SPECIAL_FOR_COMMAND, which is analogous to EXPAND_SPECIAL_CD (which is renamed to EXPAND_SPECIAL_FOR_CD). This flag tells expand to resolve paths against PATH instead of the working directory. Fixes #952
Diffstat (limited to 'tests/test6.in')
-rw-r--r--tests/test6.in34
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/test6.in b/tests/test6.in
index 252eb606..0d6ef487 100644
--- a/tests/test6.in
+++ b/tests/test6.in
@@ -72,3 +72,37 @@ if begin; rm -rf test6.tmp.dir; and mkdir test6.tmp.dir; end
else
echo "error: could not create temp environment" >&2
end
+
+# Test command expansion with parened PATHs (#952)
+begin
+ set -l parened_path $PWD/'test6.tmp2.(paren).dir'
+ set -l parened_subpath $parened_path/subdir
+ if not begin
+ rm -rf $parened_path
+ and mkdir $parened_path
+ and mkdir $parened_subpath
+ and ln -s /bin/ls $parened_path/'__test6_(paren)_command'
+ and ln -s /bin/ls $parened_subpath/'__test6_subdir_(paren)_command'
+ end
+ echo "error: could not create command expansion temp environment" >&2
+ end
+
+ # Verify that we can expand commands when PATH has parens
+ set -l PATH $parened_path $PATH
+ set -l completed (complete -C__test6_ | cut -f 1 -d \t)
+ if test "$completed" = '__test6_(paren)_command'
+ echo "Command completion with parened PATHs test passed"
+ else
+ echo "Command completion with parened PATHs test failed. Expected __test6_(paren)_command, got $completed" >&2
+ end
+
+ # Verify that commands with intermediate slashes do NOT expand with respect to PATH
+ set -l completed (complete -Csubdir/__test6_subdir)
+ if test -z "$completed"
+ echo "Command completion with intermediate slashes passed"
+ else
+ echo "Command completion with intermediate slashes: should output nothing, instead got $completed" >&2
+ end
+
+ rm -rf $parened_path
+end