summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVille Skyttä <ville.skytta@iki.fi>2011-12-12 00:22:09 +0200
committerVille Skyttä <ville.skytta@iki.fi>2011-12-12 00:22:09 +0200
commit260e2a1eeb7892daacea5294b9e3f5beb9054f60 (patch)
tree66db6edec76f113cf3d26d58c83b3169737b37e1
parent723b0771ad200ef8f22e1d3fcd3ae5d392a69a27 (diff)
downloadbash-completion-260e2a1eeb7892daacea5294b9e3f5beb9054f60.tar.gz
quote: Preserve leading, trailing, and consecutive whitespace.
-rw-r--r--bash_completion3
-rw-r--r--test/unit/quote.exp69
2 files changed, 71 insertions, 1 deletions
diff --git a/bash_completion b/bash_completion
index 0eecb158..ebebb8e0 100644
--- a/bash_completion
+++ b/bash_completion
@@ -142,7 +142,8 @@ _rl_enabled()
# This function shell-quotes the argument
quote()
{
- echo \'${1//\'/\'\\\'\'}\' #'# Help vim syntax highlighting
+ local quoted=${1//\'/\'\\\'\'}
+ printf "'%s'" "$quoted"
}
# @see _quote_readline_by_ref()
diff --git a/test/unit/quote.exp b/test/unit/quote.exp
new file mode 100644
index 00000000..afe670a2
--- /dev/null
+++ b/test/unit/quote.exp
@@ -0,0 +1,69 @@
+proc setup {} {
+ save_env
+}
+
+
+proc teardown {} {
+ assert_env_unmodified
+}
+
+
+setup
+
+
+set cmd {quote "a b"}
+set test {quote "a b" should output 'a b'}
+send "$cmd\r"
+expect -ex "$cmd\r\n"
+expect {
+ -re {'a b'} { pass $test }
+ default { fail $test }
+}
+sync_after_int
+
+
+set cmd {quote "a b"}
+set test {quote "a b" should output 'a b'}
+send "$cmd\r"
+expect -ex "$cmd\r\n"
+expect {
+ -re {'a b'} { pass $test }
+ default { fail $test }
+}
+sync_after_int
+
+
+set cmd {quote " a "}
+set test {quote " a " should output ' a '}
+send "$cmd\r"
+expect -ex "$cmd\r\n"
+expect {
+ -re {' a '} { pass $test }
+ default { fail $test }
+}
+sync_after_int
+
+
+set cmd {quote "a'b'c"}
+set test {quote "a'b'c" should output 'a'\''b'\''c'}
+send "$cmd\r"
+expect -ex "$cmd\r\n"
+expect {
+ -re {'a'\\''b'\\''c'} { pass $test }
+ default { fail $test }
+}
+sync_after_int
+
+
+set cmd {quote "a'"}
+set test {quote "a'" should output 'a'\'''}
+send "$cmd\r"
+expect -ex "$cmd\r\n"
+expect {
+ -re {'a'\\'''} { pass $test }
+ default { fail $test }
+}
+sync_after_int
+
+
+teardown