diff options
Diffstat (limited to 'tests/test.c')
-rw-r--r-- | tests/test.c | 116 |
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; +} |