X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=tests%2Frun_tests.sh;h=7ab316c88151bd309c0160b60b394f60ef7b823a;hb=0ae7375a650b06e303eb523a7ab47730ec7308a1;hp=57fea2862e04f314e7bc2e93469f058ec3793619;hpb=b2eed6fefcfa14b03916c145ad3c0435b25374d0;p=python_utils.git diff --git a/tests/run_tests.sh b/tests/run_tests.sh index 57fea28..7ab316c 100755 --- a/tests/run_tests.sh +++ b/tests/run_tests.sh @@ -7,6 +7,7 @@ DOCTEST=0 UNITTEST=0 INTEGRATION=0 FAILURES=0 +TESTS_RUN=0 dup() { if [ $# -ne 2 ]; then @@ -27,7 +28,7 @@ make_header() { local title="$1" local title_len=${#title} title_len=$((title_len + 4)) - local width=70 + local width=76 local left=4 local right=$(($width-($title_len+$left))) local color="$2" @@ -38,7 +39,7 @@ make_header() { } function usage() { - echo "Usage: $0 [-a]|[-i][-u][-d]" + echo "Usage: $0 [-a]|[-i][-u][-d] [--coverage]" echo echo "Runs tests under ${ROOT}. Options control which test types:" echo @@ -67,6 +68,9 @@ while [[ $# -gt 0 ]]; do -i|--integration) INTEGRATION=1 ;; + --coverage) + COVERAGE=1 + ;; *) # unknown option echo "Argument $key was not recognized." echo @@ -82,6 +86,9 @@ if [ $(expr ${DOCTEST} + ${UNITTEST} + ${INTEGRATION}) -eq 0 ]; then exit 2 fi +if [ ${COVERAGE} -eq 1 ]; then + coverage erase +fi FAILED_TESTS="" if [ ${DOCTEST} -eq 1 ]; then @@ -90,14 +97,19 @@ if [ ${DOCTEST} -eq 1 ]; then BASE=$(basename ${doctest}) BASE="${BASE} (doctest)" make_header "${BASE}" "${CYAN}" - OUT=$( python3 ${doctest} 2>&1 ) + if [ ${COVERAGE} -eq 1 ]; then + OUT=$( coverage run --source ${HOME}/lib --append ${doctest} 2>&1 ) + else + OUT=$( python3 ${doctest} 2>&1 ) + fi + TESTS_RUN=$((TESTS_RUN+1)) FAILED=$( echo "${OUT}" | grep '\*\*\*Test Failed\*\*\*' | wc -l ) if [ $FAILED == 0 ]; then echo "OK" else echo -e "${FAILED}" FAILURES=$((FAILURES+1)) - FAILED_TESTS="${FAILED_TESTS}, ${BASE}" + FAILED_TESTS="${FAILED_TESTS},${BASE} (python3 ${doctest})" fi fi done @@ -108,11 +120,16 @@ if [ ${UNITTEST} -eq 1 ]; then BASE=$(basename ${test}) BASE="${BASE} (unittest)" make_header "${BASE}" "${GREEN}" - ${test} + if [ ${COVERAGE} -eq 1 ]; then + coverage run --source ${HOME}/lib --append ${test} --unittests_ignore_perf + else + ${test} + fi if [ $? -ne 0 ]; then FAILURES=$((FAILURES+1)) - FAILED_TESTS="${FAILED_TESTS}, ${BASE}" + FAILED_TESTS="${FAILED_TESTS},${BASE} (python3 ${test})" fi + TESTS_RUN=$((TESTS_RUN+1)) done fi @@ -121,23 +138,41 @@ if [ ${INTEGRATION} -eq 1 ]; then BASE=$(basename ${test}) BASE="${BASE} (integration test)" make_header "${BASE}" "${ORANGE}" - ${test} + if [ ${COVERAGE} -eq 1 ]; then + coverage run --source ${HOME}/lib --append ${test} + else + ${test} + fi if [ $? -ne 0 ]; then FAILURES=$((FAILURES+1)) - FAILED_TESTS="${FAILED_TESTS}, ${BASE}" + FAILED_TESTS="${FAILED_TESTS},${BASE} (python3 ${test})" fi + TESTS_RUN=$((TESTS_RUN+1)) done fi +if [ ${COVERAGE} -eq 1 ]; then + make_header "Code Coverage Report" "${GREEN}" + coverage report --omit=config-3.8.py --sort=-cover + echo + echo "Note: to recall this report without run-running the tests, invoke:" + echo + echo " $ coverage report --omit=config-3.8.py --sort=-cover" + echo +fi + if [ ${FAILURES} -ne 0 ]; then - FAILED_TESTS=$(echo ${FAILED_TESTS} | sed 's/^, //g') + FAILED_TESTS=$(echo ${FAILED_TESTS} | sed 's/^,/__/g') + FAILED_TESTS=$(echo ${FAILED_TESTS} | sed 's/,/\n__/g') if [ ${FAILURES} -eq 1 ]; then - echo -e "${RED}There was ${FAILURES} failure:" + echo -e "${RED}There was ${FAILURES}/${TESTS_RUN} failure:" else - echo -e "${RED}There were ${FAILURES} failures:" + echo -e "${RED}There were ${FAILURES}/${TESTS_RUN} failures:" fi echo "${FAILED_TESTS}" echo -e "${NC}" + exit ${FAILURES} else - echo -e "${BLACK}${ON_GREEN}Everything looks good.${NC}" + echo -e "${BLACK}${ON_GREEN}All (${TESTS_RUN}) test(s) passed.${NC}" + exit 0 fi