# # Copyright (c) 2009, Stefan Walter # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # * Redistributions of source code must retain the above # copyright notice, this list of conditions and the # following disclaimer. # * Redistributions in binary form must reproduce the # above copyright notice, this list of conditions and # the following disclaimer in the documentation and/or # other materials provided with the distribution. # * The names of contributors to this software may not be # used to endorse or promote products derived from this # software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS # OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. # # # CONTRIBUTORS # Stef Walter # # #!/bin/sh -e set -e # -------------------------------------------------------------------- # FUNCTIONS usage() { echo "usage: prep-tests.sh -b base-name files.c ..." >&2 exit 2 } # -------------------------------------------------------------------- # ARGUMENT PARSING BASE=unit-test while [ $# -gt 0 ]; do case "$1" in -b) BASE="$2" shift ;; --) shift break ;; -*) usage ;; *) break ;; esac shift done FILES=$* # -------------------------------------------------------------------- # HEADER FILE ( # HEADER TOP cat << END /* This is auto-generated code. Edit at your own peril. */ #include "tests/cu-test/CuTest.h" #include "tests/test-helpers.h" #include END # DECLARATIONS if [ -n "$FILES" ]; then cat $FILES | grep '^void unit_setup_' | sed -e 's/$/;/' cat $FILES | grep '^void unit_test_' | sed -e 's/$/;/' cat $FILES | grep '^void unit_teardown_' | sed -e 's/$/;/' fi ) > $BASE.h # -------------------------------------------------------------------- # SOURCE FILE ( # START RUNNER FUNCTION cat << END /* This is auto-generated code. Edit at your own peril. */ #include "$BASE.h" static int RunAllTests(void) { CuString *output = CuStringNew(); CuSuite* suite = CuSuiteNew(); END if [ -n "$FILES" ]; then cat $FILES | grep '^void unit_setup_' | \ sed -e 's/^void //' -e 's/(.*$//' -e 's/$/();/' cat $FILES | grep '^void unit_test_' | \ sed -e 's/^void //' -e 's/(.*$//' \ -e 's/^/SUITE_ADD_TEST(suite, /' -e 's/$/);/' fi # MIDDLE RUNNER FUNCTION cat << END CuSuiteRun(suite); CuSuiteSummary(suite, output); CuSuiteDetails(suite, output); printf("%s\\n", output->buffer); END if [ -n "$FILES" ]; then cat $FILES | grep '^void unit_teardown_' | \ sed -e 's/^void //' -e 's/(.*$//' -e 's/$/();/' fi # END RUNNER FUNCTION cat << END return suite->failCount; } #include "tests/test-helpers.c" #include "tests/cu-test/CuTest.c" END ) > $BASE.c