summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorIgor Murzov <e-mail@date.by>2011-09-26 00:22:05 +0400
committerIgor Murzov <e-mail@date.by>2011-09-30 22:21:47 +0400
commit5051b1787ad384b342aba2f00a56130c25b6fc7f (patch)
tree5efb58e8dd3a038a844670e748a83782f271304d /test
parentb9a5f508e2b2ed9e4a06b2adae254debcc4a749a (diff)
downloadbash-completion-5051b1787ad384b342aba2f00a56130c25b6fc7f.tar.gz
_command_offset: Restore compopts used by called command.
This fixes completions that rely on their compopts, most notably mount(8). Fixes bash-completion bug #313183.
Diffstat (limited to 'test')
-rw-r--r--test/lib/completions/mount.exp9
-rw-r--r--test/lib/completions/sudo.exp59
2 files changed, 67 insertions, 1 deletions
diff --git a/test/lib/completions/mount.exp b/test/lib/completions/mount.exp
index c99d6058..1298f36f 100644
--- a/test/lib/completions/mount.exp
+++ b/test/lib/completions/mount.exp
@@ -30,7 +30,7 @@ proc setup {} {
proc teardown {} {
teardown_dummy_mnt
- assert_env_unmodified
+ assert_env_unmodified {/OLDPWD/d}
}
@@ -49,6 +49,13 @@ assert_complete_any "mount -t "
sync_after_int
+set test "mount /dev/sda1 def should complete directory name"
+assert_complete_dir "default/" "mount /dev/sda1 def" $::srcdir/fixtures/shared $test -nospace
+
+
+sync_after_int
+
+
set test "Check completing nfs mounts"
set expected [list /test/path /test/path2 /second/path]
set cmd "mount mocksrv:/"
diff --git a/test/lib/completions/sudo.exp b/test/lib/completions/sudo.exp
index d6bbbbb6..6108ddce 100644
--- a/test/lib/completions/sudo.exp
+++ b/test/lib/completions/sudo.exp
@@ -24,4 +24,63 @@ assert_complete_dir fixtures/ "sudo sh fix" $::srcdir "" -nospace
sync_after_int
+# test that `mount` and `sudo mount` behave the same way
+set test "sudo mount /dev/sda1 def should complete directory name"
+assert_complete_dir "default/" "sudo mount /dev/sda1 def" $::srcdir/fixtures/shared $test -nospace
+
+
+sync_after_int
+
+
+# Find user/group suitable for testing.
+set failed_find_unique_completion 0
+foreach ug {user group} {
+ # compgen -A is used because it's a bash builtin and available everywhere.
+ # The || true part prevents exec from throwing an exception if nothing is
+ # found (very very unlikely).
+ set list [split [exec bash -c "compgen -A $ug || true"] "\n"]
+ if {![find_unique_completion_pair $list part$ug full$ug]} {
+ untested "Not running complex chown tests; no suitable test $ug found."
+ set failed_find_unique_completion 1
+ }
+}
+
+# These tests require an unique completion.
+if {!$failed_find_unique_completion} {
+ assert_complete $fulluser "sudo chown $partuser"
+ sync_after_int
+
+ assert_complete $fulluser:$fullgroup "sudo chown $fulluser:$partgroup"
+ sync_after_int
+
+ assert_complete "dot.user:$fullgroup" "sudo chown dot.user:$partgroup"
+ sync_after_int
+
+ foreach prefix {
+ "funky\\ user:" "funky.user:" "funky\\.user:" "fu\\ nky.user:"
+ "f\\ o\\ o\\.\\bar:" "foo\\_b\\ a\\.r\\ :"
+ } {
+ set test "Check preserve special chars in $prefix$partgroup<TAB>"
+ #assert_complete_into "chown $prefix$partgroup" "chown $prefix$fullgroup " $test
+ assert_complete $prefix$fullgroup "sudo chown $prefix$partgroup" $test
+ sync_after_int
+ }
+
+ # Check that we give up in degenerate cases instead of spewing various junk.
+
+ assert_no_complete "sudo chown $fulluser\\\\:$partgroup"
+ sync_after_int
+
+ assert_no_complete "sudo chown $fulluser\\\\\\:$partgroup"
+ sync_after_int
+
+ assert_no_complete "sudo chown $fulluser\\\\\\\\:$partgroup"
+ sync_after_int
+
+ # Colons in user/groupnames are not usually allowed.
+ assert_no_complete "sudo chown foo:bar:$partgroup"
+ sync_after_int
+}
+
+
teardown