diff options
Diffstat (limited to '3rdparty/unittest-cpp/tests/TestTestMacros.cpp')
-rw-r--r-- | 3rdparty/unittest-cpp/tests/TestTestMacros.cpp | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/3rdparty/unittest-cpp/tests/TestTestMacros.cpp b/3rdparty/unittest-cpp/tests/TestTestMacros.cpp new file mode 100644 index 00000000000..4f0cfed31d7 --- /dev/null +++ b/3rdparty/unittest-cpp/tests/TestTestMacros.cpp @@ -0,0 +1,221 @@ +#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; + +namespace { + +TestList list1; +TEST_EX(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; +TEST_FIXTURE_EX(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; +TEST_EX(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; +TEST_FIXTURE_EX(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; +TEST_FIXTURE_EX(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() { throw "exception"; } +}; + +TestList throwingFixtureTestList2; +TEST_FIXTURE_EX(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; +TEST_FIXTURE_EX(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 |