233 lines
3.7 KiB
Bash
Executable file
233 lines
3.7 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
bin=${1-./lxsh}
|
|
|
|
echo_red()
|
|
{
|
|
printf "\033[1;31m%s\033[0m\n" "$*"
|
|
exit 1
|
|
}
|
|
|
|
err=0
|
|
|
|
# $1 = file , $2 = extra print
|
|
# _LXSH_OPT : lxsh options
|
|
compile_test()
|
|
{
|
|
printf "%s%s: " "$1" "$2"
|
|
if errout=$($bin $_LXSH_OPT "$1" 2>&1 >/dev/null)
|
|
then
|
|
echo "Ok"
|
|
else
|
|
echo_red "Error"
|
|
echo "$errout"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# $1 = runner , $2 = file , $3 = extra print , $4 = runtime for lxsh
|
|
# _LXSH_OPT : lxsh options
|
|
exec_test()
|
|
{
|
|
run=$1
|
|
lxshrun=${4-$run}
|
|
ret1=$($run "$2")
|
|
stat1=$?
|
|
ret2=$($bin $_LXSH_OPT "$2" | $lxshrun)
|
|
stat2=$?
|
|
printf "%s%s: " "$2" "$3"
|
|
if [ "$ret1" = "$ret2" ] && [ $stat1 -eq $stat2 ]
|
|
then echo "Ok"
|
|
else
|
|
echo_red "Error"
|
|
echo ">> original stat $stat1
|
|
$ret1
|
|
>> compiled stat $stat2
|
|
$ret2"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
size_test()
|
|
{
|
|
shebang=$(head -n1 "$1" | grep '^#!')
|
|
c1=$($bin --no-shebang -m "$1" | wc -c)
|
|
c2=$($bin -m "$1" | shfmt -mn | wc -c)
|
|
printf "%s%s: " "$1" "$2"
|
|
if [ $c1 -lt $c2 ]
|
|
then echo "Ok"
|
|
else
|
|
echo_red "Too big"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# $1 = file , $2 = extra print , $3 = list , $@ = run options
|
|
list_test()
|
|
{
|
|
printf "%s%s: " "$1" "$2"
|
|
file=$1
|
|
varlist=$3
|
|
shift 3
|
|
diffout=$(diff <($bin "$file" "$@" | sort -k2) <(echo "$varlist" | sed '/^$/d' | sort -k2) )
|
|
if [ -z "$diffout" ] ; then
|
|
echo "Ok"
|
|
else
|
|
echo_red "Variable mismatch"
|
|
echo "$diffout"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
resolve="test/include.sh test/resolve.sh"
|
|
exec_exclude="test/prompt.sh $resolve"
|
|
|
|
|
|
echo "
|
|
============
|
|
| sh |
|
|
============
|
|
"
|
|
|
|
echo "== Parse =="
|
|
for I in test/*.sh
|
|
do
|
|
compile_test "$I" || err=$((err+1))
|
|
done
|
|
|
|
echo "== Exec =="
|
|
for I in $( echo test/*.sh $exec_exclude | tr -s ' \n' '\n' | sort | uniq -u )
|
|
do
|
|
exec_test sh "$I" || err=$((err+1))
|
|
_LXSH_OPT=-M exec_test sh "$I" " (minify)" || err=$((err+1))
|
|
done
|
|
|
|
echo "== Size =="
|
|
for I in test/*.sh
|
|
do
|
|
size_test "$I" || err=$((err+1))
|
|
done
|
|
|
|
echo "== Resolve =="
|
|
|
|
for I in $resolve
|
|
do
|
|
printf "%s: " "$I"
|
|
if errmsg=$($bin "$I" | sh 2>&1 >/dev/null) && [ -z "$errmsg" ]
|
|
then echo "Ok"
|
|
else
|
|
echo_red "Error"
|
|
echo ">> stderr
|
|
$errmsg"
|
|
err=$((err+1))
|
|
fi
|
|
done
|
|
|
|
varlist="
|
|
2 nul
|
|
2 ABCD
|
|
1 AYE
|
|
1 BAR
|
|
3 FOO
|
|
2 TATA
|
|
1 TITI
|
|
4 TOTO
|
|
1 TUTU
|
|
4 somevar
|
|
"
|
|
|
|
vardefs="
|
|
1 ABCD
|
|
1 BAR
|
|
2 FOO
|
|
1 TATA
|
|
1 TOTO
|
|
1 TUTU
|
|
1 nul
|
|
2 somevar
|
|
"
|
|
|
|
varcalls="
|
|
1 AYE
|
|
1 ABCD
|
|
1 FOO
|
|
1 TATA
|
|
1 TITI
|
|
3 TOTO
|
|
1 nul
|
|
2 somevar
|
|
"
|
|
|
|
varlist_used="
|
|
1 AYE
|
|
2 ABCD
|
|
3 FOO
|
|
2 TATA
|
|
1 TITI
|
|
4 TOTO
|
|
2 nul
|
|
4 somevar
|
|
"
|
|
|
|
echo "== Variables =="
|
|
{
|
|
list_test test/var.sh " (list)" "$varlist" --list-var || err=$((err+1))
|
|
list_test test/var.sh " (list-def)" "$vardefs" --list-var-def || err=$((err+1))
|
|
list_test test/var.sh " (list-call)" "$varcalls" --list-var-call || err=$((err+1))
|
|
list_test test/var.sh " (remove unused)" "$varlist_used" --remove-unused --list-var || err=$((err+1))
|
|
}
|
|
|
|
fctlist="
|
|
1 toto
|
|
1 tata
|
|
"
|
|
|
|
fctlist_used="
|
|
1 toto
|
|
"
|
|
|
|
cmdlist="
|
|
2 echo
|
|
1 toto
|
|
"
|
|
|
|
echo "== Functions =="
|
|
{
|
|
list_test test/fct.sh " (list-fct)" "$fctlist" --list-fct || err=$((err+1))
|
|
list_test test/fct.sh " (list-cmd)" "$cmdlist" --list-cmd || err=$((err+1))
|
|
list_test test/fct.sh " (remove unused)" "$fctlist_used" --remove-unused --list-fct || err=$((err+1))
|
|
}
|
|
|
|
echo "
|
|
============
|
|
| bash |
|
|
============
|
|
"
|
|
|
|
echo "== Parse =="
|
|
for I in test/*.bash
|
|
do
|
|
compile_test "$I" || err=$((err+1))
|
|
done
|
|
|
|
echo "== Exec =="
|
|
for I in test/*.bash
|
|
do
|
|
exec_test bash "$I" || err=$((err+1))
|
|
_LXSH_OPT=-m exec_test bash "$I" " (minify)" || err=$((err+1))
|
|
done
|
|
|
|
echo "== Size =="
|
|
for I in test/*.bash
|
|
do
|
|
size_test "$I" || err=$((err+1))
|
|
done
|
|
|
|
echo "== Debashify =="
|
|
for I in test/{debashify.bash,array.bash,echo.bash}
|
|
do
|
|
_LXSH_OPT=--debashify exec_test bash "$I" "" sh || err=$((err+1))
|
|
_LXSH_OPT="-m --debashify" exec_test bash "$I" " (minify)" sh || err=$((err+1))
|
|
done
|
|
|
|
exit $err
|