/*
* Javolution - Java(TM) Solution for Real-Time and Embedded Systems
* Copyright (C) 2007 - Javolution (http://javolution.org/)
* All rights reserved.
*
* Permission to use, copy, modify, and distribute this software is
* freely granted, provided that this notice is preserved.
*/
package javolution.testing;
import j2me.util.List;
import javolution.util.FastTable;
/**
* <p> This class represents a grouping of potentially {@link #isParallelizable()
* parallelizable}{@link TestCase test cases}. [code]
* class TypeFormatTestSuite extends TestSuite {
* public TypeFormatTestSuite() {
* addTest(new ParseBoolean());
* addTest(new ParseInt().ignore(true)); // Adds this test case but it is ignored for now.
* ...
* }
* class ParseBoolean extends TestCase { ... };
* class ParseInt extends TestCase { ... };
* ...
* }[/code]</p>
*
* <p> How the test suite is executed, how the test results are logged and how
* the test report is created depends upon the {@link TestContext} in which
* the test suite is {@link TestContext#run(TestSuite) run}. Specialized
* test contexts may address specific concerns such as performance
* ({@link TimeContext}), memory usage, code coverage, etc. The test
* context determinates also how test results are reported (e.g. html
* formatted, IDE integrated, etc.)</p>
*
* @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
* @version 5.3, March 8, 2009
* @see <a href="http://en.wikipedia.org/wiki/Test_suite">
* Wikipedia: Test Suite</a>
*/
public abstract class TestSuite {
/**
* Holds the test cases.
*/
FastTable _tests = new FastTable();
/**
* Default constructor.
*/
protected TestSuite() {
}
/**
* Returns the name of this test case. The default implementation
* returns the class name.
*
* @return the test suite name.
*/
public String getName() {
return this.getClass().getName();
}
/**
* Adds the specified test case to this test suite.
*
* @param testCase the test case being added.
* @return the specified test case.
*/
protected TestCase addTest(TestCase testCase) {
_tests.add(testCase);
return testCase;
}
/**
* Prepares the test suite execution (the default implementation does
* nothing).
*/
public void setUp() {
// Does nothing.
}
/**
* Cleanup once test suite execution is complete (the default implementation
* does nothing).
*/
public void tearDown() {
// Does nothing.
}
/**
* Returns the collection of test cases belonging to this test suite.
*
* @return the test cases
*/
public List/*<TestCase>*/ tests() {
return _tests;
}
/**
* Indicates if the test cases of this test suite can be run concurrently
* (default <code>true</code>). If the test suite is not parallelizable then
* the test cases are executed in sequence, first added runs first.
*
* @return <code>true</code> if parallelizable;
* <code>false</code> otherwise.
*/
public boolean isParallelizable() {
return true;
}
/**
* Returns the <code>String</code> representation of this test suite.
*
* @return <code>this.getName()</code>
*/
public String toString() {
return getName();
}
}