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