Commit ffe14cc4eebc1d48af754e84ea6eef8640e599e8

Authored by Georg Hopp
1 parent b44336c0

work on test <<framework>>

  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:
  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:
  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