Fix a couple of bugs in executors. Use run_tests.sh as a pre commit
[python_utils.git] / tests / run_tests.sh
index 6e0c30cf1b3c5ddb9ec6da18b2fb3c5f0553be0e..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,33 +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 )
-        if [ "$OUT" == "" ]; then
-            echo "OK"
-        else
-            echo -e "${OUT}"
-            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
@@ -95,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
@@ -107,10 +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
-    echo -e "${RED}There were ${FAILURES} failure(s).${NC}"
+    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:"
+    else
+        echo -e "${RED}There were ${FAILURES} failures:"
+    fi
+    echo "${FAILED_TESTS}"
+    echo -e "${NC}"
+    exit ${FAILURES}
+else
+    echo -e "${BLACK}${ON_GREEN}Everything looks good.${NC}"
+    exit 0
 fi