aboutsummaryrefslogtreecommitdiff
path: root/src/stable/unitsuite.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/stable/unitsuite.h')
-rw-r--r--src/stable/unitsuite.h230
1 files changed, 115 insertions, 115 deletions
diff --git a/src/stable/unitsuite.h b/src/stable/unitsuite.h
index 3442753..46a0773 100644
--- a/src/stable/unitsuite.h
+++ b/src/stable/unitsuite.h
@@ -17,126 +17,126 @@
17 17
18namespace Bu 18namespace Bu
19{ 19{
20 /** 20 /**
21 * Provides a unit testing framework. This is pretty easy to use, probably 21 * Provides a unit testing framework. This is pretty easy to use, probably
22 * the best way to get started is to use ch to generate a template, or use 22 * the best way to get started is to use ch to generate a template, or use
23 * the code below with appropriate tweaks: 23 * the code below with appropriate tweaks:
24 *@code 24 *@code
25 * #include "unitsuite.h" 25 * #include "unitsuite.h"
26 * 26 *
27 * class Unit : public Bu::UnitSuite 27 * class Unit : public Bu::UnitSuite
28 * { 28 * {
29 * public: 29 * public:
30 * Unit() 30 * Unit()
31 * { 31 * {
32 * setName("Example"); 32 * setName("Example");
33 * addTest( Unit::test ); 33 * addTest( Unit::test );
34 * } 34 * }
35 * 35 *
36 * virtual ~Unit() { } 36 * virtual ~Unit() { }
37 * 37 *
38 * // 38 * //
39 * // Tests go here 39 * // Tests go here
40 * // 40 * //
41 * void test() 41 * void test()
42 * { 42 * {
43 * unitTest( 1 == 1 ); 43 * unitTest( 1 == 1 );
44 * } 44 * }
45 * }; 45 * };
46 * 46 *
47 * int main( int argc, char *argv[] ) 47 * int main( int argc, char *argv[] )
48 * { 48 * {
49 * return Unit().run( argc, argv ); 49 * return Unit().run( argc, argv );
50 * } 50 * }
51 * 51 *
52 @endcode 52 @endcode
53 * The main function can contain other things, but using this one exactly 53 * The main function can contain other things, but using this one exactly
54 * makes all of the test suites work exactly the same. Using the optional 54 * makes all of the test suites work exactly the same. Using the optional
55 * setName at the top of the constructor replaces the class name with the 55 * setName at the top of the constructor replaces the class name with the
56 * chosen name when printing out stats and info. 56 * chosen name when printing out stats and info.
57 */ 57 */
58 class UnitSuite 58 class UnitSuite
59 { 59 {
60 public: 60 public:
61 UnitSuite(); 61 UnitSuite();
62 UnitSuite( int iOptions ); 62 UnitSuite( int iOptions );
63 virtual ~UnitSuite(); 63 virtual ~UnitSuite();
64 64
65 int run( int argc=0, char *argv[]=NULL ); 65 int run( int argc=0, char *argv[]=NULL );
66 66
67 Bu::File tempFile( Bu::String &sFileName ); 67 Bu::File tempFile( Bu::String &sFileName );
68 68
69 typedef void (UnitSuite::*Test)(); 69 typedef void (UnitSuite::*Test)();
70 70
71 class Failed 71 class Failed
72 { 72 {
73 public: 73 public:
74 Failed() : str(""), bFile( false ) { } 74 Failed() : str(""), bFile( false ) { }
75 Failed( const String &s ) : str( s ), bFile( false ) { } 75 Failed( const String &s ) : str( s ), bFile( false ) { }
76 Failed( const String &s, const String &sFile, int nLine ) : 76 Failed( const String &s, const String &sFile, int nLine ) :
77 str( s ), sFile( sFile ), nLine( nLine ), bFile( true ) { } 77 str( s ), sFile( sFile ), nLine( nLine ), bFile( true ) { }
78 78
79 String str; 79 String str;
80 String sFile; 80 String sFile;
81 int nLine; 81 int nLine;
82 bool bFile; 82 bool bFile;
83 }; 83 };
84 84
85 enum 85 enum
86 { 86 {
87 optStopOnError = 0x000001 87 optStopOnError = 0x000001
88 }; 88 };
89 89
90 enum Expect 90 enum Expect
91 { 91 {
92 expectPass, 92 expectPass,
93 expectFail 93 expectFail
94 }; 94 };
95 95
96 protected: 96 protected:
97 void add( Test fTest, const Bu::String &sName, Expect e=expectPass ); 97 void add( Test fTest, const Bu::String &sName, Expect e=expectPass );
98 void setName( const String &sName ); 98 void setName( const String &sName );
99 99
100 void dispProgress(); 100 void dispProgress();
101 void setStepCount( int iSteps ); 101 void setStepCount( int iSteps );
102 void incProgress( int iAmnt = 1 ); 102 void incProgress( int iAmnt = 1 );
103 void setProgress( int iAmnt ); 103 void setProgress( int iAmnt );
104 104
105 private: 105 private:
106 int onListCases( Bu::Array<Bu::String> aParam ); 106 int onListCases( Bu::Array<Bu::String> aParam );
107 int onAddTest( Bu::Array<Bu::String> aParam ); 107 int onAddTest( Bu::Array<Bu::String> aParam );
108 108
109 private: 109 private:
110 typedef struct TestInfo 110 typedef struct TestInfo
111 { 111 {
112 String sName; 112 String sName;
113 Test fTest; 113 Test fTest;
114 Expect eExpect; 114 Expect eExpect;
115 } TestInfo; 115 } TestInfo;
116 116
117 typedef Bu::List<TestInfo> TestList; 117 typedef Bu::List<TestInfo> TestList;
118 TestList lTests; 118 TestList lTests;
119 String sSuiteName; 119 String sSuiteName;
120 120
121 int iOptions; 121 int iOptions;
122 122
123 typedef Bu::List<Bu::String> StrList; 123 typedef Bu::List<Bu::String> StrList;
124 StrList lFileCleanup; 124 StrList lFileCleanup;
125 int iNameWidth; 125 int iNameWidth;
126 int iStepCount; 126 int iStepCount;
127 int iProgress; 127 int iProgress;
128 time_t tLastUpdate; 128 time_t tLastUpdate;
129 129
130 Bu::Hash<Bu::String, bool> hSelTests; 130 Bu::Hash<Bu::String, bool> hSelTests;
131 }; 131 };
132 132
133Bu::Formatter &operator<<( Bu::Formatter &f, const Bu::UnitSuite::Expect &e ); 133Bu::Formatter &operator<<( Bu::Formatter &f, const Bu::UnitSuite::Expect &e );
134} 134}
135 135
136#define addTest( fn ) add( static_cast<Bu::UnitSuite::Test>(&fn), #fn ) 136#define addTest( fn ) add( static_cast<Bu::UnitSuite::Test>(&fn), #fn )
137#define unitTest( tst ) if( !(tst) ) \ 137#define unitTest( tst ) if( !(tst) ) \
138{ \ 138{ \
139 throw Bu::UnitSuite::Failed( #tst, __FILE__, __LINE__ ); \ 139 throw Bu::UnitSuite::Failed( #tst, __FILE__, __LINE__ ); \
140} else (void)0 140} else (void)0
141#define unitFailed( msg ) throw Bu::UnitSuite::Failed(msg, __FILE__, __LINE__) 141#define unitFailed( msg ) throw Bu::UnitSuite::Failed(msg, __FILE__, __LINE__)
142 142