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 
12 struct RunTest {
13  const char *name;
14  void (*run)();
15 };
16 
17 struct RunSuite {
18  const char *name;
20  int testCount;
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 
31 struct RunFeedback {
32  virtual void status( std::string l ) = 0;
33  virtual void waitForAck() = 0;
34 };
35 
36 struct 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 * suites
Definition: test-runner.h:37
RunSuite * findSuite(std::string name)
Definition: test-runner.h:41
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