Adds optional code coverage reporting to run_tests.sh.
authorScott <[email protected]>
Mon, 24 Jan 2022 21:47:27 +0000 (13:47 -0800)
committerScott <[email protected]>
Mon, 24 Jan 2022 21:47:27 +0000 (13:47 -0800)
.gitignore
requirements.txt
tests/acl_test.py
tests/dict_utils_test.py
tests/run_tests.sh

index 221b64bb57d8e436c800822b9b81c74aaa8dff3c..649e5785919f00c6b686a5a4bd4ac7e11e3009ea 100644 (file)
@@ -1,3 +1,4 @@
+.coverage
 scott_secrets.py
 __pycache__/*
 */__pycache__/*
index df7bb5f4e9bf8c9b2d8c38888df2e5e892bbd2bd..9962ad56ffe4b55e4157f822dc9a52502de1453f 100644 (file)
@@ -2,6 +2,7 @@ aiohttp
 antlr4-python3-runtime
 bitstring
 cloudpickle
+coverage
 holidays
 nltk
 numpy
index 4c1cf21457d783f9baeaf886cdc68c7c8647917b..1e9dcbf725043272df021605e8afc86115239c08 100755 (executable)
@@ -4,7 +4,7 @@ import re
 import unittest
 
 import acl
-import bootstrap
+import unittest_utils    # Needed for --unittests_ignore_perf flag
 
 
 class TestSimpleACL(unittest.TestCase):
@@ -89,5 +89,4 @@ class TestSimpleACL(unittest.TestCase):
 
 
 if __name__ == '__main__':
-    unittest.main = bootstrap.initialize(unittest.main)
     unittest.main()
index 1bdbb9be9fac3de1e200ec5c0f9b75c149ee4605..9fb8157bd064801152b333f1eef1e22678388d83 100755 (executable)
@@ -3,6 +3,7 @@
 import unittest
 
 import dict_utils as du
+import unittest_utils    # Needed for --unittests_ignore_perf flag
 
 
 class TestDictUtils(unittest.TestCase):
index 5711b9ad362c930b609a8080b1e8376090be35c3..db9f8cbb1f45bddb3dce5b9d954e4e61852f9c34 100755 (executable)
@@ -38,7 +38,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 +67,9 @@ while [[ $# -gt 0 ]]; do
         -i|--integration)
             INTEGRATION=1
             ;;
+        --coverage)
+            COVERAGE=1
+            ;;
         *)    # unknown option
             echo "Argument $key was not recognized."
             echo
@@ -82,6 +85,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,7 +96,11 @@ 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
             FAILED=$( echo "${OUT}" | grep '\*\*\*Test Failed\*\*\*' | wc -l )
             if [ $FAILED == 0 ]; then
                 echo "OK"
@@ -108,7 +118,11 @@ 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} (python3 ${test})"
@@ -121,7 +135,11 @@ 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} (python3 ${test})"
@@ -129,6 +147,11 @@ if [ ${INTEGRATION} -eq 1 ]; then
     done
 fi
 
+if [ ${COVERAGE} -eq 1 ]; then
+    make_header "Code Coverage Report" "${GREEN}"
+    coverage report --omit=config-3.8.py --sort=-cover
+fi
+
 if [ ${FAILURES} -ne 0 ]; then
     FAILED_TESTS=$(echo ${FAILED_TESTS} | sed 's/^,/__/g')
     FAILED_TESTS=$(echo ${FAILED_TESTS} | sed 's/,/\n__/g')