mutter/cogl/tests/run-tests.sh
Marco Trevisan (Treviño) 2b8f5e65b6 cogl/tests: Run tests supports both test names and files as parameter
Make run-tests.sh to support as arguments both an unit-tests file or test names

This allows to run a test with this script without having to create fake files.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/442
2019-05-02 19:56:23 +00:00

158 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
if test -z "$G_DEBUG"; then
G_DEBUG=fatal-warnings
else
G_DEBUG="$G_DEBUG,fatal-warnings"
fi
export G_DEBUG
ENVIRONMENT_CONFIG=$1
shift
TEST_BINARY=$1
shift
UNIT_TESTS=$1
shift
. "$ENVIRONMENT_CONFIG"
set +m
LOG=$(mktemp)
trap "" ERR
trap "" SIGABRT
trap "" SIGFPE
trap "" SIGSEGV
EXIT=0
MISSING_FEATURE="WARNING: Missing required feature";
KNOWN_FAILURE="WARNING: Test is known to fail";
echo "Key:"
echo "ok = Test passed"
echo "n/a = Driver is missing a feature required for the test"
echo "FAIL = Unexpected failure"
echo "FIXME = Test failed, but it was an expected failure"
echo "PASS! = Unexpected pass"
echo ""
get_status()
{
case $1 in
# Special value we use to indicate that the test failed
# but it was an expected failure so don't fail the
# overall test run as a result...
300)
echo -n "FIXME";;
# Special value we use to indicate that the test passed
# but we weren't expecting it to pass‽
400)
echo -n 'PASS!';;
# Special value to indicate the test is missing a required feature
500)
echo -n "n/a";;
0)
echo -n "ok";;
*)
echo -n "FAIL";;
esac
}
run_test()
{
$("$TEST_BINARY" "$1" &> "$LOG")
TMP=$?
var_name=$2_result
eval "$var_name=$TMP"
if grep -q "$MISSING_FEATURE" "$LOG"; then
if test "$TMP" -ne 0; then
eval "$var_name=500"
else
eval "$var_name=400"
fi
elif grep -q "$KNOWN_FAILURE" "$LOG"; then
if test $TMP -ne 0; then
eval "$var_name=300"
else
eval "$var_name=400"
fi
else
if test "$TMP" -ne 0; then EXIT=$TMP; fi
fi
}
TITLE_FORMAT="%35s"
printf "$TITLE_FORMAT" "Test"
if test "$HAVE_GL" -eq 1; then
GL_FORMAT=" %6s %8s %7s %6s"
printf "$GL_FORMAT" "GL+GLSL" "GL3"
fi
if test "$HAVE_GLES2" -eq 1; then
GLES2_FORMAT=" %6s"
printf "$GLES2_FORMAT" "ES2"
fi
echo ""
echo ""
if [ -z "$UNIT_TESTS" ]; then
echo Missing unit-tests file or names
exit 1
fi
if [ -f "$UNIT_TESTS" ]; then
UNIT_TESTS="$(cat $UNIT_TESTS)"
fi
for test in $UNIT_TESTS
do
export COGL_DEBUG=
if test "$HAVE_GL" -eq 1; then
export COGL_DRIVER=gl
# NB: we can't explicitly disable fixed + glsl in this case since
# the arbfp code only supports fragment processing so we need either
# the fixed or glsl vertends
export COGL_DEBUG=
run_test "$test" gl_arbfp
export COGL_DRIVER=gl
export COGL_DEBUG=disable-fixed,disable-arbfp
run_test "$test" gl_glsl
export COGL_DRIVER=gl3
export COGL_DEBUG=
run_test "$test" gl3
fi
if test "$HAVE_GLES2" -eq 1; then
export COGL_DRIVER=gles2
export COGL_DEBUG=
run_test "$test" gles2
fi
printf $TITLE_FORMAT "$test:"
if test "$HAVE_GL" -eq 1; then
printf "$GL_FORMAT" \
"$(get_status "$gl_glsl_result")" \
"$(get_status "$gl3_result")"
fi
if test "$HAVE_GLES2" -eq 1; then
printf "$GLES2_FORMAT" \
"$(get_status "$gles2_result")"
fi
echo ""
done
rm "$LOG"
exit "$EXIT"