* Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#ifndef TEST_SUITE_H
#define TEST_SUITE_H
#include <new>
#include "Test.h"
class TestSuite : public Test {
public:
TestSuite(const char* name);
virtual ~TestSuite();
int32 CountTests() const;
Test* TestAt(int32 index) const;
Test* FindTest(const char* name,
int32 nameLength = -1) const;
bool AddTest(Test* test);
virtual bool IsLeafTest() const;
virtual bool Run(TestContext& context);
virtual bool Run(TestContext& context, const char* name);
virtual Test* Visit(TestVisitor& visitor);
private:
bool _Run(TestContext& context, Test* test,
const char* name);
private:
Test** fTests;
int32 fTestCount;
};
#define ADD_TEST(suite, test) \
do { \
if (!suite->AddTest(test)) { \
delete test; \
delete suite; \
return NULL; \
} \
} while (false)
#define ADD_STANDARD_TEST(suite, type, method) \
do { \
type* object = new(std::nothrow) type; \
if (object == NULL) \
return NULL; \
\
StandardTest<type>* test = new(std::nothrow) StandardTest<type>( \
#method, object, &type::method); \
if (test == NULL) { \
delete object; \
return NULL; \
} \
ADD_TEST(suite, test); \
} while (false)
#endif