75 lines
2.1 KiB
C
75 lines
2.1 KiB
C
#include "test.h"
|
|
#include "buffer.h"
|
|
#include <setjmp.h>
|
|
#include <stdio.h>
|
|
|
|
static jmp_buf s_testJmp;
|
|
static const char* s_failMsg;
|
|
|
|
void fail(const char* msg) {
|
|
s_failMsg = msg;
|
|
longjmp(s_testJmp, 1);
|
|
}
|
|
|
|
typedef struct {
|
|
const char* name;
|
|
Test func;
|
|
} TestCase;
|
|
|
|
#include "test_buffer.c"
|
|
#include "test_token.c"
|
|
|
|
static int s_totalTests;
|
|
static int s_greenTests;
|
|
|
|
static TestCase s_tests[] = {
|
|
{"buffer_string_reads_chars", test_buffer_string_reads_chars},
|
|
{"buffer_string_eof", test_buffer_string_eof},
|
|
{"buffer_string_eof_after_content", test_buffer_string_eof_after_content},
|
|
{"buffer_file_reads_chars", test_buffer_file_reads_chars},
|
|
{"buffer_file_open_fail", test_buffer_file_open_fail},
|
|
{"tokenstream_open_fail", test_tokenstream_open_fail},
|
|
{"tokenstream_simple_keyword", test_tokenstream_simple_keyword},
|
|
{"tokenstream_keywords_and_symbols", test_tokenstream_keywords_and_symbols},
|
|
{"tokenstream_parentheses_and_brackets", test_tokenstream_parentheses_and_brackets},
|
|
{"tokenstream_comma", test_tokenstream_comma},
|
|
{"tokenstream_whitespace_ignored", test_tokenstream_whitespace_ignored},
|
|
{"tokenstream_void_function_signature", test_tokenstream_void_function_signature},
|
|
{"tokenstream_info", test_tokenstream_info},
|
|
};
|
|
|
|
|
|
int main(int argc, char** argv) {
|
|
(void)argc;
|
|
(void)argv;
|
|
|
|
s_totalTests = sizeof(s_tests) / sizeof(s_tests[0]);
|
|
s_greenTests = 0;
|
|
|
|
const char* failedTests[s_totalTests + 1];
|
|
int failedCount = 0;
|
|
|
|
for (int i = 0; i < s_totalTests; i++) {
|
|
printf("%s...", s_tests[i].name);
|
|
s_failMsg = NULL;
|
|
|
|
if (setjmp(s_testJmp) == 0) {
|
|
s_tests[i].func();
|
|
printf(" [OK]\n");
|
|
s_greenTests++;
|
|
} else {
|
|
printf(" [FAIL]: %s\n", s_failMsg ? s_failMsg : "");
|
|
failedTests[failedCount++] = s_tests[i].name;
|
|
}
|
|
}
|
|
|
|
if (failedCount > 0) {
|
|
printf("\nFailed tests:\n");
|
|
for (int i = 0; i < failedCount; i++) {
|
|
printf(" - %s\n", failedTests[i]);
|
|
}
|
|
}
|
|
|
|
printf("\n%d/%d tests passed.\n", s_greenTests, s_totalTests);
|
|
return failedCount > 0 ? 1 : 0;
|
|
} |