wibble 1.1
test-runner.h
Go to the documentation of this file.
1// -*- C++ -*-
2#include <wibble/sys/macros.h>
3
4#include <unistd.h>
5#ifdef POSIX
6#include <wibble/sys/pipe.h>
7#endif
8#include <cstdio>
9
10#define RUN(x, y) x().y()
11
12struct RunTest {
13 const char *name;
14 void (*run)();
15};
16
17struct RunSuite {
18 const char *name;
21
22 int findTest( std::string name ) {
23 for ( int i = 0; i < testCount; ++i )
24 if ( tests[i].name == name )
25 return i;
26 return -1;
27 }
28
29};
30
32 virtual void status( std::string l ) = 0;
33 virtual void waitForAck() = 0;
34};
35
36struct RunAll {
40
41 RunSuite *findSuite( std::string name ) {
42 for ( int i = 0; i < suiteCount; ++i )
43 if ( suites[i].name == name )
44 return suites + i;
45 return 0;
46 }
47
48 void runSuite( RunSuite &s, int fromTest, int suite, int suiteCount )
49 {
51 "s/s: (%d/%d) %s", suite + 1, suiteCount, s.name ) );
52 for ( int i = fromTest; i < s.testCount; ++i ) {
54 "t/s: (%d/%d) %s", i, s.testCount, s.tests[i].name ) );
56 s.tests[i].run();
57 feedback->status( std::string( "t/d: " ) + s.tests[i].name );
59 // exit( 0 ); // TODO make this optional; safety vs
60 // performance tradeoff
61 }
62 feedback->status( std::string( "s/d: " ) + s.name );
63 }
64
65 void runTest( RunSuite &s, int test )
66 {
67 feedback->status( std::string( "s/s: (1/1) " ) + s.name );
68 feedback->status( std::string( "t/s: (1/1) " ) + s.tests[test].name );
70 s.tests[test].run();
71 feedback->status( std::string( "t/d: " ) + s.tests[test].name );
73 feedback->status( std::string( "s/d: " ) + s.name );
74 }
75
76 void runFrom( int suite, int test )
77 {
78 for ( int i = suite; i < suiteCount; ++i ) {
79 assert( suite <= suiteCount );
80 runSuite( suites[i], test, i, suiteCount );
81 test = 0;
82 }
83 }
84};
std::string fmtf(const char *f,...)
Definition string.cpp:113
Definition test-runner.h:36
void runFrom(int suite, int test)
Definition test-runner.h:76
void runSuite(RunSuite &s, int fromTest, int suite, int suiteCount)
Definition test-runner.h:48
int suiteCount
Definition test-runner.h:38
void runTest(RunSuite &s, int test)
Definition test-runner.h:65
RunFeedback * feedback
Definition test-runner.h:39
RunSuite * findSuite(std::string name)
Definition test-runner.h:41
RunSuite * suites
Definition test-runner.h:37
Definition test-runner.h:31
virtual void waitForAck()=0
virtual void status(std::string l)=0
Definition test-runner.h:17
int testCount
Definition test-runner.h:20
int findTest(std::string name)
Definition test-runner.h:22
RunTest * tests
Definition test-runner.h:19
const char * name
Definition test-runner.h:18
Definition test-runner.h:12
void(* run)()
Definition test-runner.h:14
const char * name
Definition test-runner.h:13
#define assert(x)
Definition test.h:30