fork 0k-charms
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.
 
 

166 lines
3.7 KiB

# -*- mode: shell-script -*-
exname="$(basename $0)"
if [ -t 1 ]; then
GRAY=$(echo -en "\e[1;30m")
RED=$(echo -en "\e[1;31m")
GREEN=$(echo -en "\e[1;32m")
YELLOW=$(echo -en "\e[1;33m")
BLUE=$(echo -en "\e[1;34m")
PINK=$(echo -en "\e[1;35m")
CYAN=$(echo -en "\e[1;36m")
WHITE=$(echo -en "\e[1;37m")
DARKGRAY=$(echo -en "\e[0;30m")
DARKRED=$(echo -en "\e[0;31m")
DARKGREEN=$(echo -en "\e[0;32m")
DARKYELLOW=$(echo -en "\e[0;33m")
DARKBLUE=$(echo -en "\e[0;34m")
DARKPINK=$(echo -en "\e[0;35m")
DARKCYAN=$(echo -en "\e[0;36m")
NORMAL=$(echo -en "\e[0m")
fi
function out() { cat "$tmp_out"; }
function err() { cat "$tmp_err"; }
function errlvl() { cat "$tmp_errlvl"; }
function var() { echo "${$1}"; }
function time_note() {
echo "scale=1 ; l($1 - $empty_try_time) / l(10)" | bc -l
}
function swallow_last_time() {
if test "$sum_time" == "0" -a -z "$cmd"; then ## catches first empty try ''
empty_try_time="$(echo "scale=0 ; $time_diff / 2" | bc -l )"
return 0
fi
test -z "$test_counter" && test_counter=0 || test_counter=$[$test_counter + 1]
test -z "$sum_time" && sum_time=0
test_name=${exname}_${test_counter}
if test "$time_diff"; then
test_time_note=$(time_note $time_diff)
profiler_info="$(echo -en "$profiler_info\n- $test_name\t$test_time_note")"
sum_time=$(echo "scale=3; $sum_time + $time_diff" | bc -l )
fi
}
function time_exec() {
beg_exec=$(date +%s.%N)
( echo "$*" | bash )
errorlevel=$?
end_exec=$(date +%s.%N)
time_diff="$(echo "scale=3; ($end_exec - $beg_exec)*1000000" | bc | cut -f 1 -d ".")"
return $errorlevel
}
function try() {
swallow_last_time
cmd="$*"
desc=$(echo ; echo "$ $cmd" )
time_exec "$prefix_cmd$cmd" 1> "$tmp_out" 2> "$tmp_err"
echo $? > "$tmp_errlvl"
}
function apply_opt() {
code=$(cat -)
for opt in $*; do
code=$(echo "$code" | $opt)
done
echo "$code"
}
function NOCOLOR() {
esc_char=$(echo -en "\e")
cat - | sed -r "s/$esc_char\[[0-9]+(;[0-9]+)*m//g"
}
function NOPOS() {
esc_char=$(echo -en "\e\\[[0-9]\\+[GA]")
cat - | sed "s/$esc_char//g"
}
function TRIM() {
cat - | sed -r "s/^ +//g" | sed -r "s/ +\$//g"
}
function RTRIM() {
cat - | sed -r "s/ +\$//g"
}
function SIZE() {
cat - | wc -c
}
## usage:
## is ACTION [reg] CODE [OPTION ...]
is() {
local act="$1" type code msg
test -z "$total" && total=0
shift
case "$1" in
reg|part)
type="$1"
shift
;;
*)
type=""
;;
esac
code="$1"
shift
#code=$(echo "$code" | apply_opt $*)
msg=$(echo "$type $code" | cut -c -30)
output=$($act | apply_opt $*)
case "$type" in
"")
test "$code" == "$output"
;;
"part")
[[ "$output" == *"$code"* ]]
;;
("reg")
echo -n "$output" | egrep -- "$code" >/dev/null 2>&1
;;
esac && total=$[$total + 1] &&
echo "[v] is $act $msg" >/dev/null && return 0
echo "$desc"
echo "[ ] is $act $msg"
echo "--- $*"
echo -n "$output"
echo
echo "--- DIFF"
diff -u <(echo "$code") <(echo "$output") | egrep -v '^(---|\+\+\+) /'
exit 1
}
function summary() {
swallow_last_time
echo "$profiler_info"
echo
echo "$total tests conducted in $(echo "scale=3;$sum_time/1000000" | bc) s ($(time_note $sum_time))"
}
function noerror() {
is err ''
is errlvl 0
}
pid=$$
tmp_dir="/tmp"
tmp_out="$tmp_dir/test.$pid.out.tmp"
tmp_err="$tmp_dir/test.$pid.err.tmp"
tmp_errlvl="$tmp_dir/test.$pid.errlvl.tmp"
try ''
try ''
try ''