#!/bin/bash
-
-# This file is part of mutest, a micro testing framework for C.
#
-# mutest is under the BOLA license, please see the LICENSE file or visit
+# This file is part of mutest, a simple micro unit testing framework for C.
+#
+# mutest was written by Leandro Lucarella <llucax@gmail.com> and is released
+# under the BOLA license, please see the LICENSE file or visit:
# http://blitiri.com.ar/p/bola/
#
-# This is a simple script to generate a C file that runs all the test cases
+# This is a simple script to generate a C file that runs all the test suites
# present in .o files passed as arguments.
#
# Please, read the README file for more details.
+#
# the trick here is getting all the test cases present in an object file using
# cases must have unique names, even across test suites.
# the first argument should be mutest.h
+if [ -z "$1" ]
+then
+ echo "Too few arguments" >&2
+ echo "Usage: $0 mutest_h_location [object files...]" >&2
+ exit 1
+fi
mutest_h="$1"
shift
echo "#include \"$mutest_h\""
echo
for file in "$@"
do
- suite="`basename "$file" .o | sed 's/\"/\\\\\"/g'`"
- echo -e '\tmutest_suite_name = "'"$suite"'";'
- echo -e '\tmu_print(MU_SUITE, "\\nRunning suite \"'"$suite"'\"\\n");'
- for symbol in `nm -p "$file" \
- | egrep '^[[:xdigit:]]{8} T mu_test\w*$' \
- | cut -c12-`
+ pr_file=`echo "$file" | sed 's/\"/\\\\\"/g'`
+ suite=`basename "$file" .o | sed 's/\"/\\\\\"/g'`
+ symbols=`nm -p "$file" | egrep '^[[:xdigit:]]{8} T mu_\w+$' | cut -c12-`
+ tests=`echo "$symbols" | egrep '^mu_test'`
+ inits=`echo "$symbols" | egrep '^mu_init'`
+ terms=`echo "$symbols" | egrep '^mu_term'`
+ echo -e '\tdo {'
+ echo -e '\t\tmutest_suite_name = "'"$suite"'";'
+ echo -e '\t\tmu_print(MU_SUITE, "\\nRunning suite '"'$suite'"'\\n");'
+ for init in $inits
+ do
+ echo -e "\\t\\tmu_run_init($init);"
+ done
+ for testcase in $tests
+ do
+ echo -e "\t\tmu_run_case($testcase);"
+ done
+ for term in $terms
do
- echo -e "\tmu_run_case($symbol);"
+ echo -e "\t\tmu_run_term($term);"
done
- echo -e "\tif (mutest_suite_failed) ++mutest_failed_suites;"
- echo -e "\telse ++mutest_passed_suites;"
- echo -e "\tmutest_suite_failed = 0;"
+ echo -e "\t\tif (mutest_suite_failed) ++mutest_failed_suites;"
+ echo -e "\t\telse ++mutest_passed_suites;"
+ echo -e "\t\tmutest_suite_failed = 0;"
+ echo -e '\t} while (0);'
echo
done
echo "}"