Changeset 477 for library/tests/unittest-cpp
- Timestamp:
- 08/05/09 14:40:03 (16 years ago)
- Location:
- library/tests/unittest-cpp
- Files:
-
- 44 modified
Legend:
- Unmodified
- Added
- Removed
-
library/tests/unittest-cpp/AssertException.cpp
r418 r477 4 4 namespace UnitTest { 5 5 6 AssertException::AssertException(char const* description, char const* filename, int lineNumber) 7 : m_lineNumber(lineNumber) 8 { 6 AssertException::AssertException ( char const* description, char const* filename, int lineNumber ) 7 : m_lineNumber ( lineNumber ) { 9 8 using namespace std; 10 9 11 strcpy(m_description, description);12 strcpy(m_filename, filename);10 strcpy ( m_description, description ); 11 strcpy ( m_filename, filename ); 13 12 } 14 13 15 AssertException::~AssertException() throw() 16 { 14 AssertException::~AssertException() throw() { 17 15 } 18 16 19 char const* AssertException::what() const throw() 20 { 21 return m_description; 17 char const* AssertException::what() const throw() { 18 return m_description; 22 19 } 23 20 24 char const* AssertException::Filename() const 25 { 26 return m_filename; 21 char const* AssertException::Filename() const { 22 return m_filename; 27 23 } 28 24 29 int AssertException::LineNumber() const 30 { 31 return m_lineNumber; 25 int AssertException::LineNumber() const { 26 return m_lineNumber; 32 27 } 33 28 -
library/tests/unittest-cpp/AssertException.h
r418 r477 7 7 namespace UnitTest { 8 8 9 class AssertException : public std::exception 10 { 9 class AssertException : public std::exception { 11 10 public: 12 AssertException(char const* description, char const* filename, int lineNumber);13 11 AssertException ( char const* description, char const* filename, int lineNumber ); 12 virtual ~AssertException() throw(); 14 13 15 14 virtual char const* what() const throw(); 16 15 17 18 16 char const* Filename() const; 17 int LineNumber() const; 19 18 20 19 private: 21 22 23 20 char m_description[512]; 21 char m_filename[256]; 22 int m_lineNumber; 24 23 }; 25 24 -
library/tests/unittest-cpp/CheckMacros.h
r418 r477 1 #ifndef UNITTEST_CHECKMACROS_H 1 #ifndef UNITTEST_CHECKMACROS_H 2 2 #define UNITTEST_CHECKMACROS_H 3 3 … … 9 9 10 10 #ifdef CHECK 11 11 #error UnitTest++ redefines CHECK 12 12 #endif 13 13 14 14 #ifdef CHECK_EQUAL 15 15 #error UnitTest++ redefines CHECK_EQUAL 16 16 #endif 17 17 18 18 #ifdef CHECK_CLOSE 19 19 #error UnitTest++ redefines CHECK_CLOSE 20 20 #endif 21 21 22 22 #ifdef CHECK_ARRAY_EQUAL 23 23 #error UnitTest++ redefines CHECK_ARRAY_EQUAL 24 24 #endif 25 25 26 26 #ifdef CHECK_ARRAY_CLOSE 27 27 #error UnitTest++ redefines CHECK_ARRAY_CLOSE 28 28 #endif 29 29 30 30 #ifdef CHECK_ARRAY2D_CLOSE 31 31 #error UnitTest++ redefines CHECK_ARRAY2D_CLOSE 32 32 #endif 33 33 -
library/tests/unittest-cpp/Checks.cpp
r418 r477 6 6 namespace { 7 7 8 void CheckStringsEqual(TestResults& results, char const* expected, char const* actual, 9 TestDetails const& details) 10 { 8 void CheckStringsEqual ( TestResults& results, char const* expected, char const* actual, 9 TestDetails const& details ) { 11 10 using namespace std; 12 11 13 if (strcmp(expected, actual)) 14 { 15 UnitTest::MemoryOutStream stream; 16 stream << "Expected " << expected << " but was " << actual; 12 if ( strcmp ( expected, actual ) ) { 13 UnitTest::MemoryOutStream stream; 14 stream << "Expected " << expected << " but was " << actual; 17 15 18 results.OnTestFailure(details, stream.GetText());19 16 results.OnTestFailure ( details, stream.GetText() ); 17 } 20 18 } 21 19 … … 23 21 24 22 25 void CheckEqual(TestResults& results, char const* expected, char const* actual, 26 TestDetails const& details) 27 { 28 CheckStringsEqual(results, expected, actual, details); 23 void CheckEqual ( TestResults& results, char const* expected, char const* actual, 24 TestDetails const& details ) { 25 CheckStringsEqual ( results, expected, actual, details ); 29 26 } 30 27 31 void CheckEqual(TestResults& results, char* expected, char* actual, 32 TestDetails const& details) 33 { 34 CheckStringsEqual(results, expected, actual, details); 28 void CheckEqual ( TestResults& results, char* expected, char* actual, 29 TestDetails const& details ) { 30 CheckStringsEqual ( results, expected, actual, details ); 35 31 } 36 32 37 void CheckEqual(TestResults& results, char* expected, char const* actual, 38 TestDetails const& details) 39 { 40 CheckStringsEqual(results, expected, actual, details); 33 void CheckEqual ( TestResults& results, char* expected, char const* actual, 34 TestDetails const& details ) { 35 CheckStringsEqual ( results, expected, actual, details ); 41 36 } 42 37 43 void CheckEqual(TestResults& results, char const* expected, char* actual, 44 TestDetails const& details) 45 { 46 CheckStringsEqual(results, expected, actual, details); 38 void CheckEqual ( TestResults& results, char const* expected, char* actual, 39 TestDetails const& details ) { 40 CheckStringsEqual ( results, expected, actual, details ); 47 41 } 48 42 -
library/tests/unittest-cpp/Checks.h
r418 r477 10 10 11 11 template< typename Value > 12 bool Check(Value const value) 13 { 14 return !!value; // doing double negative to avoid silly VS warnings 12 bool Check ( Value const value ) { 13 return !!value; // doing double negative to avoid silly VS warnings 15 14 } 16 15 17 16 18 17 template< typename Expected, typename Actual > 19 void CheckEqual(TestResults& results, Expected const& expected, Actual const& actual, TestDetails const& details) 20 { 21 if (!(expected == actual)) 22 { 23 UnitTest::MemoryOutStream stream; 24 stream << "Expected " << expected << " but was " << actual; 18 void CheckEqual ( TestResults& results, Expected const& expected, Actual const& actual, TestDetails const& details ) { 19 if ( ! ( expected == actual ) ) { 20 UnitTest::MemoryOutStream stream; 21 stream << "Expected " << expected << " but was " << actual; 25 22 26 results.OnTestFailure(details, stream.GetText());27 23 results.OnTestFailure ( details, stream.GetText() ); 24 } 28 25 } 29 26 30 void CheckEqual (TestResults& results, char const* expected, char const* actual, TestDetails const& details);27 void CheckEqual ( TestResults& results, char const* expected, char const* actual, TestDetails const& details ); 31 28 32 void CheckEqual (TestResults& results, char* expected, char* actual, TestDetails const& details);29 void CheckEqual ( TestResults& results, char* expected, char* actual, TestDetails const& details ); 33 30 34 void CheckEqual (TestResults& results, char* expected, char const* actual, TestDetails const& details);31 void CheckEqual ( TestResults& results, char* expected, char const* actual, TestDetails const& details ); 35 32 36 void CheckEqual (TestResults& results, char const* expected, char* actual, TestDetails const& details);33 void CheckEqual ( TestResults& results, char const* expected, char* actual, TestDetails const& details ); 37 34 38 35 template< typename Expected, typename Actual, typename Tolerance > 39 bool AreClose(Expected const& expected, Actual const& actual, Tolerance const& tolerance) 40 { 41 return (actual >= (expected - tolerance)) && (actual <= (expected + tolerance)); 36 bool AreClose ( Expected const& expected, Actual const& actual, Tolerance const& tolerance ) { 37 return ( actual >= ( expected - tolerance ) ) && ( actual <= ( expected + tolerance ) ); 42 38 } 43 39 44 40 template< typename Expected, typename Actual, typename Tolerance > 45 void CheckClose(TestResults& results, Expected const& expected, Actual const& actual, Tolerance const& tolerance, 46 TestDetails const& details) 47 { 48 if (!AreClose(expected, actual, tolerance)) 49 { 50 UnitTest::MemoryOutStream stream; 51 stream << "Expected " << expected << " +/- " << tolerance << " but was " << actual; 41 void CheckClose ( TestResults& results, Expected const& expected, Actual const& actual, Tolerance const& tolerance, 42 TestDetails const& details ) { 43 if ( !AreClose ( expected, actual, tolerance ) ) { 44 UnitTest::MemoryOutStream stream; 45 stream << "Expected " << expected << " +/- " << tolerance << " but was " << actual; 52 46 53 results.OnTestFailure(details, stream.GetText());54 47 results.OnTestFailure ( details, stream.GetText() ); 48 } 55 49 } 56 50 57 51 58 52 template< typename Expected, typename Actual > 59 void CheckArrayEqual(TestResults& results, Expected const& expected, Actual const& actual, 60 int const count, TestDetails const& details) 61 { 62 bool equal = true; 63 for (int i = 0; i < count; ++i) 64 equal &= (expected[i] == actual[i]); 53 void CheckArrayEqual ( TestResults& results, Expected const& expected, Actual const& actual, 54 int const count, TestDetails const& details ) { 55 bool equal = true; 56 for ( int i = 0; i < count; ++i ) 57 equal &= ( expected[i] == actual[i] ); 65 58 66 if (!equal) 67 { 68 UnitTest::MemoryOutStream stream; 59 if ( !equal ) { 60 UnitTest::MemoryOutStream stream; 69 61 70 62 stream << "Expected [ "; 71 63 72 for ( int expectedIndex = 0; expectedIndex < count; ++expectedIndex)73 64 for ( int expectedIndex = 0; expectedIndex < count; ++expectedIndex ) 65 stream << expected[expectedIndex] << " "; 74 66 75 67 stream << "] but was [ "; 76 68 77 for ( int actualIndex = 0; actualIndex < count; ++actualIndex)78 69 for ( int actualIndex = 0; actualIndex < count; ++actualIndex ) 70 stream << actual[actualIndex] << " "; 79 71 80 72 stream << "]"; 81 73 82 results.OnTestFailure(details, stream.GetText());83 74 results.OnTestFailure ( details, stream.GetText() ); 75 } 84 76 } 85 77 86 78 template< typename Expected, typename Actual, typename Tolerance > 87 bool ArrayAreClose(Expected const& expected, Actual const& actual, int const count, Tolerance const& tolerance) 88 { 89 bool equal = true; 90 for (int i = 0; i < count; ++i) 91 equal &= AreClose(expected[i], actual[i], tolerance); 92 return equal; 79 bool ArrayAreClose ( Expected const& expected, Actual const& actual, int const count, Tolerance const& tolerance ) { 80 bool equal = true; 81 for ( int i = 0; i < count; ++i ) 82 equal &= AreClose ( expected[i], actual[i], tolerance ); 83 return equal; 93 84 } 94 85 95 86 template< typename Expected, typename Actual, typename Tolerance > 96 void CheckArrayClose(TestResults& results, Expected const& expected, Actual const& actual, 97 int const count, Tolerance const& tolerance, TestDetails const& details) 98 { 99 bool equal = ArrayAreClose(expected, actual, count, tolerance); 87 void CheckArrayClose ( TestResults& results, Expected const& expected, Actual const& actual, 88 int const count, Tolerance const& tolerance, TestDetails const& details ) { 89 bool equal = ArrayAreClose ( expected, actual, count, tolerance ); 100 90 101 if (!equal) 102 { 103 UnitTest::MemoryOutStream stream; 91 if ( !equal ) { 92 UnitTest::MemoryOutStream stream; 104 93 105 106 for (int expectedIndex = 0; expectedIndex < count; ++expectedIndex)107 108 94 stream << "Expected [ "; 95 for ( int expectedIndex = 0; expectedIndex < count; ++expectedIndex ) 96 stream << expected[expectedIndex] << " "; 97 stream << "] +/- " << tolerance << " but was [ "; 109 98 110 for ( int actualIndex = 0; actualIndex < count; ++actualIndex)111 112 99 for ( int actualIndex = 0; actualIndex < count; ++actualIndex ) 100 stream << actual[actualIndex] << " "; 101 stream << "]"; 113 102 114 results.OnTestFailure(details, stream.GetText());115 103 results.OnTestFailure ( details, stream.GetText() ); 104 } 116 105 } 117 106 118 107 template< typename Expected, typename Actual, typename Tolerance > 119 void CheckArray2DClose(TestResults& results, Expected const& expected, Actual const& actual, 120 int const rows, int const columns, Tolerance const& tolerance, TestDetails const& details) 121 { 122 bool equal = true; 123 for (int i = 0; i < rows; ++i) 124 equal &= ArrayAreClose(expected[i], actual[i], columns, tolerance); 108 void CheckArray2DClose ( TestResults& results, Expected const& expected, Actual const& actual, 109 int const rows, int const columns, Tolerance const& tolerance, TestDetails const& details ) { 110 bool equal = true; 111 for ( int i = 0; i < rows; ++i ) 112 equal &= ArrayAreClose ( expected[i], actual[i], columns, tolerance ); 125 113 126 if (!equal) 127 { 128 UnitTest::MemoryOutStream stream; 114 if ( !equal ) { 115 UnitTest::MemoryOutStream stream; 129 116 130 stream << "Expected [ "; 117 stream << "Expected [ "; 131 118 132 for (int expectedRow = 0; expectedRow < rows; ++expectedRow) 133 { 134 stream << "[ "; 135 for (int expectedColumn = 0; expectedColumn < columns; ++expectedColumn) 136 stream << expected[expectedRow][expectedColumn] << " "; 137 stream << "] "; 138 } 119 for ( int expectedRow = 0; expectedRow < rows; ++expectedRow ) { 120 stream << "[ "; 121 for ( int expectedColumn = 0; expectedColumn < columns; ++expectedColumn ) 122 stream << expected[expectedRow][expectedColumn] << " "; 123 stream << "] "; 124 } 139 125 140 126 stream << "] +/- " << tolerance << " but was [ "; 141 127 142 for (int actualRow = 0; actualRow < rows; ++actualRow) 143 { 144 stream << "[ "; 145 for (int actualColumn = 0; actualColumn < columns; ++actualColumn) 146 stream << actual[actualRow][actualColumn] << " "; 147 stream << "] "; 148 } 128 for ( int actualRow = 0; actualRow < rows; ++actualRow ) { 129 stream << "[ "; 130 for ( int actualColumn = 0; actualColumn < columns; ++actualColumn ) 131 stream << actual[actualRow][actualColumn] << " "; 132 stream << "] "; 133 } 149 134 150 135 stream << "]"; 151 136 152 results.OnTestFailure(details, stream.GetText());153 137 results.OnTestFailure ( details, stream.GetText() ); 138 } 154 139 } 155 140 -
library/tests/unittest-cpp/Config.h
r418 r477 5 5 6 6 #if defined(_MSC_VER) 7 8 9 7 #pragma warning(disable:4127) // conditional expression is constant 8 #pragma warning(disable:4702) // unreachable code 9 #pragma warning(disable:4722) // destructor never returns, potential memory leak 10 10 11 12 13 14 11 #if (_MSC_VER == 1200) // VC6 12 #pragma warning(disable:4786) 13 #pragma warning(disable:4290) 14 #endif 15 15 #endif 16 16 17 17 #if defined(unix) || defined(__unix__) || defined(__unix) || defined(linux) || \ 18 defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__) 19 18 defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__) 19 #define UNITTEST_POSIX 20 20 #endif 21 21 22 22 #if defined(__MINGW32__) 23 23 #define UNITTEST_MINGW 24 24 #endif 25 25 -
library/tests/unittest-cpp/CurrentTest.cpp
r418 r477 4 4 namespace UnitTest { 5 5 6 TestResults*& CurrentTest::Results() 7 { 6 TestResults*& CurrentTest::Results() { 8 7 static TestResults* testResults = NULL; 9 8 return testResults; 10 9 } 11 10 12 const TestDetails*& CurrentTest::Details() 13 { 11 const TestDetails*& CurrentTest::Details() { 14 12 static const TestDetails* testDetails = NULL; 15 13 return testDetails; -
library/tests/unittest-cpp/CurrentTest.h
r418 r477 7 7 class TestDetails; 8 8 9 namespace CurrentTest 10 { 11 TestResults*& Results(); 12 const TestDetails*& Details(); 9 namespace CurrentTest { 10 TestResults*& Results(); 11 const TestDetails*& Details(); 13 12 } 14 13 -
library/tests/unittest-cpp/DeferredTestReporter.cpp
r418 r477 4 4 using namespace UnitTest; 5 5 6 void DeferredTestReporter::ReportTestStart(TestDetails const& details) 7 { 8 m_results.push_back(DeferredTestResult(details.suiteName, details.testName)); 6 void DeferredTestReporter::ReportTestStart ( TestDetails const& details ) { 7 m_results.push_back ( DeferredTestResult ( details.suiteName, details.testName ) ); 9 8 } 10 9 11 void DeferredTestReporter::ReportFailure(TestDetails const& details, char const* failure) 12 { 13 DeferredTestResult& r = m_results.back(); 14 r.failed = true; 15 r.failures.push_back(DeferredTestResult::Failure(details.lineNumber, failure)); 16 r.failureFile = details.filename; 10 void DeferredTestReporter::ReportFailure ( TestDetails const& details, char const* failure ) { 11 DeferredTestResult& r = m_results.back(); 12 r.failed = true; 13 r.failures.push_back ( DeferredTestResult::Failure ( details.lineNumber, failure ) ); 14 r.failureFile = details.filename; 17 15 } 18 16 19 void DeferredTestReporter::ReportTestFinish(TestDetails const&, float secondsElapsed) 20 { 21 DeferredTestResult& r = m_results.back(); 22 r.timeElapsed = secondsElapsed; 17 void DeferredTestReporter::ReportTestFinish ( TestDetails const&, float secondsElapsed ) { 18 DeferredTestResult& r = m_results.back(); 19 r.timeElapsed = secondsElapsed; 23 20 } 24 21 25 DeferredTestReporter::DeferredTestResultList& DeferredTestReporter::GetResults() 26 { 27 return m_results; 22 DeferredTestReporter::DeferredTestResultList& DeferredTestReporter::GetResults() { 23 return m_results; 28 24 } -
library/tests/unittest-cpp/DeferredTestReporter.h
r418 r477 8 8 #include <vector> 9 9 10 namespace UnitTest 11 { 10 namespace UnitTest { 12 11 13 class DeferredTestReporter : public TestReporter 14 { 12 class DeferredTestReporter : public TestReporter { 15 13 public: 16 virtual void ReportTestStart(TestDetails const& details);17 virtual void ReportFailure(TestDetails const& details, char const* failure);18 virtual void ReportTestFinish(TestDetails const& details, float secondsElapsed);14 virtual void ReportTestStart ( TestDetails const& details ); 15 virtual void ReportFailure ( TestDetails const& details, char const* failure ); 16 virtual void ReportTestFinish ( TestDetails const& details, float secondsElapsed ); 19 17 20 21 18 typedef std::vector< DeferredTestResult > DeferredTestResultList; 19 DeferredTestResultList& GetResults(); 22 20 23 21 private: 24 22 DeferredTestResultList m_results; 25 23 }; 26 24 -
library/tests/unittest-cpp/DeferredTestResult.cpp
r418 r477 2 2 #include "Config.h" 3 3 4 namespace UnitTest 5 { 4 namespace UnitTest { 6 5 7 6 DeferredTestResult::DeferredTestResult() 8 : suiteName("") 9 , testName("") 10 , failureFile("") 11 , timeElapsed(0.0f) 12 , failed(false) 13 { 7 : suiteName ( "" ) 8 , testName ( "" ) 9 , failureFile ( "" ) 10 , timeElapsed ( 0.0f ) 11 , failed ( false ) { 14 12 } 15 13 16 DeferredTestResult::DeferredTestResult(char const* suite, char const* test) 17 : suiteName(suite) 18 , testName(test) 19 , failureFile("") 20 , timeElapsed(0.0f) 21 , failed(false) 22 { 14 DeferredTestResult::DeferredTestResult ( char const* suite, char const* test ) 15 : suiteName ( suite ) 16 , testName ( test ) 17 , failureFile ( "" ) 18 , timeElapsed ( 0.0f ) 19 , failed ( false ) { 23 20 } 24 21 25 DeferredTestResult::~DeferredTestResult() 26 { 22 DeferredTestResult::~DeferredTestResult() { 27 23 } 28 24 -
library/tests/unittest-cpp/DeferredTestResult.h
r418 r477 7 7 #include <vector> 8 8 9 namespace UnitTest 10 { 9 namespace UnitTest { 11 10 12 struct DeferredTestResult 13 { 11 struct DeferredTestResult { 14 12 DeferredTestResult(); 15 DeferredTestResult(char const* suite, char const* test);16 17 18 19 20 21 22 23 24 25 26 13 DeferredTestResult ( char const* suite, char const* test ); 14 ~DeferredTestResult(); 15 16 std::string suiteName; 17 std::string testName; 18 std::string failureFile; 19 20 typedef std::pair< int, std::string > Failure; 21 typedef std::vector< Failure > FailureVec; 22 FailureVec failures; 23 24 float timeElapsed; 27 25 bool failed; 28 26 }; -
library/tests/unittest-cpp/ExecuteTest.h
r418 r477 8 8 9 9 #ifdef UNITTEST_POSIX 10 10 #include "Posix/SignalTranslator.h" 11 11 #endif 12 12 … … 14 14 15 15 template< typename T > 16 void ExecuteTest(T& testObject, TestDetails const& details) 17 { 16 void ExecuteTest ( T& testObject, TestDetails const& details ) { 18 17 CurrentTest::Details() = &details; 19 18 20 try 21 { 19 try { 22 20 #ifdef UNITTEST_POSIX 23 21 UNITTEST_THROW_SIGNALS 24 22 #endif 25 23 testObject.RunImpl(); 26 } 27 catch (AssertException const& e) 28 { 29 CurrentTest::Results()->OnTestFailure( 30 TestDetails(details.testName, details.suiteName, e.Filename(), e.LineNumber()), e.what()); 31 } 32 catch (std::exception const& e) 33 { 24 } catch ( AssertException const& e ) { 25 CurrentTest::Results()->OnTestFailure ( 26 TestDetails ( details.testName, details.suiteName, e.Filename(), e.LineNumber() ), e.what() ); 27 } catch ( std::exception const& e ) { 34 28 MemoryOutStream stream; 35 29 stream << "Unhandled exception: " << e.what(); 36 CurrentTest::Results()->OnTestFailure(details, stream.GetText()); 37 } 38 catch (...) 39 { 40 CurrentTest::Results()->OnTestFailure(details, "Unhandled exception: Crash!"); 30 CurrentTest::Results()->OnTestFailure ( details, stream.GetText() ); 31 } catch ( ... ) { 32 CurrentTest::Results()->OnTestFailure ( details, "Unhandled exception: Crash!" ); 41 33 } 42 34 } -
library/tests/unittest-cpp/MemoryOutStream.cpp
r418 r477 6 6 namespace UnitTest { 7 7 8 char const* MemoryOutStream::GetText() const 9 { 10 m_text = this->str(); 11 return m_text.c_str(); 8 char const* MemoryOutStream::GetText() const { 9 m_text = this->str(); 10 return m_text.c_str(); 12 11 } 13 12 … … 27 26 28 27 template<typename ValueType> 29 void FormatToStream(MemoryOutStream& stream, char const* format, ValueType const& value) 30 { 28 void FormatToStream ( MemoryOutStream& stream, char const* format, ValueType const& value ) { 31 29 using namespace std; 32 30 33 34 sprintf(txt, format, value);35 31 char txt[32]; 32 sprintf ( txt, format, value ); 33 stream << txt; 36 34 } 37 35 38 int RoundUpToMultipleOfPow2Number (int n, int pow2Number) 39 { 40 return (n + (pow2Number - 1)) & ~(pow2Number - 1); 36 int RoundUpToMultipleOfPow2Number ( int n, int pow2Number ) { 37 return ( n + ( pow2Number - 1 ) ) & ~ ( pow2Number - 1 ); 41 38 } 42 39 … … 44 41 45 42 46 MemoryOutStream::MemoryOutStream (int const size)47 : m_capacity (0)48 , m_buffer (0)43 MemoryOutStream::MemoryOutStream ( int const size ) 44 : m_capacity ( 0 ) 45 , m_buffer ( 0 ) 49 46 50 47 { 51 GrowBuffer(size);48 GrowBuffer ( size ); 52 49 } 53 50 54 MemoryOutStream::~MemoryOutStream() 55 { 56 delete [] m_buffer; 51 MemoryOutStream::~MemoryOutStream() { 52 delete [] m_buffer; 57 53 } 58 54 59 char const* MemoryOutStream::GetText() const 60 { 61 return m_buffer; 55 char const* MemoryOutStream::GetText() const { 56 return m_buffer; 62 57 } 63 58 64 MemoryOutStream& MemoryOutStream::operator << (char const* txt) 65 { 59 MemoryOutStream& MemoryOutStream::operator << ( char const* txt ) { 66 60 using namespace std; 67 61 68 int const bytesLeft = m_capacity - (int)strlen(m_buffer);69 int const bytesRequired = (int)strlen(txt) + 1;62 int const bytesLeft = m_capacity - ( int ) strlen ( m_buffer ); 63 int const bytesRequired = ( int ) strlen ( txt ) + 1; 70 64 71 if (bytesRequired > bytesLeft) 72 { 73 int const requiredCapacity = bytesRequired + m_capacity - bytesLeft; 74 GrowBuffer(requiredCapacity); 75 } 65 if ( bytesRequired > bytesLeft ) { 66 int const requiredCapacity = bytesRequired + m_capacity - bytesLeft; 67 GrowBuffer ( requiredCapacity ); 68 } 76 69 77 strcat(m_buffer, txt); 78 return *this; 79 } 80 81 MemoryOutStream& MemoryOutStream::operator << (int const n) 82 { 83 FormatToStream(*this, "%i", n); 84 return *this; 85 } 86 87 MemoryOutStream& MemoryOutStream::operator << (long const n) 88 { 89 FormatToStream(*this, "%li", n); 90 return *this; 91 } 92 93 MemoryOutStream& MemoryOutStream::operator << (unsigned long const n) 94 { 95 FormatToStream(*this, "%lu", n); 96 return *this; 97 } 98 99 MemoryOutStream& MemoryOutStream::operator << (float const f) 100 { 101 FormatToStream(*this, "%ff", f); 102 return *this; 103 } 104 105 MemoryOutStream& MemoryOutStream::operator << (void const* p) 106 { 107 FormatToStream(*this, "%p", p); 108 return *this; 109 } 110 111 MemoryOutStream& MemoryOutStream::operator << (unsigned int const s) 112 { 113 FormatToStream(*this, "%u", s); 114 return *this; 115 } 116 117 MemoryOutStream& MemoryOutStream::operator <<(double const d) 118 { 119 FormatToStream(*this, "%f", d); 70 strcat ( m_buffer, txt ); 120 71 return *this; 121 72 } 122 73 123 int MemoryOutStream::GetCapacity() const 124 { 125 return m_capacity; 74 MemoryOutStream& MemoryOutStream::operator << ( int const n ) { 75 FormatToStream ( *this, "%i", n ); 76 return *this; 77 } 78 79 MemoryOutStream& MemoryOutStream::operator << ( long const n ) { 80 FormatToStream ( *this, "%li", n ); 81 return *this; 82 } 83 84 MemoryOutStream& MemoryOutStream::operator << ( unsigned long const n ) { 85 FormatToStream ( *this, "%lu", n ); 86 return *this; 87 } 88 89 MemoryOutStream& MemoryOutStream::operator << ( float const f ) { 90 FormatToStream ( *this, "%ff", f ); 91 return *this; 92 } 93 94 MemoryOutStream& MemoryOutStream::operator << ( void const* p ) { 95 FormatToStream ( *this, "%p", p ); 96 return *this; 97 } 98 99 MemoryOutStream& MemoryOutStream::operator << ( unsigned int const s ) { 100 FormatToStream ( *this, "%u", s ); 101 return *this; 102 } 103 104 MemoryOutStream& MemoryOutStream::operator << ( double const d ) { 105 FormatToStream ( *this, "%f", d ); 106 return *this; 107 } 108 109 int MemoryOutStream::GetCapacity() const { 110 return m_capacity; 126 111 } 127 112 128 113 129 void MemoryOutStream::GrowBuffer(int const desiredCapacity) 130 { 131 int const newCapacity = RoundUpToMultipleOfPow2Number(desiredCapacity, GROW_CHUNK_SIZE); 114 void MemoryOutStream::GrowBuffer ( int const desiredCapacity ) { 115 int const newCapacity = RoundUpToMultipleOfPow2Number ( desiredCapacity, GROW_CHUNK_SIZE ); 132 116 133 117 using namespace std; 134 118 135 136 if (m_buffer)137 strcpy(buffer, m_buffer);138 139 strcpy(buffer, "");119 char* buffer = new char[newCapacity]; 120 if ( m_buffer ) 121 strcpy ( buffer, m_buffer ); 122 else 123 strcpy ( buffer, "" ); 140 124 141 142 143 125 delete [] m_buffer; 126 m_buffer = buffer; 127 m_capacity = newCapacity; 144 128 } 145 129 -
library/tests/unittest-cpp/MemoryOutStream.h
r418 r477 8 8 #include <sstream> 9 9 10 namespace UnitTest 11 { 10 namespace UnitTest { 12 11 13 class MemoryOutStream : public std::ostringstream 14 { 12 class MemoryOutStream : public std::ostringstream { 15 13 public: 16 17 18 14 MemoryOutStream() {} 15 ~MemoryOutStream() {} 16 char const* GetText() const; 19 17 20 18 private: 21 MemoryOutStream(MemoryOutStream const&);22 void operator =(MemoryOutStream const&);19 MemoryOutStream ( MemoryOutStream const& ); 20 void operator = ( MemoryOutStream const& ); 23 21 24 22 mutable std::string m_text; 25 23 }; 26 24 … … 31 29 #include <cstddef> 32 30 33 namespace UnitTest 34 { 31 namespace UnitTest { 35 32 36 class MemoryOutStream 37 { 33 class MemoryOutStream { 38 34 public: 39 explicit MemoryOutStream(int const size = 256);40 35 explicit MemoryOutStream ( int const size = 256 ); 36 ~MemoryOutStream(); 41 37 42 38 char const* GetText() const; 43 39 44 MemoryOutStream& operator << (char const* txt);45 MemoryOutStream& operator << (int n);46 MemoryOutStream& operator << (long n);47 MemoryOutStream& operator << (unsigned long n);48 MemoryOutStream& operator << (float f);49 MemoryOutStream& operator << (double d);50 MemoryOutStream& operator << (void const* p);51 MemoryOutStream& operator << (unsigned int s);40 MemoryOutStream& operator << ( char const* txt ); 41 MemoryOutStream& operator << ( int n ); 42 MemoryOutStream& operator << ( long n ); 43 MemoryOutStream& operator << ( unsigned long n ); 44 MemoryOutStream& operator << ( float f ); 45 MemoryOutStream& operator << ( double d ); 46 MemoryOutStream& operator << ( void const* p ); 47 MemoryOutStream& operator << ( unsigned int s ); 52 48 53 54 49 enum { GROW_CHUNK_SIZE = 32 }; 50 int GetCapacity() const; 55 51 56 52 private: 57 void operator= (MemoryOutStream const&);58 void GrowBuffer(int capacity);53 void operator= ( MemoryOutStream const& ); 54 void GrowBuffer ( int capacity ); 59 55 60 61 56 int m_capacity; 57 char* m_buffer; 62 58 }; 63 59 -
library/tests/unittest-cpp/Posix/SignalTranslator.cpp
r418 r477 7 7 namespace { 8 8 9 void SignalHandler(int sig) 10 { 11 siglongjmp(*SignalTranslator::s_jumpTarget, sig ); 9 void SignalHandler ( int sig ) { 10 siglongjmp ( *SignalTranslator::s_jumpTarget, sig ); 12 11 } 13 12 … … 15 14 16 15 17 SignalTranslator::SignalTranslator() 18 { 19 m_oldJumpTarget = s_jumpTarget; 20 s_jumpTarget = &m_currentJumpTarget; 16 SignalTranslator::SignalTranslator() { 17 m_oldJumpTarget = s_jumpTarget; 18 s_jumpTarget = &m_currentJumpTarget; 21 19 22 23 24 25 sigemptyset( &action.sa_mask );20 struct sigaction action; 21 action.sa_flags = 0; 22 action.sa_handler = SignalHandler; 23 sigemptyset ( &action.sa_mask ); 26 24 27 sigaction( SIGSEGV, &action, &m_old_SIGSEGV_action );28 sigaction( SIGFPE , &action, &m_old_SIGFPE_action);29 sigaction( SIGTRAP, &action, &m_old_SIGTRAP_action );30 sigaction( SIGBUS , &action, &m_old_SIGBUS_action);31 sigaction( SIGILL , &action, &m_old_SIGBUS_action);25 sigaction ( SIGSEGV, &action, &m_old_SIGSEGV_action ); 26 sigaction ( SIGFPE , &action, &m_old_SIGFPE_action ); 27 sigaction ( SIGTRAP, &action, &m_old_SIGTRAP_action ); 28 sigaction ( SIGBUS , &action, &m_old_SIGBUS_action ); 29 sigaction ( SIGILL , &action, &m_old_SIGBUS_action ); 32 30 } 33 31 34 SignalTranslator::~SignalTranslator() 35 { 36 sigaction( SIGILL , &m_old_SIGBUS_action , 0 ); 37 sigaction( SIGBUS , &m_old_SIGBUS_action , 0 ); 38 sigaction( SIGTRAP, &m_old_SIGTRAP_action, 0 ); 39 sigaction( SIGFPE , &m_old_SIGFPE_action , 0 ); 40 sigaction( SIGSEGV, &m_old_SIGSEGV_action, 0 ); 32 SignalTranslator::~SignalTranslator() { 33 sigaction ( SIGILL , &m_old_SIGBUS_action , 0 ); 34 sigaction ( SIGBUS , &m_old_SIGBUS_action , 0 ); 35 sigaction ( SIGTRAP, &m_old_SIGTRAP_action, 0 ); 36 sigaction ( SIGFPE , &m_old_SIGFPE_action , 0 ); 37 sigaction ( SIGSEGV, &m_old_SIGSEGV_action, 0 ); 41 38 42 39 s_jumpTarget = m_oldJumpTarget; 43 40 } 44 41 -
library/tests/unittest-cpp/Posix/SignalTranslator.h
r418 r477 7 7 namespace UnitTest { 8 8 9 class SignalTranslator 10 { 9 class SignalTranslator { 11 10 public: 12 13 11 SignalTranslator(); 12 ~SignalTranslator(); 14 13 15 14 static sigjmp_buf* s_jumpTarget; 16 15 17 16 private: 18 19 17 sigjmp_buf m_currentJumpTarget; 18 sigjmp_buf* m_oldJumpTarget; 20 19 21 22 23 24 25 26 20 struct sigaction m_old_SIGFPE_action; 21 struct sigaction m_old_SIGTRAP_action; 22 struct sigaction m_old_SIGSEGV_action; 23 struct sigaction m_old_SIGBUS_action; 24 struct sigaction m_old_SIGABRT_action; 25 struct sigaction m_old_SIGALRM_action; 27 26 }; 28 27 29 28 #if !defined (__GNUC__) 30 29 #define UNITTEST_EXTENSION 31 30 #else 32 31 #define UNITTEST_EXTENSION __extension__ 33 32 #endif 34 33 … … 36 35 UnitTest::SignalTranslator sig; \ 37 36 if (UNITTEST_EXTENSION sigsetjmp(*UnitTest::SignalTranslator::s_jumpTarget, 1) != 0) \ 38 throw ("Unhandled system exception"); 37 throw ("Unhandled system exception"); 39 38 40 39 } -
library/tests/unittest-cpp/Posix/TimeHelpers.cpp
r418 r477 4 4 namespace UnitTest { 5 5 6 Timer::Timer() 7 { 8 m_startTime.tv_sec = 0; 9 m_startTime.tv_usec = 0; 6 Timer::Timer() { 7 m_startTime.tv_sec = 0; 8 m_startTime.tv_usec = 0; 10 9 } 11 10 12 void Timer::Start() 13 { 14 gettimeofday(&m_startTime, 0); 11 void Timer::Start() { 12 gettimeofday ( &m_startTime, 0 ); 15 13 } 16 14 17 double Timer::GetTimeInMs() const 18 { 19 struct timeval currentTime; 20 gettimeofday(¤tTime, 0); 15 double Timer::GetTimeInMs() const { 16 struct timeval currentTime; 17 gettimeofday ( ¤tTime, 0 ); 21 18 22 19 double const dsecs = currentTime.tv_sec - m_startTime.tv_sec; 23 20 double const dus = currentTime.tv_usec - m_startTime.tv_usec; 24 21 25 return ( dsecs * 1000.0) + (dus / 1000.0);22 return ( dsecs * 1000.0 ) + ( dus / 1000.0 ); 26 23 } 27 24 28 void TimeHelpers::SleepMs(int ms) 29 { 30 usleep(ms * 1000); 25 void TimeHelpers::SleepMs ( int ms ) { 26 usleep ( ms * 1000 ); 31 27 } 32 28 -
library/tests/unittest-cpp/Posix/TimeHelpers.h
r418 r477 6 6 namespace UnitTest { 7 7 8 class Timer 9 { 8 class Timer { 10 9 public: 11 12 13 double GetTimeInMs() const; 10 Timer(); 11 void Start(); 12 double GetTimeInMs() const; 14 13 15 14 private: 16 struct timeval m_startTime; 15 struct timeval m_startTime; 17 16 }; 18 17 19 18 20 namespace TimeHelpers 21 { 22 void SleepMs (int ms); 19 namespace TimeHelpers { 20 void SleepMs ( int ms ); 23 21 } 24 22 -
library/tests/unittest-cpp/ReportAssert.cpp
r418 r477 4 4 namespace UnitTest { 5 5 6 void ReportAssert(char const* description, char const* filename, int lineNumber) 7 { 8 throw AssertException(description, filename, lineNumber); 6 void ReportAssert ( char const* description, char const* filename, int lineNumber ) { 7 throw AssertException ( description, filename, lineNumber ); 9 8 } 10 9 -
library/tests/unittest-cpp/ReportAssert.h
r418 r477 4 4 namespace UnitTest { 5 5 6 void ReportAssert (char const* description, char const* filename, int lineNumber);7 6 void ReportAssert ( char const* description, char const* filename, int lineNumber ); 7 8 8 } 9 9 -
library/tests/unittest-cpp/Test.cpp
r435 r477 9 9 10 10 #ifdef UNITTEST_POSIX 11 11 #include "Posix/SignalTranslator.h" 12 12 #endif 13 13 14 14 namespace UnitTest { 15 15 16 TestList& Test::GetTestList() 17 { 18 static TestList s_list; 19 return s_list; 16 TestList& Test::GetTestList() { 17 static TestList s_list; 18 return s_list; 20 19 } 21 20 22 Test::Test(char const* testName, char const* suiteName, char const* filename, int lineNumber) 23 : m_details(testName, suiteName, filename, lineNumber) 24 , next(0) 25 , m_timeConstraintExempt(false) 26 { 21 Test::Test ( char const* testName, char const* suiteName, char const* filename, int lineNumber ) 22 : m_details ( testName, suiteName, filename, lineNumber ) 23 , next ( 0 ) 24 , m_timeConstraintExempt ( false ) { 27 25 } 28 26 29 Test::~Test() 30 { 27 Test::~Test() { 31 28 } 32 29 33 void Test::Run() 34 { 30 void Test::Run() { 35 31 // made more chatty; presumes the only used test reporter is 36 32 // TestReporterStdout 37 std::printf ("running %s...\n", m_details.testName);33 std::printf ( "running %s...\n", m_details.testName ); 38 34 39 ExecuteTest (*this, m_details);35 ExecuteTest ( *this, m_details ); 40 36 } 41 37 42 void Test::RunImpl() const 43 { 38 void Test::RunImpl() const { 44 39 } 45 40 -
library/tests/unittest-cpp/Test.h
r418 r477 9 9 class TestList; 10 10 11 class Test 12 { 11 class Test { 13 12 public: 14 explicit Test(char const* testName, char const* suiteName = "DefaultSuite", char const* filename = "", int lineNumber = 0);15 16 13 explicit Test ( char const* testName, char const* suiteName = "DefaultSuite", char const* filename = "", int lineNumber = 0 ); 14 virtual ~Test(); 15 void Run(); 17 16 18 19 20 17 TestDetails const m_details; 18 Test* next; 19 mutable bool m_timeConstraintExempt; 21 20 22 21 static TestList& GetTestList(); 23 22 24 23 virtual void RunImpl() const; 25 24 26 25 private: 27 Test (Test const&);28 Test& operator =(Test const&);26 Test ( Test const& ); 27 Test& operator = ( Test const& ); 29 28 }; 30 29 -
library/tests/unittest-cpp/TestDetails.cpp
r456 r477 3 3 namespace UnitTest { 4 4 5 TestDetails::TestDetails(char const* testName_, char const* suiteName_, char const* filename_, int lineNumber_, bool useFilename_) 6 : suiteName(suiteName_) 7 , testName(testName_) 8 , filename(filename_) 9 , lineNumber(lineNumber_) 10 , useFilename(useFilename_) 11 { 5 TestDetails::TestDetails ( char const* testName_, char const* suiteName_, char const* filename_, int lineNumber_, bool useFilename_ ) 6 : suiteName ( suiteName_ ) 7 , testName ( testName_ ) 8 , filename ( filename_ ) 9 , lineNumber ( lineNumber_ ) 10 , useFilename ( useFilename_ ) { 12 11 } 13 12 14 TestDetails::TestDetails(const TestDetails& details, int lineNumber_, bool useFilename_) 15 : suiteName(details.suiteName) 16 , testName(details.testName) 17 , filename(details.filename) 18 , lineNumber(lineNumber_) 19 , useFilename(useFilename_) 20 { 13 TestDetails::TestDetails ( const TestDetails& details, int lineNumber_, bool useFilename_ ) 14 : suiteName ( details.suiteName ) 15 , testName ( details.testName ) 16 , filename ( details.filename ) 17 , lineNumber ( lineNumber_ ) 18 , useFilename ( useFilename_ ) { 21 19 } 22 20 -
library/tests/unittest-cpp/TestDetails.h
r456 r477 4 4 namespace UnitTest { 5 5 6 class TestDetails 7 { 6 class TestDetails { 8 7 public: 9 TestDetails(char const* testName, char const* suiteName, char const* filename, int lineNumber, bool useFilename = true);10 TestDetails(const TestDetails& details, int lineNumber, bool useFilename = true);8 TestDetails ( char const* testName, char const* suiteName, char const* filename, int lineNumber, bool useFilename = true ); 9 TestDetails ( const TestDetails& details, int lineNumber, bool useFilename = true ); 11 10 12 13 14 15 16 11 char const* const suiteName; 12 char const* const testName; 13 char const* const filename; 14 int const lineNumber; 15 bool const useFilename; 17 16 18 TestDetails(TestDetails const&); // Why is it public? --> http://gcc.gnu.org/bugs.html#cxx_rvalbind17 TestDetails ( TestDetails const& ); // Why is it public? --> http://gcc.gnu.org/bugs.html#cxx_rvalbind 19 18 private: 20 TestDetails& operator=(TestDetails const&);19 TestDetails& operator= ( TestDetails const& ); 21 20 }; 22 21 -
library/tests/unittest-cpp/TestList.cpp
r418 r477 6 6 namespace UnitTest { 7 7 8 TestList::TestList() 9 : m_head(0) 10 , m_tail(0) 11 { 8 TestList::TestList() 9 : m_head ( 0 ) 10 , m_tail ( 0 ) { 12 11 } 13 12 14 void TestList::Add(Test* test) 15 { 16 if (m_tail == 0) 17 { 18 assert(m_head == 0); 19 m_head = test; 20 m_tail = test; 21 } 22 else 23 { 24 m_tail->next = test; 25 m_tail = test; 26 } 13 void TestList::Add ( Test* test ) { 14 if ( m_tail == 0 ) { 15 assert ( m_head == 0 ); 16 m_head = test; 17 m_tail = test; 18 } else { 19 m_tail->next = test; 20 m_tail = test; 21 } 27 22 } 28 23 29 Test* TestList::GetHead() const 30 { 31 return m_head; 24 Test* TestList::GetHead() const { 25 return m_head; 32 26 } 33 27 34 ListAdder::ListAdder(TestList& list, Test* test) 35 { 36 list.Add(test); 28 ListAdder::ListAdder ( TestList& list, Test* test ) { 29 list.Add ( test ); 37 30 } 38 31 -
library/tests/unittest-cpp/TestList.h
r418 r477 7 7 class Test; 8 8 9 class TestList 10 { 9 class TestList { 11 10 public: 12 13 void Add (Test* test);11 TestList(); 12 void Add ( Test* test ); 14 13 15 14 Test* GetHead() const; 16 15 17 16 private: 18 19 17 Test* m_head; 18 Test* m_tail; 20 19 }; 21 20 22 21 23 class ListAdder 24 { 22 class ListAdder { 25 23 public: 26 ListAdder(TestList& list, Test* test);24 ListAdder ( TestList& list, Test* test ); 27 25 }; 28 26 -
library/tests/unittest-cpp/TestMacros.h
r418 r477 9 9 10 10 #ifndef UNITTEST_POSIX 11 11 #define UNITTEST_THROW_SIGNALS 12 12 #else 13 13 #include "Posix/SignalTranslator.h" 14 14 #endif 15 15 16 16 #ifdef TEST 17 17 #error UnitTest++ redefines TEST 18 18 #endif 19 19 20 20 #ifdef TEST_EX 21 21 #error UnitTest++ redefines TEST_EX 22 22 #endif 23 23 24 24 #ifdef TEST_FIXTURE_EX 25 25 #error UnitTest++ redefines TEST_FIXTURE_EX 26 26 #endif 27 27 -
library/tests/unittest-cpp/TestReporter.cpp
r418 r477 4 4 5 5 6 TestReporter::~TestReporter() 7 { 6 TestReporter::~TestReporter() { 8 7 } 9 8 -
library/tests/unittest-cpp/TestReporter.h
r418 r477 6 6 class TestDetails; 7 7 8 class TestReporter 9 { 8 class TestReporter { 10 9 public: 11 10 virtual ~TestReporter(); 12 11 13 virtual void ReportTestStart(TestDetails const& test) = 0;14 virtual void ReportFailure(TestDetails const& test, char const* failure) = 0;15 virtual void ReportTestFinish(TestDetails const& test, float secondsElapsed) = 0;16 virtual void ReportSummary(int totalTestCount, int failedTestCount, int failureCount, float secondsElapsed) = 0;12 virtual void ReportTestStart ( TestDetails const& test ) = 0; 13 virtual void ReportFailure ( TestDetails const& test, char const* failure ) = 0; 14 virtual void ReportTestFinish ( TestDetails const& test, float secondsElapsed ) = 0; 15 virtual void ReportSummary ( int totalTestCount, int failedTestCount, int failureCount, float secondsElapsed ) = 0; 17 16 }; 18 17 -
library/tests/unittest-cpp/TestReporterStdout.cpp
r456 r477 6 6 // cstdio doesn't pull in namespace std on VC6, so we do it here. 7 7 #if defined(_MSC_VER) && (_MSC_VER == 1200) 8 8 namespace std {} 9 9 #endif 10 10 11 11 namespace UnitTest { 12 12 13 void TestReporterStdout::ReportFailure(TestDetails const& details, char const* failure) 14 { 13 void TestReporterStdout::ReportFailure ( TestDetails const& details, char const* failure ) { 15 14 #if defined(__APPLE__) || defined(__GNUG__) 16 15 char const* const errorFormat = "%s:%d: error: Failure in %s: %s\n"; 17 16 #else 18 17 char const* const errorFormat = "%s(%d): error: Failure in %s: %s\n"; 19 18 #endif 20 19 21 20 using namespace std; 22 21 23 if (details.useFilename) {24 25 printf(errorFormat, details.filename, details.lineNumber, details.testName, failure);26 } else { 27 28 // (custom) test location info29 printf("%s\n", failure);30 22 if ( details.useFilename ) { 23 // standard way 24 printf ( errorFormat, details.filename, details.lineNumber, details.testName, failure ); 25 } else { 26 // extended for BDM - the failure string already includes 27 // (custom) test location info 28 printf ( "%s\n", failure ); 29 } 31 30 } 32 31 33 void TestReporterStdout::ReportTestStart(TestDetails const& /*test*/) 34 { 32 void TestReporterStdout::ReportTestStart ( TestDetails const& /*test*/ ) { 35 33 } 36 34 37 void TestReporterStdout::ReportTestFinish(TestDetails const& /*test*/, float) 38 { 35 void TestReporterStdout::ReportTestFinish ( TestDetails const& /*test*/, float ) { 39 36 } 40 37 41 void TestReporterStdout::ReportSummary(int const totalTestCount, int const failedTestCount, 42 int const failureCount, float secondsElapsed) 43 { 38 void TestReporterStdout::ReportSummary ( int const totalTestCount, int const failedTestCount, 39 int const failureCount, float secondsElapsed ) { 44 40 using namespace std; 45 41 46 if (failureCount > 0)47 printf("FAILURE: %d out of %d tests failed (%d failures).\n", failedTestCount, totalTestCount, failureCount);48 49 printf("Success: %d tests passed.\n", totalTestCount);42 if ( failureCount > 0 ) 43 printf ( "FAILURE: %d out of %d tests failed (%d failures).\n", failedTestCount, totalTestCount, failureCount ); 44 else 45 printf ( "Success: %d tests passed.\n", totalTestCount ); 50 46 51 printf("Test time: %.2f seconds.\n", secondsElapsed);47 printf ( "Test time: %.2f seconds.\n", secondsElapsed ); 52 48 } 53 49 -
library/tests/unittest-cpp/TestReporterStdout.h
r418 r477 6 6 namespace UnitTest { 7 7 8 class TestReporterStdout : public TestReporter 9 { 8 class TestReporterStdout : public TestReporter { 10 9 private: 11 virtual void ReportTestStart(TestDetails const& test);12 virtual void ReportFailure(TestDetails const& test, char const* failure);13 virtual void ReportTestFinish(TestDetails const& test, float secondsElapsed);14 virtual void ReportSummary(int totalTestCount, int failedTestCount, int failureCount, float secondsElapsed);10 virtual void ReportTestStart ( TestDetails const& test ); 11 virtual void ReportFailure ( TestDetails const& test, char const* failure ); 12 virtual void ReportTestFinish ( TestDetails const& test, float secondsElapsed ); 13 virtual void ReportSummary ( int totalTestCount, int failedTestCount, int failureCount, float secondsElapsed ); 15 14 }; 16 15 17 16 } 18 17 19 #endif 18 #endif -
library/tests/unittest-cpp/TestResults.cpp
r418 r477 6 6 namespace UnitTest { 7 7 8 TestResults::TestResults(TestReporter* testReporter) 9 : m_testReporter(testReporter) 10 , m_totalTestCount(0) 11 , m_failedTestCount(0) 12 , m_failureCount(0) 13 , m_currentTestFailed(false) 14 { 8 TestResults::TestResults ( TestReporter* testReporter ) 9 : m_testReporter ( testReporter ) 10 , m_totalTestCount ( 0 ) 11 , m_failedTestCount ( 0 ) 12 , m_failureCount ( 0 ) 13 , m_currentTestFailed ( false ) { 15 14 } 16 15 17 void TestResults::OnTestStart(TestDetails const& test) 18 { 19 ++m_totalTestCount; 20 m_currentTestFailed = false; 21 if (m_testReporter) 22 m_testReporter->ReportTestStart(test); 16 void TestResults::OnTestStart ( TestDetails const& test ) { 17 ++m_totalTestCount; 18 m_currentTestFailed = false; 19 if ( m_testReporter ) 20 m_testReporter->ReportTestStart ( test ); 23 21 } 24 22 25 void TestResults::OnTestFailure(TestDetails const& test, char const* failure) 26 { 27 ++m_failureCount; 28 if (!m_currentTestFailed) 29 { 30 ++m_failedTestCount; 31 m_currentTestFailed = true; 32 } 23 void TestResults::OnTestFailure ( TestDetails const& test, char const* failure ) { 24 ++m_failureCount; 25 if ( !m_currentTestFailed ) { 26 ++m_failedTestCount; 27 m_currentTestFailed = true; 28 } 33 29 34 if (m_testReporter)35 m_testReporter->ReportFailure(test, failure);30 if ( m_testReporter ) 31 m_testReporter->ReportFailure ( test, failure ); 36 32 } 37 33 38 void TestResults::OnTestFinish(TestDetails const& test, float secondsElapsed) 39 { 40 if (m_testReporter) 41 m_testReporter->ReportTestFinish(test, secondsElapsed); 34 void TestResults::OnTestFinish ( TestDetails const& test, float secondsElapsed ) { 35 if ( m_testReporter ) 36 m_testReporter->ReportTestFinish ( test, secondsElapsed ); 42 37 } 43 38 44 int TestResults::GetTotalTestCount() const 45 { 46 return m_totalTestCount; 39 int TestResults::GetTotalTestCount() const { 40 return m_totalTestCount; 47 41 } 48 42 49 int TestResults::GetFailedTestCount() const 50 { 51 return m_failedTestCount; 43 int TestResults::GetFailedTestCount() const { 44 return m_failedTestCount; 52 45 } 53 46 54 int TestResults::GetFailureCount() const 55 { 56 return m_failureCount; 47 int TestResults::GetFailureCount() const { 48 return m_failureCount; 57 49 } 58 50 -
library/tests/unittest-cpp/TestResults.h
r418 r477 7 7 class TestDetails; 8 8 9 class TestResults 10 { 9 class TestResults { 11 10 public: 12 explicit TestResults(TestReporter* reporter = 0);11 explicit TestResults ( TestReporter* reporter = 0 ); 13 12 14 void OnTestStart(TestDetails const& test);15 void OnTestFailure(TestDetails const& test, char const* failure);16 void OnTestFinish(TestDetails const& test, float secondsElapsed);13 void OnTestStart ( TestDetails const& test ); 14 void OnTestFailure ( TestDetails const& test, char const* failure ); 15 void OnTestFinish ( TestDetails const& test, float secondsElapsed ); 17 16 18 19 20 17 int GetTotalTestCount() const; 18 int GetFailedTestCount() const; 19 int GetFailureCount() const; 21 20 22 21 private: 23 24 25 26 22 TestReporter* m_testReporter; 23 int m_totalTestCount; 24 int m_failedTestCount; 25 int m_failureCount; 27 26 28 27 bool m_currentTestFailed; 29 28 30 TestResults(TestResults const&);31 TestResults& operator =(TestResults const&);29 TestResults ( TestResults const& ); 30 TestResults& operator = ( TestResults const& ); 32 31 }; 33 32 -
library/tests/unittest-cpp/TestRunner.cpp
r418 r477 11 11 namespace UnitTest { 12 12 13 int RunAllTests() 14 { 13 int RunAllTests() { 15 14 TestReporterStdout reporter; 16 TestRunner runner (reporter);17 return runner.RunTestsIf (Test::GetTestList(), NULL, True(), 0);15 TestRunner runner ( reporter ); 16 return runner.RunTestsIf ( Test::GetTestList(), NULL, True(), 0 ); 18 17 } 19 18 20 19 21 TestRunner::TestRunner(TestReporter& reporter) 22 : m_reporter(&reporter) 23 , m_result(new TestResults(&reporter)) 24 , m_timer(new Timer) 25 { 20 TestRunner::TestRunner ( TestReporter& reporter ) 21 : m_reporter ( &reporter ) 22 , m_result ( new TestResults ( &reporter ) ) 23 , m_timer ( new Timer ) { 26 24 m_timer->Start(); 27 25 } 28 26 29 TestRunner::~TestRunner() 30 { 27 TestRunner::~TestRunner() { 31 28 delete m_result; 32 29 delete m_timer; 33 30 } 34 31 35 int TestRunner::Finish() const 36 { 37 float const secondsElapsed = static_cast<float>(m_timer->GetTimeInMs() / 1000.0); 38 m_reporter->ReportSummary(m_result->GetTotalTestCount(), 39 m_result->GetFailedTestCount(), 40 m_result->GetFailureCount(), 41 secondsElapsed); 42 32 int TestRunner::Finish() const { 33 float const secondsElapsed = static_cast<float> ( m_timer->GetTimeInMs() / 1000.0 ); 34 m_reporter->ReportSummary ( m_result->GetTotalTestCount(), 35 m_result->GetFailedTestCount(), 36 m_result->GetFailureCount(), 37 secondsElapsed ); 38 43 39 return m_result->GetFailureCount(); 44 40 } 45 41 46 bool TestRunner::IsTestInSuite(const Test* const curTest, char const* suiteName) const 47 { 42 bool TestRunner::IsTestInSuite ( const Test* const curTest, char const* suiteName ) const { 48 43 using namespace std; 49 return ( suiteName == NULL) || !strcmp(curTest->m_details.suiteName, suiteName);44 return ( suiteName == NULL ) || !strcmp ( curTest->m_details.suiteName, suiteName ); 50 45 } 51 46 52 void TestRunner::RunTest(TestResults* const result, Test* const curTest, int const maxTestTimeInMs) const 53 { 47 void TestRunner::RunTest ( TestResults* const result, Test* const curTest, int const maxTestTimeInMs ) const { 54 48 CurrentTest::Results() = result; 55 49 … … 57 51 testTimer.Start(); 58 52 59 result->OnTestStart (curTest->m_details);53 result->OnTestStart ( curTest->m_details ); 60 54 61 55 curTest->Run(); 62 56 63 57 double const testTimeInMs = testTimer.GetTimeInMs(); 64 if (maxTestTimeInMs > 0 && testTimeInMs > maxTestTimeInMs && !curTest->m_timeConstraintExempt) 65 { 66 MemoryOutStream stream; 67 stream << "Global time constraint failed. Expected under " << maxTestTimeInMs << 68 "ms but took " << testTimeInMs << "ms."; 58 if ( maxTestTimeInMs > 0 && testTimeInMs > maxTestTimeInMs && !curTest->m_timeConstraintExempt ) { 59 MemoryOutStream stream; 60 stream << "Global time constraint failed. Expected under " << maxTestTimeInMs << 61 "ms but took " << testTimeInMs << "ms."; 69 62 70 result->OnTestFailure(curTest->m_details, stream.GetText());63 result->OnTestFailure ( curTest->m_details, stream.GetText() ); 71 64 } 72 65 73 result->OnTestFinish (curTest->m_details, static_cast<float>(testTimeInMs/1000.0));66 result->OnTestFinish ( curTest->m_details, static_cast<float> ( testTimeInMs / 1000.0 ) ); 74 67 } 75 68 -
library/tests/unittest-cpp/TestRunner.h
r418 r477 14 14 int RunAllTests(); 15 15 16 struct True 17 { 18 bool operator()(const Test* const) const 19 { 20 return true; 16 struct True { 17 bool operator() ( const Test* const ) const { 18 return true; 21 19 } 22 20 }; 23 21 24 class TestRunner 25 { 22 class TestRunner { 26 23 public: 27 explicit TestRunner (TestReporter& reporter);24 explicit TestRunner ( TestReporter& reporter ); 28 25 ~TestRunner(); 29 26 30 27 template <class Predicate> 31 int RunTestsIf(TestList const& list, char const* suiteName, 32 const Predicate& predicate, int maxTestTimeInMs) const 33 { 34 Test* curTest = list.GetHead(); 28 int RunTestsIf ( TestList const& list, char const* suiteName, 29 const Predicate& predicate, int maxTestTimeInMs ) const { 30 Test* curTest = list.GetHead(); 35 31 36 while (curTest != 0) 37 { 38 if (IsTestInSuite(curTest, suiteName) && predicate(curTest)) 39 RunTest(m_result, curTest, maxTestTimeInMs); 32 while ( curTest != 0 ) { 33 if ( IsTestInSuite ( curTest, suiteName ) && predicate ( curTest ) ) 34 RunTest ( m_result, curTest, maxTestTimeInMs ); 40 35 41 36 curTest = curTest->next; 42 37 } 43 38 44 45 } 39 return Finish(); 40 } 46 41 47 42 private: … … 51 46 52 47 int Finish() const; 53 bool IsTestInSuite (const Test* const curTest, char const* suiteName) const;54 void RunTest (TestResults* const result, Test* const curTest, int const maxTestTimeInMs) const;48 bool IsTestInSuite ( const Test* const curTest, char const* suiteName ) const; 49 void RunTest ( TestResults* const result, Test* const curTest, int const maxTestTimeInMs ) const; 55 50 }; 56 51 -
library/tests/unittest-cpp/TestSuite.h
r418 r477 2 2 #define UNITTEST_TESTSUITE_H 3 3 4 namespace UnitTestSuite 5 { 6 inline char const* GetSuiteName () 7 { 8 return "DefaultSuite"; 9 } 4 namespace UnitTestSuite { 5 inline char const* GetSuiteName () { 6 return "DefaultSuite"; 7 } 10 8 } 11 9 -
library/tests/unittest-cpp/TimeConstraint.cpp
r418 r477 7 7 8 8 9 TimeConstraint::TimeConstraint(int ms, TestDetails const& details) 10 : m_details(details) 11 , m_maxMs(ms) 12 { 13 m_timer.Start(); 9 TimeConstraint::TimeConstraint ( int ms, TestDetails const& details ) 10 : m_details ( details ) 11 , m_maxMs ( ms ) { 12 m_timer.Start(); 14 13 } 15 14 16 TimeConstraint::~TimeConstraint() 17 { 18 double const totalTimeInMs = m_timer.GetTimeInMs(); 19 if (totalTimeInMs > m_maxMs) 20 { 21 MemoryOutStream stream; 22 stream << "Time constraint failed. Expected to run test under " << m_maxMs << 23 "ms but took " << totalTimeInMs << "ms."; 15 TimeConstraint::~TimeConstraint() { 16 double const totalTimeInMs = m_timer.GetTimeInMs(); 17 if ( totalTimeInMs > m_maxMs ) { 18 MemoryOutStream stream; 19 stream << "Time constraint failed. Expected to run test under " << m_maxMs << 20 "ms but took " << totalTimeInMs << "ms."; 24 21 25 UnitTest::CurrentTest::Results()->OnTestFailure (m_details, stream.GetText());26 22 UnitTest::CurrentTest::Results()->OnTestFailure ( m_details, stream.GetText() ); 23 } 27 24 } 28 25 -
library/tests/unittest-cpp/TimeConstraint.h
r418 r477 9 9 class TestDetails; 10 10 11 class TimeConstraint 12 { 11 class TimeConstraint { 13 12 public: 14 TimeConstraint(int ms, TestDetails const& details);15 13 TimeConstraint ( int ms, TestDetails const& details ); 14 ~TimeConstraint(); 16 15 17 16 private: 18 void operator=(TimeConstraint const&); 19 TimeConstraint (TimeConstraint const&);17 void operator= ( TimeConstraint const& ); 18 TimeConstraint ( TimeConstraint const& ); 20 19 21 20 Timer m_timer; 22 21 TestDetails const& m_details; 23 22 int const m_maxMs; 24 23 }; -
library/tests/unittest-cpp/TimeHelpers.h
r418 r477 2 2 3 3 #if defined UNITTEST_POSIX 4 4 #include "Posix/TimeHelpers.h" 5 5 #else 6 6 #include "Win32/TimeHelpers.h" 7 7 #endif -
library/tests/unittest-cpp/Win32/TimeHelpers.cpp
r418 r477 5 5 6 6 Timer::Timer() 7 : m_threadHandle(::GetCurrentThread()) 8 , m_startTime(0) 9 { 7 : m_threadHandle ( ::GetCurrentThread() ) 8 , m_startTime ( 0 ) { 10 9 #if defined(_MSC_VER) && (_MSC_VER == 1200) // VC6 doesn't have DWORD_PTR? 11 10 typedef unsigned long DWORD_PTR; … … 13 12 14 13 DWORD_PTR systemMask; 15 ::GetProcessAffinityMask (GetCurrentProcess(), &m_processAffinityMask, &systemMask);16 ::SetThreadAffinityMask (m_threadHandle, 1);17 ::QueryPerformanceFrequency (reinterpret_cast< LARGE_INTEGER* >(&m_frequency));18 ::SetThreadAffinityMask (m_threadHandle, m_processAffinityMask);14 ::GetProcessAffinityMask ( GetCurrentProcess(), &m_processAffinityMask, &systemMask ); 15 ::SetThreadAffinityMask ( m_threadHandle, 1 ); 16 ::QueryPerformanceFrequency ( reinterpret_cast< LARGE_INTEGER* > ( &m_frequency ) ); 17 ::SetThreadAffinityMask ( m_threadHandle, m_processAffinityMask ); 19 18 } 20 19 21 void Timer::Start() 22 { 20 void Timer::Start() { 23 21 m_startTime = GetTime(); 24 22 } 25 23 26 double Timer::GetTimeInMs() const 27 { 24 double Timer::GetTimeInMs() const { 28 25 __int64 const elapsedTime = GetTime() - m_startTime; 29 double const seconds = double (elapsedTime) / double(m_frequency);26 double const seconds = double ( elapsedTime ) / double ( m_frequency ); 30 27 return seconds * 1000.0; 31 28 } 32 29 33 __int64 Timer::GetTime() const 34 { 30 __int64 Timer::GetTime() const { 35 31 LARGE_INTEGER curTime; 36 ::SetThreadAffinityMask (m_threadHandle, 1);37 ::QueryPerformanceCounter (&curTime);38 ::SetThreadAffinityMask (m_threadHandle, m_processAffinityMask);32 ::SetThreadAffinityMask ( m_threadHandle, 1 ); 33 ::QueryPerformanceCounter ( &curTime ); 34 ::SetThreadAffinityMask ( m_threadHandle, m_processAffinityMask ); 39 35 return curTime.QuadPart; 40 36 } 41 37 42 void TimeHelpers::SleepMs(int const ms) 43 { 44 ::Sleep(ms); 38 void TimeHelpers::SleepMs ( int const ms ) { 39 ::Sleep ( ms ); 45 40 } 46 41 -
library/tests/unittest-cpp/Win32/TimeHelpers.h
r418 r477 6 6 7 7 #ifdef UNITTEST_MINGW 8 9 10 8 #ifndef __int64 9 #define __int64 long long 10 #endif 11 11 #endif 12 12 13 13 namespace UnitTest { 14 14 15 class Timer 16 { 15 class Timer { 17 16 public: 18 17 Timer(); 19 18 void Start(); 20 double GetTimeInMs() const; 19 double GetTimeInMs() const; 21 20 22 21 private: 23 22 __int64 GetTime() const; 24 23 25 24 void* m_threadHandle; 26 25 27 26 #if defined(_WIN64) 28 27 unsigned __int64 m_processAffinityMask; 29 28 #else 30 29 unsigned long m_processAffinityMask; 31 30 #endif 32 31 … … 36 35 37 36 38 namespace TimeHelpers 39 { 40 void SleepMs (int ms); 37 namespace TimeHelpers { 38 void SleepMs ( int ms ); 41 39 } 42 40 -
library/tests/unittest-cpp/XmlTestReporter.cpp
r418 r477 12 12 namespace { 13 13 14 void ReplaceChar(string& str, char c, string const& replacement) 15 { 16 for (size_t pos = str.find(c); pos != string::npos; pos = str.find(c, pos + 1)) 17 str.replace(pos, 1, replacement); 14 void ReplaceChar ( string& str, char c, string const& replacement ) { 15 for ( size_t pos = str.find ( c ); pos != string::npos; pos = str.find ( c, pos + 1 ) ) 16 str.replace ( pos, 1, replacement ); 18 17 } 19 18 20 string XmlEscape(string const& value) 21 { 22 string escaped = value; 19 string XmlEscape ( string const& value ) { 20 string escaped = value; 23 21 24 ReplaceChar(escaped, '&', "&");25 ReplaceChar(escaped, '<', "<");26 ReplaceChar(escaped, '>', ">");27 ReplaceChar(escaped, '\'', "'");28 ReplaceChar(escaped, '\"', """);29 30 22 ReplaceChar ( escaped, '&', "&" ); 23 ReplaceChar ( escaped, '<', "<" ); 24 ReplaceChar ( escaped, '>', ">" ); 25 ReplaceChar ( escaped, '\'', "'" ); 26 ReplaceChar ( escaped, '\"', """ ); 27 28 return escaped; 31 29 } 32 30 33 string BuildFailureMessage(string const& file, int line, string const& message) 34 { 35 ostringstream failureMessage; 36 failureMessage << file << "(" << line << ") : " << message; 37 return failureMessage.str(); 31 string BuildFailureMessage ( string const& file, int line, string const& message ) { 32 ostringstream failureMessage; 33 failureMessage << file << "(" << line << ") : " << message; 34 return failureMessage.str(); 38 35 } 39 36 … … 42 39 namespace UnitTest { 43 40 44 XmlTestReporter::XmlTestReporter(ostream& ostream) 45 : m_ostream(ostream) 46 { 41 XmlTestReporter::XmlTestReporter ( ostream& ostream ) 42 : m_ostream ( ostream ) { 47 43 } 48 44 49 void XmlTestReporter::ReportSummary(int totalTestCount, int failedTestCount, 50 int failureCount, float secondsElapsed) 51 { 52 AddXmlElement(m_ostream, NULL); 45 void XmlTestReporter::ReportSummary ( int totalTestCount, int failedTestCount, 46 int failureCount, float secondsElapsed ) { 47 AddXmlElement ( m_ostream, NULL ); 53 48 54 BeginResults(m_ostream, totalTestCount, failedTestCount, failureCount, secondsElapsed);49 BeginResults ( m_ostream, totalTestCount, failedTestCount, failureCount, secondsElapsed ); 55 50 56 DeferredTestResultList const& results = GetResults(); 57 for (DeferredTestResultList::const_iterator i = results.begin(); i != results.end(); ++i) 58 { 59 BeginTest(m_ostream, *i); 51 DeferredTestResultList const& results = GetResults(); 52 for ( DeferredTestResultList::const_iterator i = results.begin(); i != results.end(); ++i ) { 53 BeginTest ( m_ostream, *i ); 60 54 61 if (i->failed)62 AddFailure(m_ostream, *i);55 if ( i->failed ) 56 AddFailure ( m_ostream, *i ); 63 57 64 EndTest(m_ostream, *i);65 58 EndTest ( m_ostream, *i ); 59 } 66 60 67 EndResults(m_ostream);61 EndResults ( m_ostream ); 68 62 } 69 63 70 void XmlTestReporter::AddXmlElement(ostream& os, char const* encoding) 71 { 72 os << "<?xml version=\"1.0\""; 64 void XmlTestReporter::AddXmlElement ( ostream& os, char const* encoding ) { 65 os << "<?xml version=\"1.0\""; 73 66 74 if (encoding != NULL)75 67 if ( encoding != NULL ) 68 os << " encoding=\"" << encoding << "\""; 76 69 77 70 os << "?>"; 78 71 } 79 72 80 void XmlTestReporter::BeginResults(std::ostream& os, int totalTestCount, int failedTestCount, 81 int failureCount, float secondsElapsed) 82 { 83 os << "<unittest-results" 84 << " tests=\"" << totalTestCount << "\"" 85 << " failedtests=\"" << failedTestCount << "\"" 86 << " failures=\"" << failureCount << "\"" 87 << " time=\"" << secondsElapsed << "\"" 88 << ">"; 73 void XmlTestReporter::BeginResults ( std::ostream& os, int totalTestCount, int failedTestCount, 74 int failureCount, float secondsElapsed ) { 75 os << "<unittest-results" 76 << " tests=\"" << totalTestCount << "\"" 77 << " failedtests=\"" << failedTestCount << "\"" 78 << " failures=\"" << failureCount << "\"" 79 << " time=\"" << secondsElapsed << "\"" 80 << ">"; 89 81 } 90 82 91 void XmlTestReporter::EndResults(std::ostream& os) 92 { 93 os << "</unittest-results>"; 83 void XmlTestReporter::EndResults ( std::ostream& os ) { 84 os << "</unittest-results>"; 94 85 } 95 86 96 void XmlTestReporter::BeginTest(std::ostream& os, DeferredTestResult const& result) 97 { 98 os << "<test" 99 << " suite=\"" << result.suiteName << "\"" 100 << " name=\"" << result.testName << "\"" 101 << " time=\"" << result.timeElapsed << "\""; 87 void XmlTestReporter::BeginTest ( std::ostream& os, DeferredTestResult const& result ) { 88 os << "<test" 89 << " suite=\"" << result.suiteName << "\"" 90 << " name=\"" << result.testName << "\"" 91 << " time=\"" << result.timeElapsed << "\""; 102 92 } 103 93 104 void XmlTestReporter::EndTest(std::ostream& os, DeferredTestResult const& result) 105 { 106 if (result.failed) 107 os << "</test>"; 108 else 109 os << "/>"; 94 void XmlTestReporter::EndTest ( std::ostream& os, DeferredTestResult const& result ) { 95 if ( result.failed ) 96 os << "</test>"; 97 else 98 os << "/>"; 110 99 } 111 100 112 void XmlTestReporter::AddFailure(std::ostream& os, DeferredTestResult const& result) 113 { 114 os << ">"; // close <test> element 101 void XmlTestReporter::AddFailure ( std::ostream& os, DeferredTestResult const& result ) { 102 os << ">"; // close <test> element 115 103 116 for (DeferredTestResult::FailureVec::const_iterator it = result.failures.begin(); 117 it != result.failures.end(); 118 ++it) 119 { 120 string const escapedMessage = XmlEscape(it->second); 121 string const message = BuildFailureMessage(result.failureFile, it->first, escapedMessage); 104 for ( DeferredTestResult::FailureVec::const_iterator it = result.failures.begin(); 105 it != result.failures.end(); 106 ++it ) { 107 string const escapedMessage = XmlEscape ( it->second ); 108 string const message = BuildFailureMessage ( result.failureFile, it->first, escapedMessage ); 122 109 123 124 110 os << "<failure" << " message=\"" << message << "\"" << "/>"; 111 } 125 112 } 126 113 -
library/tests/unittest-cpp/XmlTestReporter.h
r418 r477 6 6 #include <iosfwd> 7 7 8 namespace UnitTest 9 { 8 namespace UnitTest { 10 9 11 class XmlTestReporter : public DeferredTestReporter 12 { 10 class XmlTestReporter : public DeferredTestReporter { 13 11 public: 14 explicit XmlTestReporter(std::ostream& ostream);12 explicit XmlTestReporter ( std::ostream& ostream ); 15 13 16 virtual void ReportSummary(int totalTestCount, int failedTestCount, int failureCount, float secondsElapsed);14 virtual void ReportSummary ( int totalTestCount, int failedTestCount, int failureCount, float secondsElapsed ); 17 15 18 16 private: 19 XmlTestReporter(XmlTestReporter const&);20 XmlTestReporter& operator=(XmlTestReporter const&);17 XmlTestReporter ( XmlTestReporter const& ); 18 XmlTestReporter& operator= ( XmlTestReporter const& ); 21 19 22 void AddXmlElement(std::ostream& os, char const* encoding);23 void BeginResults(std::ostream& os, int totalTestCount, int failedTestCount, int failureCount, float secondsElapsed);24 void EndResults(std::ostream& os);25 void BeginTest(std::ostream& os, DeferredTestResult const& result);26 void AddFailure(std::ostream& os, DeferredTestResult const& result);27 void EndTest(std::ostream& os, DeferredTestResult const& result);20 void AddXmlElement ( std::ostream& os, char const* encoding ); 21 void BeginResults ( std::ostream& os, int totalTestCount, int failedTestCount, int failureCount, float secondsElapsed ); 22 void EndResults ( std::ostream& os ); 23 void BeginTest ( std::ostream& os, DeferredTestResult const& result ); 24 void AddFailure ( std::ostream& os, DeferredTestResult const& result ); 25 void EndTest ( std::ostream& os, DeferredTestResult const& result ); 28 26 29 27 std::ostream& m_ostream; 30 28 }; 31 29