| /* | |
| * 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; | |
| } | |
| } |