Don't be tricked by speaker groups living on the same IP address
[python_utils.git] / tests / run_tests.sh
index 9623f1b2f1a12dcfebf2a207d36a2ea6faad27ca..5711b9ad362c930b609a8080b1e8376090be35c3 100755 (executable)
@@ -37,6 +37,18 @@ make_header() {
     echo
 }
 
+function usage() {
+    echo "Usage: $0 [-a]|[-i][-u][-d]"
+    echo
+    echo "Runs tests under ${ROOT}.  Options control which test types:"
+    echo
+    echo "    -a | --all . . . . . . . . . . . . Run all types of tests"
+    echo "    -d | --doctests  . . . . . . . . . Run doctests"
+    echo "    -u | --unittests . . . . . . . . . Run unittests"
+    echo "    -i | --integration . . . . . . . . Run integration tests"
+    echo
+    exit 1
+}
 
 while [[ $# -gt 0 ]]; do
     key="$1"
@@ -56,34 +68,37 @@ while [[ $# -gt 0 ]]; do
             INTEGRATION=1
             ;;
         *)    # unknown option
-            echo "Usage: $0 [-a]|[-i][-u][-d]"
-            echo
-            echo "Runs tests under ${ROOT}.  Options control which test types:"
-            echo
-            echo "    -a | --all . . . . . . . . . . . . Run all types of tests"
-            echo "    -d | --doctests  . . . . . . . . . Run doctests"
-            echo "    -u | --unittests . . . . . . . . . Run unittests"
-            echo "    -i | --integration . . . . . . . . Run integration tests"
-            echo
             echo "Argument $key was not recognized."
+            echo
+            usage
             exit 1
             ;;
     esac
     shift
 done
 
+if [ $(expr ${DOCTEST} + ${UNITTEST} + ${INTEGRATION}) -eq 0 ]; then
+    usage
+    exit 2
+fi
+
+
+FAILED_TESTS=""
 if [ ${DOCTEST} -eq 1 ]; then
-    for doctest in $(grep -lR doctest ${ROOT}/*.py); do
-        BASE=$(basename ${doctest})
-        BASE="${BASE} (doctest)"
-        make_header "${BASE}" "${CYAN}"
-        OUT=$( python3 ${doctest} 2>&1 )
-        FAILED=$( echo "${OUT}" | grep '\*\*\*Test Failed\*\*\*' | wc -l )
-        if [ $FAILED == 0 ]; then
-            echo "OK"
-        else
-            echo -e "${FAILED}"
-            FAILURES=$((FAILURES+1))
+    for doctest in $(grep -lR doctest ${ROOT}/*); do
+        if [[ ${doctest} == *.py ]]; then
+            BASE=$(basename ${doctest})
+            BASE="${BASE} (doctest)"
+            make_header "${BASE}" "${CYAN}"
+            OUT=$( python3 ${doctest} 2>&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} (python3 ${doctest})"
+            fi
         fi
     done
 fi
@@ -96,6 +111,7 @@ if [ ${UNITTEST} -eq 1 ]; then
         ${test}
         if [ $? -ne 0 ]; then
             FAILURES=$((FAILURES+1))
+            FAILED_TESTS="${FAILED_TESTS},${BASE} (python3 ${test})"
         fi
     done
 fi
@@ -108,16 +124,23 @@ if [ ${INTEGRATION} -eq 1 ]; then
         ${test}
         if [ $? -ne 0 ]; then
             FAILURES=$((FAILURES+1))
+            FAILED_TESTS="${FAILED_TESTS},${BASE} (python3 ${test})"
         fi
     done
 fi
 
 if [ ${FAILURES} -ne 0 ]; then
+    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.${NC}"
+        echo -e "${RED}There was ${FAILURES} failure:"
     else
-        echo -e "${RED}There were ${FAILURES} failures.${NC}"
+        echo -e "${RED}There were ${FAILURES} failures:"
     fi
+    echo "${FAILED_TESTS}"
+    echo -e "${NC}"
+    exit ${FAILURES}
 else
-    echo -e "${GREEN}Everything looks good.${NC}"
+    echo -e "${BLACK}${ON_GREEN}Everything looks good.${NC}"
+    exit 0
 fi