#!/usr/bin/env bash # # run_tests # export PATH="$PATH:$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )" export PATH="$PATH:./buildroot/bin" # exit on first failure set -e exec_test () { printf "\n\033[0;32m[Test $2] \033[0m$3...\n" # Check to see if we should skip tests if [[ -n "$4" ]] ; then if [[ ! "$3" =~ $4 ]] ; then printf "\033[1;33mSkipped\033[0m\n" return 0 fi fi if [[ -z "$VERBOSE_PLATFORMIO" ]] ; then silent="--silent" else silent="" fi if platformio run --project-dir $1 -e $2 $silent; then printf "\033[0;32mPassed\033[0m\n" return 0 else if [[ -n $GIT_RESET_HARD ]]; then git reset --hard HEAD else restore_configs fi printf "\033[0;31mFailed!\033[0m\n" return 1 fi } export -f exec_test printf "Running \033[0;32m$2\033[0m Tests\n" if [[ $2 = "ALL" ]]; then dir_list=("$(dirname "${BASH_SOURCE[0]}")"/*) declare -a tests=(${dir_list[@]/*run_tests/}) for f in "${tests[@]}"; do testenv=$(basename $f | cut -d"-" -f1) printf "Running \033[0;32m$f\033[0m Tests\n" exec_test $1 "$testenv --target clean" "Setup Build Environment" if [[ $GIT_RESET_HARD == "true" ]]; then git reset --hard HEAD else restore_configs fi done else exec_test $1 "$2 --target clean" "Setup Build Environment" test_name="$3" # If the test name is 1 or 2 digits, treat it as an index if [[ "$test_name" =~ ^[0-9][0-9]?$ ]] ; then # Find the test name that corresponds to that index test_name="$(cat buildroot/tests/$2-tests | grep -e '^exec_test' | sed -n "$3p" | sed "s/.*\$1 \$2 \"\([^\"]*\).*/\1/g")" if [[ -z "$test_name" ]] ; then # Fail if none matches printf "\033[0;31mCould not find test \033[0m#$3\033[0;31m in \033[0mbuildroot/tests/$2-tests\n" exit 1 else printf "\033[0;32mMatching test \033[0m#$3\033[0;32m: '\033[0m$test_name\033[0;32m'\n" fi fi $2-tests $1 $2 "$test_name" if [[ $GIT_RESET_HARD == "true" ]]; then git reset --hard HEAD else restore_configs fi fi printf "\033[0;32mAll tests completed successfully\033[0m\n"