testrunner.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /*
  2. * testrunner.h
  3. *
  4. * Created on: Jun 19, 2013
  5. * Author: petera
  6. */
  7. /*
  8. SUITE(mysuite)
  9. void setup(test *t) {}
  10. void teardown(test *t) {}
  11. TEST(mytest) {
  12. printf("mytest runs now..\n");
  13. return 0;
  14. } TEST_END(mytest)
  15. SUITE_END(mysuite)
  16. SUITE(mysuite2)
  17. void setup(test *t) {}
  18. void teardown(test *t) {}
  19. TEST(mytest2a) {
  20. printf("mytest2a runs now..\n");
  21. return 0;
  22. } TEST_END(mytest2a)
  23. TEST(mytest2b) {
  24. printf("mytest2b runs now..\n");
  25. return 0;
  26. } TEST_END(mytest2b)
  27. SUITE_END(mysuite2)
  28. void add_suites() {
  29. ADD_SUITE(mysuite);
  30. ADD_SUITE(mysuite2);
  31. }
  32. */
  33. #ifndef TESTS_H_
  34. #define TESTS_H_
  35. #define TEST_RES_OK 0
  36. #define TEST_RES_FAIL -1
  37. #define TEST_RES_ASSERT -2
  38. struct test_s;
  39. typedef int (*test_f)(struct test_s *t);
  40. typedef struct test_s {
  41. test_f f;
  42. char name[256];
  43. void *data;
  44. void (*setup)(struct test_s *t);
  45. void (*teardown)(struct test_s *t);
  46. struct test_s *_next;
  47. } test;
  48. typedef struct test_res_s {
  49. char name[256];
  50. struct test_res_s *_next;
  51. } test_res;
  52. #define TEST_CHECK(x) if (!(x)) { \
  53. printf(" TEST FAIL %s:%i\n", __FILE__, __LINE__); \
  54. goto __fail_stop; \
  55. }
  56. #define TEST_ASSERT(x) if (!(x)) { \
  57. printf(" TEST ASSERT %s:%i\n", __FILE__, __LINE__); \
  58. goto __fail_assert; \
  59. }
  60. #define DBGT(...) printf(__VA_ARGS__)
  61. #define str(s) #s
  62. #define SUITE(sui) \
  63. extern void __suite_##sui() {
  64. #define SUITE_END(sui) \
  65. }
  66. #define ADD_SUITE(sui) \
  67. __suite_##sui();
  68. #define TEST(tf) \
  69. int tf(struct test_s *t) { do
  70. #define TEST_END(tf) \
  71. while(0); \
  72. __fail_stop: return TEST_RES_FAIL; \
  73. __fail_assert: return TEST_RES_ASSERT; \
  74. } \
  75. add_test(tf, str(tf), setup, teardown);
  76. void add_suites();
  77. void test_init(void (*on_stop)(test *t));
  78. void add_test(test_f f, char *name, void (*setup)(test *t), void (*teardown)(test *t));
  79. void run_tests(int argc, char **args);
  80. #endif /* TESTS_H_ */