You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
183 lines
3.2 KiB
183 lines
3.2 KiB
#!/usr/bin/env miaou-bash
|
|
|
|
# CONSTANTS
|
|
|
|
BASEDIR=$(dirname "$0")
|
|
readonly BASEDIR
|
|
|
|
# SCENARII
|
|
|
|
function do_subshell_false {
|
|
echo 'about to echo false'
|
|
result=$(false)
|
|
}
|
|
|
|
function do_subshell_term {
|
|
echo "found2=$(grep nope nope)"
|
|
echo "found1=$(command_not_found)"
|
|
echo SHOULD NOT SHOW UP!
|
|
}
|
|
|
|
function do_last_false {
|
|
# FIXME: provides error detection
|
|
! true
|
|
}
|
|
|
|
function do_return {
|
|
echo START
|
|
return 99
|
|
}
|
|
|
|
function do_command_not_found {
|
|
echo START
|
|
command_not_found A B C
|
|
echo SHOULD NOT APPEAR
|
|
}
|
|
|
|
function do_exit {
|
|
echo START
|
|
call_function_which_will_exit
|
|
echo SHOULD NOT APPEAR
|
|
}
|
|
|
|
function do_unbound_associative {
|
|
declare -A associative
|
|
associative['A']='Abc'
|
|
|
|
# this is fine
|
|
[[ -v associative['A'] ]] && echo "${associative['A']}"
|
|
[[ -v associative['B'] ]] && echo "${associative['B']}"
|
|
|
|
# this fails
|
|
echo "${associative['B']}"
|
|
}
|
|
|
|
function do_false {
|
|
echo before false
|
|
echo -n 'paragraph...'
|
|
false
|
|
echo after false
|
|
}
|
|
|
|
function do_success {
|
|
echo -n 'SUCCESS args=['
|
|
(
|
|
IFS=','
|
|
echo -n "$*"
|
|
)
|
|
echo ']'
|
|
source "${MIAOU_BASH_DIR}/lib/ansi.bash"
|
|
local content
|
|
content=$(PADDING_LEFT=2 PADDING_RIGHT=6 style_padding 'this is success')
|
|
content=$(FG=YELLOW BG=BLUE style_ansi "$content")
|
|
FG=BLACK BG=RED PADDING=8 style_block "$content"
|
|
}
|
|
|
|
function do_unbound_variable {
|
|
a=5
|
|
echo "a=${a}"
|
|
echo "b=${b}"
|
|
}
|
|
|
|
function do_source_not_found {
|
|
source "./lib/fake/nope.bash"
|
|
}
|
|
|
|
function do_file_not_found {
|
|
./lib/fake/nope.bash
|
|
}
|
|
|
|
function do_subshell_source_not_found {
|
|
output=$(miaou_debug "---subshell1--$$ $BASHPID $PPID--")
|
|
output=$(miaou_debug "---subshell2--$$ $BASHPID $PPID--")
|
|
: "$output"
|
|
"${MIAOU_BASH_DIR}/test/stub/extra/library.bash"
|
|
|
|
}
|
|
|
|
function do_subshell_error {
|
|
:
|
|
}
|
|
# FUNCTIONS
|
|
|
|
function call_function_which_will_exit {
|
|
exit 99
|
|
|
|
}
|
|
|
|
function F2 {
|
|
echo "stdout A"
|
|
# echo toto >>/tmp/toto
|
|
return
|
|
>&2 echo "This is stderr"
|
|
|
|
blabla
|
|
$nope
|
|
exit 6
|
|
grep titi toto
|
|
echo "stdout B"
|
|
echo "stdout C"
|
|
# command_not_found
|
|
}
|
|
|
|
function F1 {
|
|
echo F1
|
|
F2
|
|
}
|
|
|
|
function main {
|
|
F1
|
|
F3
|
|
echo before subshell
|
|
echo "here in subshell $(grep titi $0)"
|
|
echo NO MORE
|
|
|
|
result=$(grep titi $0)
|
|
[[ "$result" -ne 0 ]] && echo true
|
|
# grep titi nope
|
|
>&2 echo some trace in stderr1
|
|
"$BASEDIR/extra/library.bash"
|
|
. "$BASEDIR/lib/utility.bash"
|
|
# . not_found/not_found.bash
|
|
# echo "here in subshell $(grep titi nope)"
|
|
# ls -l nope
|
|
>&2 echo some trace in stderr2
|
|
}
|
|
|
|
function F3 {
|
|
echo F3
|
|
return 0
|
|
}
|
|
|
|
function usage {
|
|
introspect_scenarii
|
|
(
|
|
IFS='|'
|
|
echo "USAGE: $0 <${SCENARII[*]}>"
|
|
)
|
|
echo -e "\trun case scenario which performs various bash statements and mostly fails"
|
|
echo -e "\tthese case scenarii helps testing the miaou-bash script"
|
|
}
|
|
|
|
function introspect_scenarii {
|
|
mapfile -t SCENARII <<<"$(compgen -A function | grep ^do_ | sed 's/...//')"
|
|
}
|
|
|
|
function test_contain_item {
|
|
local -n array=$1
|
|
for item in "${array[@]}"; do [[ "$item" == "$2" ]] && return 0; done
|
|
return 1
|
|
}
|
|
|
|
# MAIN
|
|
|
|
[[ $# -eq 0 ]] && >&2 echo 'arg1 expected!' && usage && exit 1
|
|
|
|
scenario="$1"
|
|
introspect_scenarii
|
|
if test_contain_item SCENARII "$scenario"; then
|
|
shift
|
|
"do_${scenario}" "$@"
|
|
else
|
|
(>&2 echo "scenario <${scenario}> not found!" && usage && exit 2)
|
|
fi
|