summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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