#!/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_FILE=$1 shift . "$ENVIRONMENT_CONFIG" set +m 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 %6s" printf "$GL_FORMAT" "GL+GLSL" "GL-NPT" "GL3" fi if test "$HAVE_GLES2" -eq 1; then GLES2_FORMAT=" %6s %7s" printf "$GLES2_FORMAT" "ES2" "ES2-NPT" fi echo "" echo "" if [ ! -f "$UNIT_TESTS_FILE" ]; then echo Missing unit-tests file exit 1 fi for test in $(cat "$UNIT_TESTS_FILE") 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=gl export COGL_DEBUG=disable-npot-textures run_test "$test" gl_npot 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 export COGL_DRIVER=gles2 export COGL_DEBUG=disable-npot-textures run_test "$test" gles2_npot fi printf $TITLE_FORMAT "$test:" if test "$HAVE_GL" -eq 1; then printf "$GL_FORMAT" \ "$(get_status "$gl_glsl_result")" \ "$(get_status "$gl_npot_result")" \ "$(get_status "$gl3_result")" fi if test "$HAVE_GLES2" -eq 1; then printf "$GLES2_FORMAT" \ "$(get_status "$gles2_result")" \ "$(get_status "$gles2_npot_result")" fi echo "" done exit "$EXIT"