/* * $Id$ * * Copyright (c) 1996, 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.javatest; import java.util.Iterator; import com.sun.javatest.util.BackupPolicy; /** * TestRunner is the abstract base class providing the ability to * control how tests are run. A default is provided that executes * each test by means of a script class. *
If a test suite does not wish tom use the default test runner,
* it should provide its own implementation of this class. The primary
* method which should be implemented is {@link #runTests}.
*/
public abstract class TestRunner
{
/**
* Set the work directory used to store the test results generated
* by this test runner.
* @param wd the work directory used to store the test results generated
* by this test runner
* @see #getWorkDirectory
*/
void setWorkDirectory(WorkDirectory wd) {
workDir = wd;
}
/**
* Get the work directory to be used to store the test results generated
* by this test runner.
* @return the work directory used to store the test results generated
* by this test runner
*/
public WorkDirectory getWorkDirectory() {
return workDir;
}
/**
* Get the test suite containing the tests to be run by this test runner.
* @return the test suite containing the tests to be run by this test runner
*/
public TestSuite getTestSuite() {
return workDir.getTestSuite();
}
/**
* Set the backup policy to be used when creating the test result files
* generated by this test runner.
* @param backupPolicy the backup policy to be used when creating the
* test result files generated by this test runner
* @see #getBackupPolicy
* @see TestResult#writeResults(WorkDirectory, BackupPolicy)
*/
void setBackupPolicy(BackupPolicy backupPolicy) {
this.backupPolicy = backupPolicy;
}
/**
* Get the backup policy to be used when creating the test result files
* generated by this test runner.
* @return the backup policy to be used when creating the
* test result files generated by this test runner
* @see TestResult#writeResults(WorkDirectory, BackupPolicy)
*/
public BackupPolicy getBackupPolicy() {
return backupPolicy;
}
/**
* Set the test environment to be used to execute the tests that will
* be run by this test runner.
* @param env the test environment to be used to execute the tests that will
* be run by this test runner
* @see #getEnvironment
*/
void setEnvironment(TestEnvironment env) {
this.env = env;
}
/**
* Get the test environment to be used to execute the tests that will
* be run by this test runner.
* @return the test environment to be used to execute the tests that will
* be run by this test runner
* @see #getEnvironment
*/
public TestEnvironment getEnvironment() {
return env;
}
/**
* Set the exclude list to be used to identify the test cases to be
* excluded when running tests.
* @param excludeList the exclude list to be used to identify the test cases to be
* excluded when running tests
* @see #getExcludeList
* @see #getExcludedTestCases
*/
void setExcludeList(ExcludeList excludeList) {
this.excludeList = excludeList;
}
/**
* Get the exclude list to be used to identify the test cases to be
* excluded when running tests.
* @return the exclude list to be used to identify the test cases to be
* excluded when running tests
* @see #getExcludedTestCases
*/
public ExcludeList getExcludeList() {
return excludeList;
}
/**
* Get the names of the test cases to be excluded when running a specific test.
* @param td the test for which the excluded test cases should be obtained
* @return the names of the test cases to be excluded when running a specific test.
* The result is null if the test is not found or is
* completely excluded without specifying test cases. This may be
* a mix of single TC strings or a comma separated list of them.
*/
public String[] getExcludedTestCases(TestDescription td) {
return excludeList.getTestCases(td);
}
/**
* Set the concurrency to be used when running the tests, if applicable.
* @param conc the concurrency to be used when running the tests, if applicable
* @see #getConcurrency
*/
void setConcurrency(int conc) {
concurrency = conc;
}
/**
* Get the concurrency to be used when running the tests, if applicable.
* @return the concurrency to be used when running the tests, if applicable
* @see #getConcurrency
*/
public int getConcurrency() {
return concurrency;
}
/**
* Set the notifier to be used when running the tests.
* @param notifier the notifier to be used when running the tests
* @see #notifyStartingTest
* @see #notifyFinishedTest
*/
void setNotifier(Harness.Observer notifier) {
this.notifier = notifier;
}
/**
* Delegate the notifier to be used when running the tests to the Script
* @param script the script to be used to execute the test
*/
void delegateNotifier(Script script) {
script.setNotifier(this.notifier);
}
/**
* Run the tests obtained from an iterator. The iterator returns
* TestDescription objects for the tests that have been selected to be run.
* The iterator supports the standard hasNext() and next() methods;
* it does not support remove(), which throws UnsupportedOperationException.
* Each test description gives the details of the test to be run.
* As each test is started, the implementation of this method must create
* a new TestResult object and call {@link #notifyStartingTest}.
* When the test completes (however it completes) the implementation of
* this method must call {@link #notifyFinishedTest}.
* @param testIter the iterator to be used to obtain the tests to be run
* @return true if and only if all the tests executed successfully and passed
* @throws InterruptedException if the test run was interrupted
*/
protected abstract boolean runTests(Iterator