Showing
3 changed files
with
171 additions
and
0 deletions
tests/cclass_test.c
0 → 100644
| 1 | +#include <sys/types.h> | |
| 2 | + | |
| 3 | +#include "runtest.h" | |
| 4 | + | |
| 5 | + | |
| 6 | +char testname[] = "cclass_test"; | |
| 7 | + | |
| 8 | +int | |
| 9 | +dummy_ok(void) | |
| 10 | +{ | |
| 11 | + return TEST_OK; | |
| 12 | +} | |
| 13 | + | |
| 14 | +int | |
| 15 | +dummy_failed(void) | |
| 16 | +{ | |
| 17 | + return TEST_FAILED; | |
| 18 | +} | |
| 19 | + | |
| 20 | +int | |
| 21 | +dummy_error(void) | |
| 22 | +{ | |
| 23 | + return TEST_ERROR; | |
| 24 | +} | |
| 25 | + | |
| 26 | +testfunc tests[] = { | |
| 27 | + dummy_ok, | |
| 28 | + dummy_failed, | |
| 29 | + dummy_error | |
| 30 | +}; | |
| 31 | +size_t count = FUNCS_COUNT(tests); | |
| 32 | + | |
| 33 | +// vim: set et ts=4 sw=4: | ... | ... |
tests/runtest.c
0 → 100644
| 1 | +#include <stdio.h> | |
| 2 | +#include <stdlib.h> | |
| 3 | +#include <dlfcn.h> | |
| 4 | +#include <dirent.h> | |
| 5 | +#include <string.h> | |
| 6 | +#include <sys/types.h> | |
| 7 | + | |
| 8 | +#include "runtest.h" | |
| 9 | + | |
| 10 | +#define TEST_OK_CHAR '.' | |
| 11 | +#define TEST_FAILED_CHAR 'F' | |
| 12 | +#define TEST_ERROR_CHAR 'E' | |
| 13 | + | |
| 14 | + | |
| 15 | +const char results[3] = { | |
| 16 | + TEST_OK_CHAR, | |
| 17 | + TEST_FAILED_CHAR, | |
| 18 | + TEST_ERROR_CHAR | |
| 19 | +}; | |
| 20 | + | |
| 21 | + | |
| 22 | +void * | |
| 23 | +load_symbol(void * dlhandle, const char * const symbol) | |
| 24 | +{ | |
| 25 | + void * sym = dlsym(dlhandle, symbol); | |
| 26 | + char * error; | |
| 27 | + | |
| 28 | + if ((error = dlerror()) != NULL) { | |
| 29 | + fprintf(stderr, "%s\n", error); | |
| 30 | + exit(EXIT_FAILURE); | |
| 31 | + } | |
| 32 | + | |
| 33 | + return sym; | |
| 34 | +} | |
| 35 | + | |
| 36 | +void | |
| 37 | +runtests( | |
| 38 | + const char * const filename, | |
| 39 | + size_t * _count, | |
| 40 | + size_t * failures, | |
| 41 | + size_t * errors) | |
| 42 | +{ | |
| 43 | + size_t * count; | |
| 44 | + testfunc * tests; | |
| 45 | + const char * const testname; | |
| 46 | + //char * const * funcnames; | |
| 47 | + | |
| 48 | + size_t index; | |
| 49 | + void * dlhandle; | |
| 50 | + | |
| 51 | + dlhandle = dlopen("./cclass.test", RTLD_LAZY); | |
| 52 | + if (!dlhandle) { | |
| 53 | + fprintf(stderr, "%s\n", dlerror()); | |
| 54 | + exit(EXIT_FAILURE); | |
| 55 | + } | |
| 56 | + | |
| 57 | + * (void **) (&count) = load_symbol(dlhandle, "count"); | |
| 58 | + * (void **) (&tests) = load_symbol(dlhandle, "tests"); | |
| 59 | + * (void **) (&testname) = load_symbol(dlhandle, "testname"); | |
| 60 | + // * (void **) (&funcnames) = load_symbol(dlhandle, "funcnames"); | |
| 61 | + | |
| 62 | + *_count += *count; | |
| 63 | + | |
| 64 | + printf("running tests for %s\n", testname); | |
| 65 | + | |
| 66 | + for (index=0; index<*count; index++) { | |
| 67 | + int result = tests[index](); | |
| 68 | + | |
| 69 | + switch (result) { | |
| 70 | + case TEST_FAILED: (*failures)++; break; | |
| 71 | + case TEST_ERROR: (*errors)++; break; | |
| 72 | + } | |
| 73 | + | |
| 74 | + putchar(results[result]); | |
| 75 | + | |
| 76 | + if (79 == index%80) { | |
| 77 | + putchar('\n'); | |
| 78 | + } | |
| 79 | + | |
| 80 | + fflush(stdout); | |
| 81 | + } | |
| 82 | + puts("\n"); | |
| 83 | + | |
| 84 | + dlclose(dlhandle); | |
| 85 | +} | |
| 86 | + | |
| 87 | +int | |
| 88 | +main(int argc, char * argv[]) | |
| 89 | +{ | |
| 90 | + size_t count = 0; | |
| 91 | + size_t errors = 0; | |
| 92 | + size_t failures = 0; | |
| 93 | + size_t assertions = 0; | |
| 94 | + | |
| 95 | + DIR * dir; | |
| 96 | + struct dirent * dirent; | |
| 97 | + | |
| 98 | + dir = opendir("."); | |
| 99 | + | |
| 100 | + dirent = readdir(dir); | |
| 101 | + while (dirent) { | |
| 102 | + if (0 == strcmp(".test", dirent->d_name + strlen(dirent->d_name) - 5)) { | |
| 103 | + runtests(dirent->d_name, &count, &failures, &errors); | |
| 104 | + } | |
| 105 | + | |
| 106 | + dirent = readdir(dir); | |
| 107 | + } | |
| 108 | + closedir(dir); | |
| 109 | + | |
| 110 | + printf("running %lu tests: %lu - OK, %lu - FAILED, %lu - ERRORS\n", | |
| 111 | + count, | |
| 112 | + count - errors - failures, | |
| 113 | + failures, | |
| 114 | + errors); | |
| 115 | + | |
| 116 | + return 0; | |
| 117 | +} | |
| 118 | + | |
| 119 | +// vim: set et ts=4 sw=4: | ... | ... |
tests/runtest.h
0 → 100644
| 1 | +#ifndef __RUNTEST_h__ | |
| 2 | +#define __RUNTEST_h__ | |
| 3 | + | |
| 4 | +#include <sys/types.h> | |
| 5 | + | |
| 6 | + | |
| 7 | +enum RESULT_TYPES { | |
| 8 | + TEST_OK=0, | |
| 9 | + TEST_FAILED, | |
| 10 | + TEST_ERROR | |
| 11 | +}; | |
| 12 | + | |
| 13 | +typedef int (* testfunc)(void); | |
| 14 | +#define FUNCS_COUNT(array) (sizeof((array)) / sizeof(testfunc)) | |
| 15 | + | |
| 16 | +extern char testname[]; | |
| 17 | + | |
| 18 | +#endif//__RUNTEST_h__ | |
| 19 | +// vim: set et ts=4 sw=4: | ... | ... |
Please
register
or
login
to post a comment