jerryscript/tools/runners/run-unittests.sh
Peter Marki 47087dec56 Improve the output format of the testrunner (#2438)
JerryScript-DCO-1.0-Signed-off-by: Peter Marki marpeter@inf.u-szeged.hu
2018-08-08 23:33:02 +09:00

122 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
# Copyright JS Foundation and other contributors, http://js.foundation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
DIR="$1"
shift
VERBOSE=1
if [ "$1" == "-q" ]
then
unset VERBOSE
shift
fi
UNITTEST_ERROR=$DIR/unittests.failed
UNITTEST_OK=$DIR/unittests.passed
rm -f $UNITTEST_ERROR $UNITTEST_OK
UNITTESTS=$(find $DIR -maxdepth 1 -type f -name 'unit-*')
total=$(find $DIR -maxdepth 1 -type f -name 'unit-*' | wc -l)
if [ "$total" -eq 0 ]
then
echo "$0: $DIR: no unit-* test to execute"
exit 1
fi
ROOT_DIR=""
CURRENT_DIR=`pwd`
PATH_STEP=2
while true
do
TMP_ROOT_DIR=`(echo "$CURRENT_DIR"; echo "$0"; echo "$DIR") | cut -f1-$PATH_STEP -d/ | uniq -d`
if [ -z "$TMP_ROOT_DIR" ]
then
break
else
ROOT_DIR="$TMP_ROOT_DIR"
fi
PATH_STEP=$((PATH_STEP+1))
done
if [ -n "$ROOT_DIR" ]
then
ROOT_DIR="$ROOT_DIR/"
fi
tested=1
failed=0
passed=0
UNITTEST_TEMP=`mktemp unittest-out.XXXXXXXXXX`
TERM_NORMAL="\033[0m"
TERM_RED="\033[1;31m"
TERM_GREEN="\033[1;32m"
for unit_test in $UNITTESTS
do
cmd_line="$RUNTIME ${unit_test#$ROOT_DIR}"
$RUNTIME $unit_test &>$UNITTEST_TEMP
status_code=$?
if [ $status_code -ne 0 ]
then
printf "[%4d/%4d] %bFAIL (%d): %s%b\n" "$tested" "$total" "$TERM_RED" "$status_code" "${unit_test#$ROOT_DIR}" "$TERM_NORMAL"
cat $UNITTEST_TEMP
echo "$status_code: $unit_test" >> $UNITTEST_ERROR
echo "============================================" >> $UNITTEST_ERROR
cat $UNITTEST_TEMP >> $UNITTEST_ERROR
echo "============================================" >> $UNITTEST_ERROR
echo >> $UNITTEST_ERROR
echo >> $UNITTEST_ERROR
failed=$((failed+1))
else
test $VERBOSE && printf "[%4d/%4d] %bPASS: %s%b\n" "$tested" "$total" "$TERM_GREEN" "${unit_test#$ROOT_DIR}" "$TERM_NORMAL"
echo "$unit_test" >> $UNITTEST_OK
passed=$((passed+1))
fi
tested=$((tested+1))
done
rm -f $UNITTEST_TEMP
ratio=$(echo $passed*100/$total | bc)
if [ $passed -eq $total ]
then
success_color=$TERM_GREEN
else
success_color=$TERM_RED
fi
echo -e "\n[summary] ${DIR#$ROOT_DIR}/unit-*\n"
echo -e "TOTAL: $total"
echo -e "${TERM_GREEN}PASS: $passed${TERM_NORMAL}"
echo -e "${TERM_RED}FAIL: $failed${TERM_NORMAL}\n"
echo -e "${success_color}Success: $ratio%${TERM_NORMAL}\n"
if [ $failed -ne 0 ]
then
echo "$0: see $UNITTEST_ERROR for details about failures"
exit 1
fi
exit 0