diff options
author | pommicket <pommicket@gmail.com> | 2025-09-15 17:16:48 -0400 |
---|---|---|
committer | pommicket <pommicket@gmail.com> | 2025-09-15 17:16:48 -0400 |
commit | 2b519f42fec913763abd0d967301916e763e770a (patch) | |
tree | c7268e64d6c0f3d7db7ac7134d20398a54ff8e36 /tests/main.c | |
parent | dc989291eb6b9b20a25a78f35d6f04968a88ed0b (diff) |
Better testing framework
Diffstat (limited to 'tests/main.c')
-rw-r--r-- | tests/main.c | 47 |
1 files changed, 43 insertions, 4 deletions
diff --git a/tests/main.c b/tests/main.c index 2b2bfae..c34a79d 100644 --- a/tests/main.c +++ b/tests/main.c @@ -17,15 +17,54 @@ void test_fail(const char *fmt, ...) { fprintf(stderr, "\n"); } +static const char *test_dir; + +#include <dirent.h> +char **list_dir(const char *dir_name, const char *suffix) { + char *dir_path = malloc(strlen(test_dir) + strlen(dir_name) + 8); + sprintf(dir_path, "%s/%s", test_dir, dir_name); + DIR *dir = opendir(dir_path); + if (!dir) { + test_fail("Couldn't open test directory %s", dir_path); + return NULL; + } + struct dirent *ent; + size_t entries = 0; + while ((ent = readdir(dir))) entries++; + rewinddir(dir); + char **listing = calloc(entries + 1, sizeof (char *)); + size_t i = 0; + while ((ent = readdir(dir))) { + const char *name = ent->d_name; + if (strlen(name) < strlen(suffix) || strcmp(name+strlen(name)-strlen(suffix), suffix) != 0 + || i >= entries) { + continue; + } + char *path = malloc(strlen(dir_path) + strlen(name) + 8); + sprintf(path, "%s/%s", dir_path, name); + listing[i++] = path; + } + closedir(dir); + free(dir_path); + return listing; +} + +void free_listing(char **listing) { + for (size_t i = 0; listing[i]; i++) { + free(listing[i]); + } + free(listing); +} + int main(int argc, char **argv) { if (argc > 2 || (argc == 2 && strcmp(argv[1], "--help") == 0)) { printf("usage: tests [TEST DIRECTORY]\n"); return EXIT_FAILURE; } - const char *test_dir = argc == 2 ? argv[1] : "../tests"; - test_parsing(test_dir); - test_errors(test_dir); - test_location(test_dir); + test_dir = argc == 2 ? argv[1] : "../tests"; + test_parsing(); + test_errors(); + test_location(); if (any_failure) { fprintf(stderr, "\x1b[1m\x1b[91mSome tests failed.\x1b[0m\n"); return EXIT_FAILURE; |