X-Git-Url: https://git.llucax.com/software/mutest.git/blobdiff_plain/5ce20f06cfd85f7498652f86a4111ed6c456b9f9..7eebf98ef024cd90464022597680c376eb475098:/mkmutest?ds=sidebyside diff --git a/mkmutest b/mkmutest index 5e8db82..8806987 100755 --- a/mkmutest +++ b/mkmutest @@ -1,14 +1,16 @@ #!/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 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 @@ -17,6 +19,12 @@ # 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\"" @@ -24,18 +32,31 @@ echo "void mu_run_suites() {" 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 "$file" | egrep '^[[:xdigit:]]+ T mu_\w+$' | cut -d' ' -f3` + 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 "}"