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