1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
#!/bin/bash
declare -a rf
# check tty mode (whether we can colorize)
if [ -t 1 ]; then
GRN="\e[32m"
RED="\e[31m"
GRY="\e[37m"
YLW="\e[33m"
CYN="\e[36m"
NRM="\e[0m"
else
GRN=""
RED=""
GRY=""
YLW=""
CYN=""
NRM=""
fi
rf=()
i=0
for prefix in $*; do
echo "Collecting tests from $prefix"
while read full ; do
# full-path:prefix:path-without-prefix:path-without-prefix-filename
relative=`echo $full | sed -e "s#^$prefix##g"`
file=`echo $relative | sed -e "s#/in.yaml##g" | tr '/' '-'`
rf+=( "$full:$prefix:$relative:$file" )
# echo ${rf[$i]}
i=$(($i + 1))
done < <(find "$prefix" -name "in.yaml" -print | sort)
done
count=${#rf[@]}
mkdir -p output
pass=0
fail=0
unknown=0
experr=0
for (( i=0; i < $count; i++)); do
v="${rf[$i]}"
full=`echo $v | cut -d: -f1`
prefix=`echo $v | cut -d: -f2`
relative=`echo $v | cut -d: -f3`
file=`echo $v | cut -d: -f4`
# echo "$i: full=$full prefix=$prefix relative=$relative file=$file"
f="output/$file.yaml"
rm -f "$f" "output/$file.pass" "output/$file.fail" \
"output/$file.unknown" "output/$file.desc" \
"output/$file.event"
ln -s `realpath $full` "$f"
desc=`echo $full | sed -e 's#in.yaml#===#'`
desctxt=""
if [ -e "$desc" ]; then
descf=`realpath $desc`
ln -s "$descf" "output/$file.desc"
desctxt=`cat 2>/dev/null "$descf"`
fi
event=`echo $full | sed -e 's#in.yaml#test.event#'`
if [ -e "$event" ]; then
eventf=`realpath $event`
ln -s "$eventf" "output/$file.event"
fi
errf=`echo $full | sed -e 's#in.yaml#error#'`
if [ -e "$errf" ] ; then
expected_error="1"
exp="!"
else
expected_error="0"
exp="-"
fi
this_fail=0
this_unknown=0
a0="output/$file.libyaml"
a1="output/$file.libfyaml"
pass0=0
pass1=0
diff=0
# execute both libyaml & libfyaml
./src/libfyaml-parser -mlibyaml-parse "$f" > "$a0" 2>/dev/null
if [ $? -eq 0 ]; then pass0=1; fi
./src/libfyaml-parser -mparse "$f" > "$a1" 2>/dev/null
if [ $? -eq 0 ]; then pass1=1; fi
# compare output anyway
diff -u "$a0" "$a1" > "output/$file.diff"
if [ $? -eq 0 ]; then diff=1; fi
if [ $expected_error -eq 0 ]; then
# it fails if any fail
this_fail=$(($pass0 == 0 || $pass1 == 0 || $diff == 0))
this_unknown=$(($pass0 == 0))
else
# test expected to fail (both must fail)
this_fail=$(($pass0 == 1 || $pass1 == 1))
this_unknown=$(($pass0 == 1))
fi
if [ $this_unknown -ne 0 ]; then
touch "output/$file.unknown"
if [[ $pass1 == $pass0 ]]; then
COL="${GRY}"
else
COL="${CYN}"
fi
res="${COL}UNKN${NRM}"
unknown=$(($unknown + 1))
elif [ $this_fail -ne 0 ]; then
touch "output/$file.fail"
res="${RED}FAIL${NRM}"
fail=$(($fail + 1))
else
touch "output/$file.pass"
res="${GRN}PASS${NRM}"
pass=$(($pass + 1))
fi
echo -e "${exp}${pass0}${pass1} ${res} $file: $desctxt"
done
echo
echo -e " TOTAL: ${count}"
echo -e " PASS: ${GRN}${pass}${NRM}"
echo -e " FAIL: ${RED}${fail}${NRM}"
echo -e "UNKNOWN: ${GRY}${unknown}${NRM}"
|