From de116fcf9e37b8e3c5b70b40ddee508f3737b847 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C5=82awomir=20=C5=9Aled=C5=BA?= Date: Sat, 10 Mar 2018 22:07:30 +0100 Subject: [PATCH] New version of try and new function --- src/fun.sh | 23 +++++++++++++++++------ test/catch_test.sh | 19 +++++++++++++++++++ test/try_test.sh | 9 +++++++++ 3 files changed, 45 insertions(+), 6 deletions(-) create mode 100755 test/catch_test.sh create mode 100755 test/try_test.sh diff --git a/src/fun.sh b/src/fun.sh index 207bb6e..3ab111d 100755 --- a/src/fun.sh +++ b/src/fun.sh @@ -167,13 +167,18 @@ revers_str() { cat - | splitc | revers | join } -try() { +catch() { local f="$@" local cmd=$(cat -) - local ret=$(2>&1 eval "$cmd"; echo $?) - local cnt=$(list $ret | wc -l) - local status=$(list $ret | last) - list "$cmd" $status $(list $ret | take $((cnt - 1)) | join \#) | $f + local val=$(2>&1 eval "$cmd"; echo $?) + local cnt=$(list $val | wc -l) + local status=$(list $val | last) + list "$cmd" $status $(list $val | take $((cnt - 1)) | unlist | tup) | $f +} + +try() { + local f="$@" + catch lambda cmd status val . '[[ $status -eq 0 ]] && tupl $val || list $status | '$f } ret() { @@ -220,7 +225,13 @@ buff() { } tup() { - list "$@" | map lambda x . 'echo ${x/,/u002c}' | join , '(' ')' + if [[ $# -eq 0 ]]; then + local arg + read arg + tup $arg + else + list "$@" | map lambda x . 'echo ${x/,/u002c}' | join , '(' ')' + fi } tupx() { diff --git a/test/catch_test.sh b/test/catch_test.sh new file mode 100755 index 0000000..b3f0917 --- /dev/null +++ b/test/catch_test.sh @@ -0,0 +1,19 @@ +#! /bin/bash + +testCatchIfSuccess() { + assertEquals 1 "$(echo 'expr 2 / 2' | catch lambda cmd status val . '[[ $status -eq 0 ]] && tupl $val || echo 0')" +} + +testCatchIfError() { + assertEquals 0 $(echo 'expr 2 / 0' | catch lambda cmd status val . '[[ $status -eq 0 ]] && tupl $val || echo 0') + assertEquals 'cmd=expr 2 / 0,status=2,val=(expr:,division,by,zero)' "$(echo 'expr 2 / 0' | echo 'expr 2 / 0' | LANG=en catch lambda cmd status val . 'echo cmd=$cmd,status=$status,val=$val')" +} + +testCatchEdgeCases() { + assertEquals 1 "$(echo 'expr 2 / 2' | catch lambda _ _ val . 'tupl $val')" + assertEquals 'expr 2 / 2' "$(echo 'expr 2 / 2' | catch lambda cmd . 'ret $cmd')" + assertEquals 'expr 2 / 2,0' "$(echo 'expr 2 / 2' | catch lambda cmd status . 'ret $cmd,$status')" + assertEquals 'expr 2 / 0,2' "$(echo 'expr 2 / 0' | catch lambda cmd status . 'ret $cmd,$status')" +} + +. ./shunit2-init.sh \ No newline at end of file diff --git a/test/try_test.sh b/test/try_test.sh new file mode 100755 index 0000000..992ae49 --- /dev/null +++ b/test/try_test.sh @@ -0,0 +1,9 @@ +#! /bin/bash + +testTry() { + assertEquals 1 "$(echo 'expr 2 / 2' | try lambda _ . 'ret 0')" + assertEquals 0 "$(echo 'expr 2 / 0' | try lambda _ . 'ret 0')" + assertEquals 2 "$(echo 'expr 2 / 0' | try lambda status . 'ret $status')" +} + +. ./shunit2-init.sh \ No newline at end of file