Update tests / test harness.
authorScott Gasch <[email protected]>
Thu, 9 Sep 2021 23:42:13 +0000 (16:42 -0700)
committerScott Gasch <[email protected]>
Thu, 9 Sep 2021 23:42:13 +0000 (16:42 -0700)
string_utils.py
tests/parallelize_itest.py [moved from tests/parallelize_test.py with 100% similarity]
tests/run_all_tests.sh [deleted file]
tests/run_tests.sh [new file with mode: 0755]

index 5eb03d275e184af8709a87da3885b5827588c501..0829846bb26741bfb0c8bdd0226d56511fc31bbd 100644 (file)
@@ -28,7 +28,7 @@ URLS_RAW_STRING = (
     r"([a-z-]+://)"  # scheme
     r"([a-z_\d-]+:[a-z_\d-]+@)?"  # user:password
     r"(www\.)?"  # www.
-    r"((?<!\.)[a-z\d]+[a-z\d.-]+\.[a-z]{2,6}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|localhost)"  # domain
+    r"((?<!\.)[a-z\d]+[a-z\d.-]+\.[a-z]{2,6}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|localhost)" # domain
     r"(:\d{2,})?"  # port number
     r"(/[a-z\d_%+-]*)*"  # folders
     r"(\.[a-z\d_%+-]+)*"  # file extension
@@ -150,7 +150,7 @@ def is_none_or_empty(in_str: Optional[str]) -> bool:
     True
     >>> is_none_or_empty(None)
     True
-    >>> is_none_or_empty(" ")
+    >>> is_none_or_empty("   \t   ")
     True
     >>> is_none_or_empty('Test')
     False
@@ -175,18 +175,22 @@ def is_string(obj: Any) -> bool:
 
 
 def is_empty_string(in_str: Any) -> bool:
+    return is_empty(in_str)
+
+
+def is_empty(in_str: Any) -> bool:
     """
     Checks if input is a string and empty or only whitespace.
 
-    >>> is_empty_string('')
+    >>> is_empty('')
     True
-    >>> is_empty_string('    \t\t    ')
+    >>> is_empty('    \t\t    ')
     True
-    >>> is_empty_string('test')
+    >>> is_empty('test')
     False
-    >>> is_empty_string(100.88)
+    >>> is_empty(100.88)
     False
-    >>> is_empty_string([1, 2, 3])
+    >>> is_empty([1, 2, 3])
     False
     """
     return is_string(in_str) and in_str.strip() == ""
@@ -733,8 +737,6 @@ def is_ip(in_str: Any) -> bool:
     """
     Checks if a string is a valid ip (either v4 or v6).
 
-    *Examples:*
-
     >>> is_ip('255.200.100.75')
     True
     >>> is_ip('2001:db8:85a3:0000:0000:8a2e:370:7334')
diff --git a/tests/run_all_tests.sh b/tests/run_all_tests.sh
deleted file mode 100755 (executable)
index 25365bb..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/bash
-
-for doctest in $(grep -l doctest ../*.py); do
-    echo "------------------------- ${doctest} -------------------------"
-    python3 ${doctest}
-done
-
-for test in $(ls *_test.py); do
-    if [ "${test}" != "parallelize_test.py" ]; then
-        echo "------------------------- ${test} -------------------------"
-        ${test}
-    fi
-done
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
new file mode 100755 (executable)
index 0000000..6e0c30c
--- /dev/null
@@ -0,0 +1,116 @@
+#!/bin/bash
+
+source /home/scott/bin/color_vars.sh
+
+ROOT=/home/scott/lib/python_modules
+DOCTEST=0
+UNITTEST=0
+INTEGRATION=0
+FAILURES=0
+
+dup() {
+    if [ $# -ne 2 ]; then
+        echo "Usage: dup <string> <count>"
+        return
+    fi
+    local times=$(seq 1 $2)
+    for x in ${times}; do
+        echo -n "$1"
+    done
+}
+
+make_header() {
+    if [ $# -ne 2 ]; then
+        echo "Usage: make_header <required title> <color>"
+        return
+    fi
+    local title="$1"
+    local title_len=${#title}
+    title_len=$((title_len + 4))
+    local width=70
+    local left=4
+    local right=$(($width-($title_len+$left)))
+    local color="$2"
+    dup '-' $left
+    echo -ne "[ ${color}${title}${NC} ]"
+    dup '-' $right
+    echo
+}
+
+
+while [[ $# -gt 0 ]]; do
+    key="$1"
+    case $key in
+        -a|--all)
+            DOCTEST=1
+            UNITTEST=1
+            INTEGRATION=1
+            ;;
+        -d|--doctests)
+            DOCTEST=1
+            ;;
+        -u|--unittests)
+            UNITTEST=1
+            ;;
+        -i|--integration)
+            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."
+            exit 1
+            ;;
+    esac
+    shift
+done
+
+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))
+        fi
+    done
+fi
+
+if [ ${UNITTEST} -eq 1 ]; then
+    for test in $(find ${ROOT} -name "*_test.py" -print); do
+        BASE=$(basename ${test})
+        BASE="${BASE} (unittest)"
+        make_header "${BASE}" "${GREEN}"
+        ${test}
+        if [ $? -ne 0 ]; then
+            FAILURES=$((FAILURES+1))
+        fi
+    done
+fi
+
+if [ ${INTEGRATION} -eq 1 ]; then
+    for test in $(find ${ROOT} -name "*_itest.py" -print); do
+        BASE=$(basename ${test})
+        BASE="${BASE} (integration test)"
+        make_header "${BASE}" "${ORANGE}"
+        ${test}
+        if [ $? -ne 0 ]; then
+            FAILURES=$((FAILURES+1))
+        fi
+    done
+fi
+
+if [ ${FAILURES} -ne 0 ]; then
+    echo -e "${RED}There were ${FAILURES} failure(s).${NC}"
+fi