summaryrefslogtreecommitdiff
path: root/tests/main.c
diff options
context:
space:
mode:
authorpommicket <pommicket@gmail.com>2025-09-15 17:16:48 -0400
committerpommicket <pommicket@gmail.com>2025-09-15 17:16:48 -0400
commit2b519f42fec913763abd0d967301916e763e770a (patch)
treec7268e64d6c0f3d7db7ac7134d20398a54ff8e36 /tests/main.c
parentdc989291eb6b9b20a25a78f35d6f04968a88ed0b (diff)
Better testing framework
Diffstat (limited to 'tests/main.c')
-rw-r--r--tests/main.c47
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;