blob: 315a0c7ed9f7315cb218931aff742f129e6a9d41 [file] [log] [blame]
/*
* Copyright 2009 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.junit;
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.junit.client.impl.JUnitHost.TestInfo;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* An interface that specifies how tests should be batched. A single batch
* should never include tests from more than one module, or the browser will
* load the new module and lose results from existing tests.
*/
public abstract class BatchingStrategy {
/**
* Returns an ordered list of all tests blocks that should be executed for the
* specified module. Each test block is an array of {@link TestInfo}.
*
* @param syntheticModuleName the name of the synthetic module
* @return an ordered list of test blocks to run
*/
public abstract List<TestInfo[]> getTestBlocks(String syntheticModuleName);
/**
* Check if this batching strategy only supports execution of a single test at
* a time.
*
* If this method returns true, test methods will be executed on the client as
* they are run by JUnit. If it returns false, test methods will be batched
* and sent to the clients in groups. If you are using a test runner that
* shards test methods across multiple clients, you should use a strategy that
* returns false (such as {@link NoBatchingStrategy}) or all tests will be
* executed on all clients.
*
* @return true if batches never contain more than one test
*/
public abstract boolean isSingleTestOnly();
/**
* Get the set of tests for this module, minus tests that should not be
* executed.
*
* @return the set of tests to execute
*/
protected final Set<TestInfo> getTestsForModule(String syntheticModuleName) {
Set<TestInfo> toExecute = GWTTestCase.getTestsForModule(syntheticModuleName).getTests();
Set<TestInfo> toRemove = new HashSet<TestInfo>();
for (TestInfo info : toExecute) {
if (JUnitShell.mustNotExecuteTest(info)) {
toRemove.add(info);
}
}
toExecute.removeAll(toRemove);
return toExecute;
}
/**
* Returns the multiplicative factor for adjusting the timeout. Default value
* of 1 for no batching.
*/
protected int getTimeoutMultiplier() {
return 1;
}
}