- #include "UnitTest++/UnitTestPP.h" 
- #include "UnitTest++/TestMacros.h" 
- #include "UnitTest++/TestList.h" 
- #include "UnitTest++/TestResults.h" 
- #include "UnitTest++/TestReporter.h" 
- #include "UnitTest++/ReportAssert.h" 
- #include "RecordingReporter.h" 
- #include "ScopedCurrentTest.h" 
-   
- using namespace UnitTest; 
- using namespace std; 
-   
- /* test for c++11 support */ 
- #ifndef _MSC_VER 
-   
-    /* Test for clang >= 3.3 */ 
-    #ifdef __clang__ 
-       #if (__clang__ == 1) && (__clang_major__ > 3 || (__clang_major__ == 3 && (__clang_minor__ > 2 ))) 
-          #define _NOEXCEPT_OP(x) noexcept(x) 
-       #else 
-          #define _NOEXCEPT_OP(x) 
-       #endif 
-    #endif 
-   
-    #ifndef __clang__ 
-       /* Test for GCC >= 4.8.0 */ 
-       #ifdef __GNUC__ 
-          #if (__GNUC__ > 4) || (__GNUC__ == 4 && (__GNUC_MINOR__ > 7 )) 
-             #define _NOEXCEPT_OP(x) noexcept(x) 
-          #else 
-             #define _NOEXCEPT_OP(x) 
-          #endif 
-       #endif 
-    #endif 
-   
- #elif _MSC_VER 
-   
-    #if (_MSC_VER > 1800) 
-       #define _NOEXCEPT_OP(x) noexcept(x) 
-    #else 
-       #define _NOEXCEPT_OP(x) 
-    #endif 
-   
- #endif 
-   
- namespace { 
-   
-    TestList list1; 
-    UNITTEST_IMPL_TEST(DummyTest, list1) 
-    {} 
-   
-    TEST (TestsAreAddedToTheListThroughMacro) 
-    { 
-       CHECK(list1.GetHead() != 0); 
-       CHECK(list1.GetHead()->m_nextTest == 0); 
-    } 
-   
- #ifndef UNITTEST_NO_EXCEPTIONS 
-   
-    struct ThrowingThingie 
-    { 
-       ThrowingThingie() : dummy(false) 
-       { 
-          if (!dummy) 
-             throw "Oops"; 
-       } 
-   
-       bool dummy; 
-    }; 
-   
-    TestList list2; 
-    UNITTEST_IMPL_TEST_FIXTURE(ThrowingThingie, DummyTestName, list2) 
-    {} 
-   
-    TEST (ExceptionsInFixtureAreReportedAsHappeningInTheFixture) 
-    { 
-       RecordingReporter reporter; 
-       TestResults result(&reporter); 
-       { 
-          ScopedCurrentTest scopedResults(result); 
-          list2.GetHead()->Run(); 
-       } 
-   
-       CHECK(strstr(reporter.lastFailedMessage, "xception")); 
-       CHECK(strstr(reporter.lastFailedMessage, "fixture")); 
-       CHECK(strstr(reporter.lastFailedMessage, "ThrowingThingie")); 
-    } 
-   
- #endif 
-   
-    struct DummyFixture 
-    { 
-       int x; 
-    }; 
-   
- // We're really testing the macros so we just want them to compile and link 
-    SUITE(TestSuite1) 
-    { 
-       TEST(SimilarlyNamedTestsInDifferentSuitesWork) 
-       {} 
-   
-       TEST_FIXTURE(DummyFixture, SimilarlyNamedFixtureTestsInDifferentSuitesWork) 
-       {} 
-    } 
-   
-    SUITE(TestSuite2) 
-    { 
-       TEST(SimilarlyNamedTestsInDifferentSuitesWork) 
-       {} 
-   
-       TEST_FIXTURE(DummyFixture,SimilarlyNamedFixtureTestsInDifferentSuitesWork) 
-       {} 
-    } 
-   
-    TestList macroTestList1; 
-    UNITTEST_IMPL_TEST(MacroTestHelper1, macroTestList1) 
-    {} 
-   
-    TEST(TestAddedWithTEST_EXMacroGetsDefaultSuite) 
-    { 
-       CHECK(macroTestList1.GetHead() != NULL); 
-       CHECK_EQUAL ("MacroTestHelper1", macroTestList1.GetHead()->m_details.testName); 
-       CHECK_EQUAL ("DefaultSuite", macroTestList1.GetHead()->m_details.suiteName); 
-    } 
-   
-    TestList macroTestList2; 
-    UNITTEST_IMPL_TEST_FIXTURE(DummyFixture, MacroTestHelper2, macroTestList2) 
-    {} 
-   
-    TEST(TestAddedWithTEST_FIXTURE_EXMacroGetsDefaultSuite) 
-    { 
-       CHECK(macroTestList2.GetHead() != NULL); 
-       CHECK_EQUAL ("MacroTestHelper2", macroTestList2.GetHead()->m_details.testName); 
-       CHECK_EQUAL ("DefaultSuite", macroTestList2.GetHead()->m_details.suiteName); 
-    } 
-   
- #ifndef UNITTEST_NO_EXCEPTIONS 
-   
-    struct FixtureCtorThrows 
-    { 
-       FixtureCtorThrows() { 
-          throw "exception"; 
-       } 
-    }; 
-   
-    TestList throwingFixtureTestList1; 
-    UNITTEST_IMPL_TEST_FIXTURE(FixtureCtorThrows, FixtureCtorThrowsTestName, throwingFixtureTestList1) 
-    {} 
-   
-    TEST(FixturesWithThrowingCtorsAreFailures) 
-    { 
-       CHECK(throwingFixtureTestList1.GetHead() != NULL); 
-       RecordingReporter reporter; 
-       TestResults result(&reporter); 
-       { 
-          ScopedCurrentTest scopedResult(result); 
-          throwingFixtureTestList1.GetHead()->Run(); 
-       } 
-   
-       int const failureCount = result.GetFailedTestCount(); 
-       CHECK_EQUAL(1, failureCount); 
-       CHECK(strstr(reporter.lastFailedMessage, "while constructing fixture")); 
-    } 
-   
-    struct FixtureDtorThrows 
-    { 
-       ~FixtureDtorThrows() _NOEXCEPT_OP(false) { 
-          throw "exception"; 
-       } 
-    }; 
-   
-    TestList throwingFixtureTestList2; 
-    UNITTEST_IMPL_TEST_FIXTURE(FixtureDtorThrows, FixtureDtorThrowsTestName, throwingFixtureTestList2) 
-    {} 
-   
-    TEST(FixturesWithThrowingDtorsAreFailures) 
-    { 
-       CHECK(throwingFixtureTestList2.GetHead() != NULL); 
-   
-       RecordingReporter reporter; 
-       TestResults result(&reporter); 
-       { 
-          ScopedCurrentTest scopedResult(result); 
-          throwingFixtureTestList2.GetHead()->Run(); 
-       } 
-   
-       int const failureCount = result.GetFailedTestCount(); 
-       CHECK_EQUAL(1, failureCount); 
-       CHECK(strstr(reporter.lastFailedMessage, "while destroying fixture")); 
-    } 
-   
-    const int FailingLine = 123; 
-   
-    struct FixtureCtorAsserts 
-    { 
-       FixtureCtorAsserts() 
-       { 
-          UnitTest::ReportAssert("assert failure", "file", FailingLine); 
-       } 
-    }; 
-   
-    TestList ctorAssertFixtureTestList; 
-    UNITTEST_IMPL_TEST_FIXTURE(FixtureCtorAsserts, CorrectlyReportsAssertFailureInCtor, ctorAssertFixtureTestList) 
-    {} 
-   
-    TEST(CorrectlyReportsFixturesWithCtorsThatAssert) 
-    { 
-       RecordingReporter reporter; 
-       TestResults result(&reporter); 
-       { 
-          ScopedCurrentTest scopedResults(result); 
-          ctorAssertFixtureTestList.GetHead()->Run(); 
-       } 
-   
-       const int failureCount = result.GetFailedTestCount(); 
-       CHECK_EQUAL(1, failureCount); 
-       CHECK_EQUAL(FailingLine, reporter.lastFailedLine); 
-       CHECK(strstr(reporter.lastFailedMessage, "assert failure")); 
-    } 
-   
- #endif 
-   
- } 
-   
- // We're really testing if it's possible to use the same suite in two files 
- // to compile and link successfuly (TestTestSuite.cpp has suite with the same name) 
- // Note: we are outside of the anonymous namespace 
- SUITE(SameTestSuite) 
- { 
-    TEST(DummyTest1) 
-    {} 
- } 
-   
- #define CUR_TEST_NAME CurrentTestDetailsContainCurrentTestInfo 
- #define INNER_STRINGIFY(X) #X 
- #define STRINGIFY(X) INNER_STRINGIFY(X) 
-   
- TEST(CUR_TEST_NAME) 
- { 
-    const UnitTest::TestDetails* details = CurrentTest::Details(); 
-    CHECK_EQUAL(STRINGIFY(CUR_TEST_NAME), details->testName); 
- } 
-   
- #undef CUR_TEST_NAME 
- #undef INNER_STRINGIFY 
- #undef STRINGIFY 
-