summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am25
-rw-r--r--tests/check_parse.c4
-rw-r--r--tests/foodtest.in50
-rwxr-xr-xtests/maketests.sh61
-rw-r--r--tests/types.c39
-rw-r--r--tests/util.c15
6 files changed, 186 insertions, 8 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 95bbaf5..d92a287 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,4 +1,21 @@
-TESTS = check_parse
-check_PROGRAMS = check_parse
-check_parse_SOURCES = check_parse.c $(top_builddir)/src/parse.h
-check_parse_CFLAGS = @CHECK_CFLAGS@
+# Setup TAP
+LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
+ $(top_srcdir)/build-aux/tap-driver.sh
+
+TESTS = foodtest
+
+EXTRA_DIST = maketests.sh \
+ foodtest.in \
+ types.c \
+ util.c
+
+check_PROGRAMS = foodtest
+
+# foodtest_SOURCES = foodtest.c $(top_builddir)/src/parse.h
+nodist_foodtest_SOURCES = foodtest.c
+foodtest_CFLAGS = @CHECK_CFLAGS@ -lcheck
+
+CLEANFILES = foodtest.c
+
+foodtest.c: $(top_srcdir)/tests/foodtest.in $(top_srcdir)/tests/*.c
+ $(top_srcdir)/tests/maketests.sh -i $(top_srcdir)/tests/foodtest.in -o foodtest.c
diff --git a/tests/check_parse.c b/tests/check_parse.c
deleted file mode 100644
index f388ef8..0000000
--- a/tests/check_parse.c
+++ /dev/null
@@ -1,4 +0,0 @@
-
-int main() {
- return 0;
-}
diff --git a/tests/foodtest.in b/tests/foodtest.in
new file mode 100644
index 0000000..484cfeb
--- /dev/null
+++ b/tests/foodtest.in
@@ -0,0 +1,50 @@
+/* -*- mode: c -*- */
+#include <check.h>
+
+/*
+ * Source files check by this suite:
+ */
+#include "../src/types.c"
+#include "../src/util.c"
+/*
+ * Test suite based on check
+ *
+ * To add a new case simply create the <case>.c file
+ * in the tests/ directory and include it below
+ * Also add the new file to the EXTRA_DIST files in
+ * tests/Makefile.am
+ *
+ * To add a new test go to the appropriate case file
+ * and add it there
+ */
+#include "types.c"
+#include "util.c"
+
+Suite * foodtest_suite(void)
+{
+ Suite *s;
+
+ s = suite_create("foodtools tests");
+
+ /*** maketests.sh begin ***/
+ /* everything in here will be replaced upon building */
+ /* DO NOT delete the begin/end lines */
+ /*** maketests.sh end ***/
+
+ return s;
+}
+
+int main(void)
+{
+ int number_failed;
+ Suite *s;
+ SRunner *sr;
+
+ s = foodtest_suite();
+ sr = srunner_create(s);
+ srunner_set_tap(sr, "-");
+ srunner_run_all(sr, CK_NORMAL);
+ number_failed = srunner_ntests_failed(sr);
+ srunner_free(sr);
+ return (number_failed == 0) ? 0 : CK_FAILURE;
+}
diff --git a/tests/maketests.sh b/tests/maketests.sh
new file mode 100755
index 0000000..c6ffed7
--- /dev/null
+++ b/tests/maketests.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+
+BASEDIR=$(dirname $(readlink -f $0))
+
+function printhelp {
+ echo -e "usage:"
+ echo -e "-i, --input [FILE]"
+ echo -e "-o, --output [FILE]"
+ exit 1
+}
+
+function gen_code {
+ local CASES
+ CASES=$(sed -n '/#include.*\.c"/p' "$1" | cut -d'"' -f2 | grep -v '../src')
+
+ for c in ${CASES}; do
+ local cc
+ cc=${c%.*}
+ printf " TCase * tc_%s = tcase_create(\"%s\");\n" ${cc} ${cc}
+ tests=""
+ tests=$(sed -n 's/START_TEST(\(.*\))/\1/p' "$BASEDIR/$c")
+ for t in ${tests}; do
+ printf " tcase_add_test(tc_%s, %s);\n" ${cc} ${t}
+ done
+ printf " suite_add_tcase(s, tc_%s);\n" ${cc}
+ done
+}
+
+if [ $# -lt 1 ]
+then
+ printhelp
+fi
+
+while [[ $# -gt 0 ]]
+do
+ key="$1"
+ case $key in
+ -i|--input)
+ INPUT="$2"
+ shift # past argument
+ shift # past value
+ ;;
+ -o|--output)
+ OUTPUT="$2"
+ shift # past argument
+ shift # past value
+ ;;
+ *) # unknown option
+ printhelp
+ ;;
+ esac
+done
+
+if ! [ -f "$INPUT" ]; then
+ printhelp
+fi
+
+sed "/maketests.sh begin/q" "$INPUT" > "$OUTPUT"
+gen_code "$INPUT" >> "$OUTPUT"
+sed -n -e '/maketests.sh end/,$p' "$INPUT" >> "$OUTPUT"
+exit 0
diff --git a/tests/types.c b/tests/types.c
new file mode 100644
index 0000000..9f08ac8
--- /dev/null
+++ b/tests/types.c
@@ -0,0 +1,39 @@
+/* -*- eval: (outline-minor-mode); outline-regexp: "START_TEST("; -*- */
+
+static check_empty_recipe(recipe * r) {
+ ck_assert_int_eq(r->n, 1);
+ ck_assert_int_eq(r->in, 0);
+ ck_assert_int_eq(r->sn, 0);
+ ck_assert_int_eq(r->rn, 0);
+
+ ck_assert_int_eq(r->sha1[0], '\0');
+
+ ck_assert_ptr_null(r->i);
+ ck_assert_ptr_null(r->s);
+ ck_assert_ptr_null(r->r);
+ ck_assert_ptr_null(r->filename);
+ ck_assert_ptr_null(r->path);
+ ck_assert_ptr_null(r->title);
+}
+
+START_TEST(create_recipe)
+{
+ recipe * r = new_recipe();
+
+ check_empty_recipe(r);
+
+ free_recipe(r);
+}
+END_TEST
+
+START_TEST(create_subrecipe)
+{
+ recipe * r = new_recipe();
+ recipe * r_sub = new_recipe();
+ new_subrecipe(r, r_sub);
+
+ check_empty_recipe(r->r[r->rn -1]);
+
+ free_recipe(r);
+}
+END_TEST
diff --git a/tests/util.c b/tests/util.c
new file mode 100644
index 0000000..6703abf
--- /dev/null
+++ b/tests/util.c
@@ -0,0 +1,15 @@
+/* -*- eval: (outline-minor-mode); outline-regexp: "START_TEST("; -*- */
+
+START_TEST(check_trim)
+{
+ char s1[10] = " test ";
+ char s2[10] = " test\n ";
+ char s3[10] = "\ttest\n ";
+
+ trim(s1); trim(s2); trim(s3);
+
+ ck_assert_str_eq(s1, "test");
+ ck_assert_str_eq(s2, "test");
+ ck_assert_str_eq(s3, "test");
+}
+END_TEST