summaryrefslogtreecommitdiff
path: root/unittest
diff options
context:
space:
mode:
authorklto <klto@bb4c1ae6-6eb5-4d93-a66e-2307d6765a9c>2010-10-28 07:33:28 +0000
committerklto <klto@bb4c1ae6-6eb5-4d93-a66e-2307d6765a9c>2010-10-28 07:33:28 +0000
commit2f7a7f07846aa498b4b79a83bbe425d7aba73f03 (patch)
tree18c49cd2e8f09c6df38ceab570f72dd52dd51773 /unittest
parentb29885c60c5b8f1b204e78902df728121b5e7cf2 (diff)
parent098c2b10024f57666e381889438e5250ef882a44 (diff)
Merge branch 'master' into local-svn
git-svn-id: https://parma.zhaw.ch/svn/csnippets@2 bb4c1ae6-6eb5-4d93-a66e-2307d6765a9c
Diffstat (limited to 'unittest')
-rwxr-xr-xunittest/runtests.py59
l---------unittest/stringify.h1
-rw-r--r--unittest/unittest.h72
3 files changed, 132 insertions, 0 deletions
diff --git a/unittest/runtests.py b/unittest/runtests.py
new file mode 100755
index 0000000..dbc616f
--- /dev/null
+++ b/unittest/runtests.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import os, sys
+import getopt
+import subprocess
+
+class colors:
+ RED = '\033[91m'
+ GREEN = '\033[92m'
+ END = '\033[0m'
+
+ def disable(self):
+ self.RED = ''
+ self.GREEN = ''
+ self.END = ''
+
+ def red(self, str):
+ return self.RED + str + self.END
+
+ def green(self, str):
+ return self.GREEN + str + self.END
+
+failed = passed = 0
+c = colors()
+
+def fail(t, ret):
+ global failed, c
+ print(" %s %s (%s)" % (c.red("[FAIL]"), t, ret))
+ failed += 1
+
+def ok(t):
+ global passed, c
+ print(" %s %s" % (c.green("[PASS]"), t))
+ passed += 1
+
+def main():
+ if len(sys.argv) < 2:
+ sys.exit(0)
+
+ total = len(sys.argv[1:])
+
+ for t in sys.argv[1:]:
+ t_p = os.path.join('.', t)
+ if not os.path.exists(t_p):
+ fail(t, "not found")
+ continue
+
+ ret = subprocess.call(t_p)
+ if ret == 0:
+ ok(t)
+ else:
+ fail(t, "retval %s" % ret)
+
+ print("Ran %s tests (%s, %s)" % (total, c.green(str(passed) + " passed"), c.red(str(failed) + " failed")))
+ exit(ret)
+
+if __name__ == '__main__':
+ main()
diff --git a/unittest/stringify.h b/unittest/stringify.h
new file mode 120000
index 0000000..2728caf
--- /dev/null
+++ b/unittest/stringify.h
@@ -0,0 +1 @@
+../stringify/stringify.h \ No newline at end of file
diff --git a/unittest/unittest.h b/unittest/unittest.h
new file mode 100644
index 0000000..2350f55
--- /dev/null
+++ b/unittest/unittest.h
@@ -0,0 +1,72 @@
+#ifndef _UNITTEST_H_
+#define _UNITTEST_H_
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "stringify.h"
+
+#define TEST_PASS 0
+#define TEST_FAIL 1
+
+#define test_print(fmt, args...) \
+ fprintf(stderr, "%s:%d:" fmt, __FILE__, __LINE__, ##args)
+
+#define assert_err(fmt, args...) \
+ test_print("Assertion error: " fmt, ##args)
+
+/* Assert the expression 'expr' */
+#define test_assert(expr) ({if (!(expr)) { \
+ assert_err(__stringify(expr) "\n"); \
+ exit(TEST_FAIL); \
+ }})
+
+/* Assert the expression 'expr' and print 'msg' on fail */
+#define test_assert_msg(expr, msg) ({if (!(expr)) { \
+ assert_err(msg "\n"); \
+ exit(TEST_FAIL); \
+ }})
+
+/* Assert that a == b */
+#define test_assert_eq(a, b) ({ \
+ if ((a) != (b)) { \
+ assert_err(__stringify(a) " != " __stringify(b) "\n"); \
+ exit(TEST_FAIL); \
+ }})
+
+/* Assert that a != b */
+#define test_assert_neq(a, b) ({ \
+ if ((a) == (b)) { \
+ assert_err(__stringify(a) " == " __stringify(b) "\n"); \
+ exit(TEST_FAIL); \
+ }})
+
+/* Assert that a is NULL */
+#define test_assert_null(a) ({ \
+ if ((a) != NULL) { \
+ assert_err(__stringify(a) " not NULL\n"); \
+ exit(TEST_FAIL); \
+ }})
+
+/* Assert that a is not NULL */
+#define test_assert_not_null(a) ({ \
+ if ((a) == NULL) { \
+ assert_err(__stringify(a) " is NULL\n"); \
+ exit(TEST_FAIL); \
+ }})
+
+static inline int __xstrmatch(const char *ctx, const char *arg)
+{
+ size_t len = strlen(ctx);
+ return (strlen(arg) == len && strncmp(arg, ctx, len) == 0);
+}
+
+/* Assert that string a matches string b */
+#define test_assert_str_eq(a, b) ({ \
+ if (!__xstrmatch((a), (b))) { \
+ assert_err(__stringify(a) " does not match " __stringify(b) "\n"); \
+ exit(TEST_FAIL); \
+ }})
+
+#endif /* _UNITTEST_H_ */