- #include <stdarg.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "harness.h"
- test_batch_runner*
- test_batch_runner_new()
- {
- return (test_batch_runner *)calloc(1, sizeof(test_batch_runner));
- }
- static void
- test_result(test_batch_runner *runner, int cond, const char *msg, va_list ap)
- {
- ++runner->test_num;
- if (cond) {
- ++runner->num_passed;
- }
- else {
- fprintf(stderr, "FAILED test %d: ", runner->test_num);
- vfprintf(stderr, msg, ap);
- fprintf(stderr, "\n");
- ++runner->num_failed;
- }
- }
- void
- SKIP(test_batch_runner *runner, int num_tests)
- {
- runner->test_num += num_tests;
- runner->num_skipped += num_tests;
- }
- void
- OK(test_batch_runner *runner, int cond, const char *msg, ...)
- {
- va_list ap;
- va_start(ap, msg);
- test_result(runner, cond, msg, ap);
- va_end(ap);
- }
- void
- INT_EQ(test_batch_runner *runner, int got, int expected, const char *msg, ...)
- {
- int cond = got == expected;
- va_list ap;
- va_start(ap, msg);
- test_result(runner, cond, msg, ap);
- va_end(ap);
- if (!cond) {
- fprintf(stderr, " Got: %d\n", got);
- fprintf(stderr, " Expected: %d\n", expected);
- }
- }
- void
- STR_EQ(test_batch_runner *runner, const char *got, const char *expected,
- const char *msg, ...)
- {
- int cond = strcmp(got, expected) == 0;
- va_list ap;
- va_start(ap, msg);
- test_result(runner, cond, msg, ap);
- va_end(ap);
- if (!cond) {
- fprintf(stderr, " Got: \"%s\"\n", got);
- fprintf(stderr, " Expected: \"%s\"\n", expected);
- }
- }
- int
- test_ok(test_batch_runner *runner)
- {
- return runner->num_failed == 0;
- }
- void
- test_print_summary(test_batch_runner *runner)
- {
- int num_passed = runner->num_passed;
- int num_skipped = runner->num_skipped;
- int num_failed = runner->num_failed;
- fprintf(stderr, "%d tests passed, %d failed, %d skipped\n",
- num_passed, num_skipped, num_failed);
- if (test_ok(runner)) {
- fprintf(stderr, "PASS\n");
- }
- else {
- fprintf(stderr, "FAIL\n");
- }
- }
|