diff options
Diffstat (limited to '')
-rw-r--r-- | build.conf | 16 | ||||
-rw-r--r-- | src/fstring.h | 24 | ||||
-rw-r--r-- | src/ssocket.cpp | 4 | ||||
-rw-r--r-- | src/unit/fstring.cpp | 28 | ||||
-rw-r--r-- | src/unit/sfile.cpp | 27 | ||||
-rw-r--r-- | src/unitsuite.cpp | 67 | ||||
-rw-r--r-- | src/unitsuite.h | 60 |
7 files changed, 224 insertions, 2 deletions
@@ -30,6 +30,22 @@ filesIn("src/tests") filter regexp("^src/tests/(.*)\\.cpp$", "tests/{re:1}"): | |||
30 | set "LDFLAGS" += "-L. -lbu++", | 30 | set "LDFLAGS" += "-L. -lbu++", |
31 | input "src/{target}.cpp" | 31 | input "src/{target}.cpp" |
32 | 32 | ||
33 | directoriesIn("src/unit","unit/"): | ||
34 | rule "exe", | ||
35 | target file, | ||
36 | requires "libbu++.a", | ||
37 | set "CXXFLAGS" += "-Isrc", | ||
38 | set "LDFLAGS" += "-L. -lbu++", | ||
39 | input filesIn("{fulldir}") filter regexp("^.*\\.cpp$") | ||
40 | |||
41 | filesIn("src/unit") filter regexp("^src/unit/(.*)\\.cpp$", "unit/{re:1}"): | ||
42 | rule "exe", | ||
43 | target file, | ||
44 | requires "libbu++.a", | ||
45 | set "CXXFLAGS" += "-Isrc", | ||
46 | set "LDFLAGS" += "-L. -lbu++", | ||
47 | input "src/{target}.cpp" | ||
48 | |||
33 | "tests/plugin": set "LDFLAGS" += "-ldl" | 49 | "tests/plugin": set "LDFLAGS" += "-ldl" |
34 | 50 | ||
35 | rule "exe": | 51 | rule "exe": |
diff --git a/src/fstring.h b/src/fstring.h index 0184301..751beb8 100644 --- a/src/fstring.h +++ b/src/fstring.h | |||
@@ -364,6 +364,30 @@ namespace Bu | |||
364 | } | 364 | } |
365 | } | 365 | } |
366 | 366 | ||
367 | long find( const char *sText ) | ||
368 | { | ||
369 | long nTLen = strlen( sText ); | ||
370 | flatten(); | ||
371 | for( long j = 0; j < pFirst->nLength-nTLen; j++ ) | ||
372 | { | ||
373 | if( !strncmp( sText, pFirst->pData+j, nTLen ) ) | ||
374 | return j; | ||
375 | } | ||
376 | return -1; | ||
377 | } | ||
378 | |||
379 | long rfind( const char *sText ) | ||
380 | { | ||
381 | long nTLen = strlen( sText ); | ||
382 | flatten(); | ||
383 | for( long j = pFirst->nLength-nTLen-1; j >= 0; j-- ) | ||
384 | { | ||
385 | if( !strncmp( sText, pFirst->pData+j, nTLen ) ) | ||
386 | return j; | ||
387 | } | ||
388 | return -1; | ||
389 | } | ||
390 | |||
367 | void archive( class Archive &ar ) | 391 | void archive( class Archive &ar ) |
368 | { | 392 | { |
369 | if( ar.isLoading() ) | 393 | if( ar.isLoading() ) |
diff --git a/src/ssocket.cpp b/src/ssocket.cpp index bdaac24..85a2da0 100644 --- a/src/ssocket.cpp +++ b/src/ssocket.cpp | |||
@@ -1,9 +1,9 @@ | |||
1 | #include "ssocket.h" | 1 | #include "ssocket.h" |
2 | 2 | ||
3 | SSocket::SSocket() | 3 | Bu::SSocket::SSocket() |
4 | { | 4 | { |
5 | } | 5 | } |
6 | 6 | ||
7 | SSocket::~SSocket() | 7 | Bu::SSocket::~SSocket() |
8 | { | 8 | { |
9 | } | 9 | } |
diff --git a/src/unit/fstring.cpp b/src/unit/fstring.cpp new file mode 100644 index 0000000..72755eb --- /dev/null +++ b/src/unit/fstring.cpp | |||
@@ -0,0 +1,28 @@ | |||
1 | #include "fstring.h" | ||
2 | #include "unitsuite.h" | ||
3 | |||
4 | class Unit : public Bu::UnitSuite | ||
5 | { | ||
6 | public: | ||
7 | Unit() | ||
8 | { | ||
9 | setName("FString"); | ||
10 | addTest( Unit::test1 ); | ||
11 | } | ||
12 | |||
13 | virtual ~Unit() | ||
14 | { | ||
15 | } | ||
16 | |||
17 | void test1() | ||
18 | { | ||
19 | unitTest( 1 == 1 ); | ||
20 | unitTest( 1 == 0 ); | ||
21 | } | ||
22 | }; | ||
23 | |||
24 | int main( int argc, char *argv[] ) | ||
25 | { | ||
26 | return Unit().run( argc, argv ); | ||
27 | } | ||
28 | |||
diff --git a/src/unit/sfile.cpp b/src/unit/sfile.cpp new file mode 100644 index 0000000..7b19942 --- /dev/null +++ b/src/unit/sfile.cpp | |||
@@ -0,0 +1,27 @@ | |||
1 | #include "unitsuite.h" | ||
2 | |||
3 | class Unit : public Bu::UnitSuite | ||
4 | { | ||
5 | public: | ||
6 | Unit() | ||
7 | { | ||
8 | setName("SFile"); | ||
9 | addTest( Unit::test ); | ||
10 | } | ||
11 | |||
12 | virtual ~Unit() { } | ||
13 | |||
14 | // | ||
15 | // Tests go here | ||
16 | // | ||
17 | void test() | ||
18 | { | ||
19 | unitTest( 1 == 1 ); | ||
20 | } | ||
21 | }; | ||
22 | |||
23 | int main( int argc, char *argv[] ) | ||
24 | { | ||
25 | return Unit().run( argc, argv ); | ||
26 | } | ||
27 | |||
diff --git a/src/unitsuite.cpp b/src/unitsuite.cpp new file mode 100644 index 0000000..2a28eb5 --- /dev/null +++ b/src/unitsuite.cpp | |||
@@ -0,0 +1,67 @@ | |||
1 | #include "unitsuite.h" | ||
2 | |||
3 | Bu::UnitSuite::UnitSuite() | ||
4 | { | ||
5 | } | ||
6 | |||
7 | Bu::UnitSuite::~UnitSuite() | ||
8 | { | ||
9 | } | ||
10 | |||
11 | int Bu::UnitSuite::run( int argc, char *argv[] ) | ||
12 | { | ||
13 | for( TestList::iterator i = lTests.begin(); i != lTests.end(); i++ ) | ||
14 | { | ||
15 | printf("%s: ", i->sName.getStr() ); | ||
16 | fflush( stdout ); | ||
17 | try | ||
18 | { | ||
19 | (this->*(i->fTest))(); | ||
20 | printf("passed.\n"); | ||
21 | } | ||
22 | catch( Failed &e ) | ||
23 | { | ||
24 | if( e.bFile ) | ||
25 | { | ||
26 | printf("unitTest(%s) failed. (%s:%d)\n", | ||
27 | e.str.getStr(), | ||
28 | e.sFile.getStr(), | ||
29 | e.nLine | ||
30 | ); | ||
31 | } | ||
32 | else | ||
33 | { | ||
34 | printf("unitTest(%s) failed.\n", | ||
35 | e.str.getStr() | ||
36 | ); | ||
37 | } | ||
38 | } | ||
39 | catch( ... ) | ||
40 | { | ||
41 | printf("failed with external exception.\n"); | ||
42 | } | ||
43 | } | ||
44 | |||
45 | return 0; | ||
46 | } | ||
47 | |||
48 | void Bu::UnitSuite::add( Test fTest, Bu::FString sName ) | ||
49 | { | ||
50 | TestInfo ti; | ||
51 | ti.sName = sName; | ||
52 | long index = ti.sName.rfind("::"); | ||
53 | if( index != -1 ) | ||
54 | { | ||
55 | FString tmp = sSuiteName; | ||
56 | tmp += ti.sName.getStr()+index; | ||
57 | ti.sName = tmp; | ||
58 | } | ||
59 | ti.fTest = fTest; | ||
60 | lTests.push_back( ti ); | ||
61 | } | ||
62 | |||
63 | void Bu::UnitSuite::setName( const FString &sName ) | ||
64 | { | ||
65 | sSuiteName = sName; | ||
66 | } | ||
67 | |||
diff --git a/src/unitsuite.h b/src/unitsuite.h new file mode 100644 index 0000000..3502a1b --- /dev/null +++ b/src/unitsuite.h | |||
@@ -0,0 +1,60 @@ | |||
1 | #ifndef UNIT_SUITE_H | ||
2 | #define UNIT_SUITE_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <list> | ||
6 | #include "fstring.h" | ||
7 | |||
8 | namespace Bu | ||
9 | { | ||
10 | /** | ||
11 | * | ||
12 | */ | ||
13 | class UnitSuite | ||
14 | { | ||
15 | public: | ||
16 | UnitSuite(); | ||
17 | virtual ~UnitSuite(); | ||
18 | |||
19 | int run( int argc=0, char *argv[]=NULL ); | ||
20 | |||
21 | typedef void (UnitSuite::*Test)(); | ||
22 | |||
23 | class Failed | ||
24 | { | ||
25 | public: | ||
26 | Failed() : str(""), bFile( false ) { } | ||
27 | Failed( const FString &s ) : str( s ), bFile( false ) { } | ||
28 | Failed( const FString &s, const FString &sFile, int nLine ) : | ||
29 | str( s ), sFile( sFile ), nLine( nLine ), bFile( true ) { } | ||
30 | |||
31 | FString str; | ||
32 | FString sFile; | ||
33 | int nLine; | ||
34 | bool bFile; | ||
35 | }; | ||
36 | |||
37 | protected: | ||
38 | void add( Test fTest, Bu::FString sName ); | ||
39 | void setName( const FString &sName ); | ||
40 | |||
41 | private: | ||
42 | typedef struct TestInfo | ||
43 | { | ||
44 | FString sName; | ||
45 | Test fTest; | ||
46 | } TestInfo; | ||
47 | |||
48 | typedef std::list<TestInfo> TestList; | ||
49 | TestList lTests; | ||
50 | FString sSuiteName; | ||
51 | }; | ||
52 | } | ||
53 | |||
54 | #define addTest( fn ) add( static_cast<Bu::UnitSuite::Test>(&fn), #fn ) | ||
55 | #define unitTest( tst ) if( !(tst) ) \ | ||
56 | { \ | ||
57 | throw Bu::UnitSuite::Failed( #tst, __FILE__, __LINE__ ); \ | ||
58 | } | ||
59 | |||
60 | #endif | ||