summaryrefslogtreecommitdiff
path: root/tests/prep-tests.sh
blob: bdceb118b5583cc5d6810ea3f85bd60dd4beb73f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/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 <stdio.h>

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