summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test.c116
1 files changed, 116 insertions, 0 deletions
diff --git a/tests/test.c b/tests/test.c
new file mode 100644
index 0000000..85c1ad7
--- /dev/null
+++ b/tests/test.c
@@ -0,0 +1,116 @@
+#include <stdio.h>
+#include <stdbool.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "lily-test.h"
+
+LILY_INIT();
+
+void run_test(const char *name, lily_test (*fp)())
+{
+ printf("%s... ", name);
+ const char *result = fp();
+ if (result != 0) {
+ printf("FAILED (%s)\n", result);
+ }
+ else
+ printf("OK\n");
+}
+
+
+lily_test check_init()
+{
+ // should fail to compile if lily_test_data is undefined
+ if (lily_test_data.tests_run != 0)
+ return "tests_run is not equal to zero!";
+ if (lily_test_data.tests_failed != 0)
+ return "tests_failed is not equal to zero!";
+ return 0;
+}
+
+
+int get_message(char **destination, const char *source)
+{
+ const char *s = source;
+ size_t size = 0;
+ while (*s != '\n') {
+ if (*s == 0)
+ return false;
+ s++;
+ size++;
+ }
+
+ *destination = malloc((size+1) * sizeof(char));
+ strncpy(*destination, source, size);
+ (*destination)[size] = 0;
+ return true;
+}
+
+#define assert_msg "message"
+
+lily_test wrap_assert(bool statement)
+{
+ lily_assert_msg(statement, assert_msg);
+ return 0;
+}
+
+lily_test check_assert()
+{
+ if (wrap_assert(true) != 0)
+ return "true assertion did not return 0!";
+
+ const char *result = wrap_assert(false);
+
+ if (result == 0)
+ return "false assertion returned zero!";
+
+ char *message;
+ if (!get_message(&message, result))
+ return "false assertion contained malformed message!";
+
+ if (strcmp(message, assert_msg) != 0)
+ return "false assertion message was not '" assert_msg "'!";
+ free(message);
+
+ return 0;
+}
+
+
+const char *assert_eq_true()
+{
+ lily_assert_equal(15, 15);
+ return 0;
+}
+const char *assert_eq_false()
+{
+ lily_assert_equal(14, 15);
+ return 0;
+}
+
+lily_test check_other_asserts()
+{
+ if (assert_eq_true() != 0)
+ return "equality assertion returned non-zero when true!";
+ const char *result = assert_eq_false();
+ if (result == 0)
+ return "equality assertion returned zero when false!";
+ char *message;
+ if (!get_message(&message, result))
+ return "false equality assertion returned malformed message!";
+ if (strcmp(message, "'14' is not equal to '15'") != 0)
+ return "false equality assertion returned incorrect message!";
+
+ return 0;
+}
+
+
+int main()
+{
+ run_test("check LILY_INIT()", check_init);
+ run_test("check basic assertion", check_assert);
+ run_test("check other asserts", check_other_asserts);
+
+ printf("all tests finished.\n");
+ return 0;
+}