From d352b0421b4d43bb5c2162db73c219d3ab6652b9 Mon Sep 17 00:00:00 2001 From: Christian Couder Date: Mon, 28 Sep 2015 08:54:44 +0200 Subject: [PATCH 1/3] Add t0015-basic-sh-functions.sh License: MIT Signed-off-by: Christian Couder --- test/sharness/t0015-basic-sh-functions.sh | 47 +++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100755 test/sharness/t0015-basic-sh-functions.sh diff --git a/test/sharness/t0015-basic-sh-functions.sh b/test/sharness/t0015-basic-sh-functions.sh new file mode 100755 index 000000000..202cfca58 --- /dev/null +++ b/test/sharness/t0015-basic-sh-functions.sh @@ -0,0 +1,47 @@ +#!/bin/sh +# +# Copyright (c) 2015 Christian Couder +# MIT Licensed; see the LICENSE file in this repository. +# + +test_description="Test some basic shell functions" + +. lib/test-lib.sh + +test_expect_success "shellquote works with simple stuff" ' + var=$(shellquote one two) +' + +test_expect_success "shellquote output looks good" ' + test "$var" = "'\''one'\'' '\''two'\''" || + test_fsh echo "var is \"$var\" instead of \"'\''one'\'' '\''two'\''\"" +' + +# The following two printf statements are equivalent: +# printf "%s\n" \''"foo\ +# bar' +# printf "\047\042\146\157\157\134\012\142\141\162\012" +# We use the second one to simplify quoting. + +test_expect_success "shellquote works with complex printf" ' + eval "$(shellquote printf "\047\042\146\157\157\134\012\142\141\162\012")" >actual +' + +test_expect_success "shellquote output looks good" ' + printf "\047\042\146\157\157\134\012\142\141\162\012" >expected && + test_cmp expected actual +' + +test_expect_success "shellquote works with many different bytes" ' + bytes_sans_NUL=$( + printf "\001\002\003\004\005\006\007\010\011\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044%%\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377" + ) && + eval "$(shellquote printf "%s" "$bytes_sans_NUL")" >actual +' + +test_expect_success "shellquote output looks good" ' + printf "%s" "$bytes_sans_NUL" >expected && + test_cmp expected actual +' + +test_done From 4cab9fe37ee0e9d161f94c4817fbe0ada3406317 Mon Sep 17 00:00:00 2001 From: Christian Couder Date: Sat, 3 Oct 2015 16:06:40 +0200 Subject: [PATCH 2/3] ipfs-test-lib: fix shellquote() on Mac OS License: MIT Signed-off-by: Christian Couder --- test/ipfs-test-lib.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ipfs-test-lib.sh b/test/ipfs-test-lib.sh index 938e02115..040addd82 100644 --- a/test/ipfs-test-lib.sh +++ b/test/ipfs-test-lib.sh @@ -29,7 +29,7 @@ shellquote() { for _arg do printf '%s' "$_space" - printf '%s' "$_arg" | sed -e "s/'/'\\\\''/g; s/^/'/; s/\$/'/;" + printf '%s' "$(printf '%s' "$_arg" | sed -e "s/'/'\\\\''/g; s/^/'/; s/\$/'/;")" _space=' ' done printf '\n' From 088aa1a62347cb550bd8df6e8cb5129543b43839 Mon Sep 17 00:00:00 2001 From: Christian Couder Date: Sat, 3 Oct 2015 23:35:26 +0200 Subject: [PATCH 3/3] ipfs-test-lib: clarify and simplify shellquote() Let's first add a comment to explain why the wrapper printf() is needed. Then let's replace the last instructions by quotes inside the wrapper printf() first argument, and let's also put there the eventual space so that we can remove the printf on the above line. License: MIT Signed-off-by: Christian Couder --- test/ipfs-test-lib.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/ipfs-test-lib.sh b/test/ipfs-test-lib.sh index 040addd82..b05287c2e 100644 --- a/test/ipfs-test-lib.sh +++ b/test/ipfs-test-lib.sh @@ -28,8 +28,9 @@ shellquote() { _space='' for _arg do - printf '%s' "$_space" - printf '%s' "$(printf '%s' "$_arg" | sed -e "s/'/'\\\\''/g; s/^/'/; s/\$/'/;")" + # On Mac OS, sed adds a newline character. + # With a printf wrapper the extra newline is removed. + printf "$_space'%s'" "$(printf "%s" "$_arg" | sed -e "s/'/'\\\\''/g;")" _space=' ' done printf '\n'