3 source /home/scott/bin/color_vars.sh
5 ROOT=/home/scott/lib/python_modules
13 echo "Usage: dup <string> <count>"
16 local times=$(seq 1 $2)
24 echo "Usage: make_header <required title> <color>"
28 local title_len=${#title}
29 title_len=$((title_len + 4))
32 local right=$(($width-($title_len+$left)))
35 echo -ne "[ ${color}${title}${NC} ]"
41 echo "Usage: $0 [-a]|[-i][-u][-d] [--coverage]"
43 echo "Runs tests under ${ROOT}. Options control which test types:"
45 echo " -a | --all . . . . . . . . . . . . Run all types of tests"
46 echo " -d | --doctests . . . . . . . . . Run doctests"
47 echo " -u | --unittests . . . . . . . . . Run unittests"
48 echo " -i | --integration . . . . . . . . Run integration tests"
53 while [[ $# -gt 0 ]]; do
74 echo "Argument $key was not recognized."
83 if [ $(expr ${DOCTEST} + ${UNITTEST} + ${INTEGRATION}) -eq 0 ]; then
88 if [ ${COVERAGE} -eq 1 ]; then
93 if [ ${DOCTEST} -eq 1 ]; then
94 for doctest in $(grep -lR doctest ${ROOT}/*); do
95 if [[ ${doctest} == *.py ]]; then
96 BASE=$(basename ${doctest})
97 BASE="${BASE} (doctest)"
98 make_header "${BASE}" "${CYAN}"
99 if [ ${COVERAGE} -eq 1 ]; then
100 OUT=$( coverage run --source ${HOME}/lib --append ${doctest} 2>&1 )
102 OUT=$( python3 ${doctest} 2>&1 )
104 FAILED=$( echo "${OUT}" | grep '\*\*\*Test Failed\*\*\*' | wc -l )
105 if [ $FAILED == 0 ]; then
109 FAILURES=$((FAILURES+1))
110 FAILED_TESTS="${FAILED_TESTS},${BASE} (python3 ${doctest})"
116 if [ ${UNITTEST} -eq 1 ]; then
117 for test in $(find ${ROOT} -name "*_test.py" -print); do
118 BASE=$(basename ${test})
119 BASE="${BASE} (unittest)"
120 make_header "${BASE}" "${GREEN}"
121 if [ ${COVERAGE} -eq 1 ]; then
122 coverage run --source ${HOME}/lib --append ${test} --unittests_ignore_perf
126 if [ $? -ne 0 ]; then
127 FAILURES=$((FAILURES+1))
128 FAILED_TESTS="${FAILED_TESTS},${BASE} (python3 ${test})"
133 if [ ${INTEGRATION} -eq 1 ]; then
134 for test in $(find ${ROOT} -name "*_itest.py" -print); do
135 BASE=$(basename ${test})
136 BASE="${BASE} (integration test)"
137 make_header "${BASE}" "${ORANGE}"
138 if [ ${COVERAGE} -eq 1 ]; then
139 coverage run --source ${HOME}/lib --append ${test}
143 if [ $? -ne 0 ]; then
144 FAILURES=$((FAILURES+1))
145 FAILED_TESTS="${FAILED_TESTS},${BASE} (python3 ${test})"
150 if [ ${COVERAGE} -eq 1 ]; then
151 make_header "Code Coverage Report" "${GREEN}"
152 coverage report --omit=config-3.8.py --sort=-cover
154 echo "To reproduce this report without run-running the tests, invoke:"
156 echo " $ coverage report --omit=config-3.8.py --sort=-cover"
160 if [ ${FAILURES} -ne 0 ]; then
161 FAILED_TESTS=$(echo ${FAILED_TESTS} | sed 's/^,/__/g')
162 FAILED_TESTS=$(echo ${FAILED_TESTS} | sed 's/,/\n__/g')
163 if [ ${FAILURES} -eq 1 ]; then
164 echo -e "${RED}There was ${FAILURES} failure:"
166 echo -e "${RED}There were ${FAILURES} failures:"
168 echo "${FAILED_TESTS}"
172 echo -e "${BLACK}${ON_GREEN}Everything looks good.${NC}"