Mercurial > fife-parpg
diff ext/UnitTest++/src/tests/TestTestMacros.cpp @ 37:0d325e9d5953
added unittest++ files into ext. Not hooked into build scripts yet
author | jasoka@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Sat, 12 Jul 2008 12:00:57 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ext/UnitTest++/src/tests/TestTestMacros.cpp Sat Jul 12 12:00:57 2008 +0000 @@ -0,0 +1,171 @@ +#include "../UnitTest++.h" +#include "../TestMacros.h" +#include "../TestList.h" +#include "../TestResults.h" +#include "../TestReporter.h" +#include "RecordingReporter.h" + +using namespace UnitTest; + +namespace { + +TestList list1; +TEST_EX(DummyTest, list1) +{ + (void)testResults_; +} + +TEST (TestsAreAddedToTheListThroughMacro) +{ + CHECK (list1.GetHead() != 0); + CHECK (list1.GetHead()->next == 0); +} + +struct ThrowingThingie +{ + ThrowingThingie() : dummy(false) + { + if (!dummy) + throw "Oops"; + } + bool dummy; +}; + +TestList list2; +TEST_FIXTURE_EX(ThrowingThingie,DummyTestName,list2) +{ + (void)testResults_; +} + +TEST (ExceptionsInFixtureAreReportedAsHappeningInTheFixture) +{ + RecordingReporter reporter; + TestResults result(&reporter); + list2.GetHead()->Run(result); + + CHECK (strstr(reporter.lastFailedMessage, "xception")); + CHECK (strstr(reporter.lastFailedMessage, "fixture")); + CHECK (strstr(reporter.lastFailedMessage, "ThrowingThingie")); +} + +struct DummyFixture +{ + int x; +}; + +// We're really testing the macros so we just want them to compile and link +SUITE(TestSuite1) +{ + + TEST(SimilarlyNamedTestsInDifferentSuitesWork) + { + (void)testResults_; + } + + TEST_FIXTURE(DummyFixture,SimilarlyNamedFixtureTestsInDifferentSuitesWork) + { + (void)testResults_; + } + +} + +SUITE(TestSuite2) +{ + + TEST(SimilarlyNamedTestsInDifferentSuitesWork) + { + (void)testResults_; + } + + TEST_FIXTURE(DummyFixture,SimilarlyNamedFixtureTestsInDifferentSuitesWork) + { + (void)testResults_; + } + +} + +TestList macroTestList1; +TEST_EX(MacroTestHelper1,macroTestList1) +{ + (void)testResults_; +} + +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) +{ + (void)testResults_; +} + +TEST(TestAddedWithTEST_FIXTURE_EXMacroGetsDefaultSuite) +{ + CHECK(macroTestList2.GetHead() != NULL); + CHECK_EQUAL ("MacroTestHelper2", macroTestList2.GetHead()->m_details.testName); + CHECK_EQUAL ("DefaultSuite", macroTestList2.GetHead()->m_details.suiteName); +} + +struct FixtureCtorThrows +{ + FixtureCtorThrows() { throw "exception"; } +}; + +TestList throwingFixtureTestList1; +TEST_FIXTURE_EX(FixtureCtorThrows, FixtureCtorThrowsTestName, throwingFixtureTestList1) +{ + (void)testResults_; +} + +TEST(FixturesWithThrowingCtorsAreFailures) +{ + CHECK(throwingFixtureTestList1.GetHead() != NULL); + RecordingReporter reporter; + TestResults result(&reporter); + throwingFixtureTestList1.GetHead()->Run(result); + + 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) +{ + (void)testResults_; +} + +TEST(FixturesWithThrowingDtorsAreFailures) +{ + CHECK(throwingFixtureTestList2.GetHead() != NULL); + RecordingReporter reporter; + TestResults result(&reporter); + throwingFixtureTestList2.GetHead()->Run(result); + + int const failureCount = result.GetFailedTestCount(); + CHECK_EQUAL(1, failureCount); + CHECK(strstr(reporter.lastFailedMessage, "while destroying fixture")); +} + +} + +// 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) + { + (void)testResults_; + } +} +