1//
2// MuleUnit: A minimalistic C++ Unit testing framework based on EasyUnit.
3//
4// Copyright (c) 2005-2011 aMule Team ( admin@amule.org / http://www.amule.org )
5// Copyright (c) 2004-2011 Barthelemy Dagenais ( barthelemy@prologique.com )
6//
7// This library is free software; you can redistribute it and/or
8// modify it under the terms of the GNU Lesser General Public
9// License as published by the Free Software Foundation; either
10// version 2.1 of the License, or (at your option) any later version.
11//
12// This library is distributed in the hope that it will be useful,
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15// Lesser General Public License for more details.
16//
17// You should have received a copy of the GNU Lesser General Public
18// License along with this library; if not, write to the Free Software
19// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
20//
21
22
23#include "testcase.h"
24#include "test.h"
25
26#include <exception>
27
28using namespace muleunit;
29
30TestCase::TestCase(const wxString& name)
31		: m_name(name)
32{}
33
34TestCase::~TestCase()
35{
36}
37
38void TestCase::addTest(Test *test)
39{
40	m_tests.push_back(test);
41}
42
43const TestList& TestCase::getTests() const
44{
45	return m_tests;
46}
47
48int TestCase::getTestsCount() const
49{
50	return m_tests.size();
51}
52
53
54const wxString& TestCase::getName() const
55{
56	return m_name;
57}
58
59
60
61bool TestCase::run()
62{
63	Print(wxT("\nRunning test-collection \"") + m_name + wxString::Format(wxT("\" with %u test-cases:"), m_tests.size()));
64
65	bool failures = false;
66
67	TestList::iterator it = m_tests.begin();
68	for (; it != m_tests.end(); ++it) {
69		Test* test = *it;
70
71		Print(wxT("\tTest \"") + test->getTestName() + wxT("\" "));
72
73		bool wasSetup = false;
74		try {
75			test->setUp();
76			wasSetup = true;
77		} catch (const CTestFailureException& e) {
78			failures = true;
79			Print(wxT("\t\tFailure in setUp:\n"));
80			e.PrintBT();
81		}
82
83		// Only run the test if it was actually setup. Otherwise we
84		// are sure to get spurious failures.
85		if (wasSetup) {
86			try {
87				test->run();
88			} catch (const CTestFailureException& e) {
89				failures = true;
90				Print(wxT("\t\tFailure running:"));
91				e.PrintBT();
92			}
93		}
94
95		try {
96			test->tearDown();
97		} catch (const CTestFailureException& e) {
98			failures = true;
99			Print(wxT("\t\tFailure in tearDown:"));
100			e.PrintBT();
101		}
102	}
103
104	return !failures;
105}
106
107