blob: 18e1a4c7f6079c6706877c628a59764bfdfdee00 [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.GWTTestCase.TestModuleInfo;
import com.google.gwt.junit.client.impl.JUnitHost.TestInfo;
import junit.framework.TestCase;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
* Tests of {@link BatchingStrategy}. This test must run after a
* {@link GWTTestCase} to ensure that JUnitShell is already initialized.
*/
public class BatchingStrategyTest extends TestCase {
private static class TestClass0 {
public void testMethod0() {
}
public void testMethod1() {
}
}
private static class TestClass1 {
public void testMethod2() {
}
public void testMethod3() {
}
public void testMethod4() {
}
}
private static class TestClass2 {
public void testMethod5() {
}
}
/**
* The synthetic name of the module used for this test.
*/
private static final String FAKE_MODULE_SYNTHETIC_NAME = "FakeModuleName.Fake";
/**
* The fake key in {@link GWTTestCase#ALL_GWT_TESTS}.
*/
private static TestModuleInfo fakeModuleInfo;
private static final TestInfo TEST_INFO_0_0 = new TestInfo(
FAKE_MODULE_SYNTHETIC_NAME, TestClass0.class.getName(), "testMethod0");
private static final TestInfo TEST_INFO_0_1 = new TestInfo(
FAKE_MODULE_SYNTHETIC_NAME, TestClass0.class.getName(), "testMethod1");
private static final TestInfo TEST_INFO_1_2 = new TestInfo(
FAKE_MODULE_SYNTHETIC_NAME, TestClass1.class.getName(), "testMethod2");
private static final TestInfo TEST_INFO_1_3 = new TestInfo(
FAKE_MODULE_SYNTHETIC_NAME, TestClass1.class.getName(), "testMethod3");
private static final TestInfo TEST_INFO_1_4 = new TestInfo(
FAKE_MODULE_SYNTHETIC_NAME, TestClass1.class.getName(), "testMethod4");
private static final TestInfo TEST_INFO_2_5 = new TestInfo(
FAKE_MODULE_SYNTHETIC_NAME, TestClass2.class.getName(), "testMethod5");
public void testClassBatchingStrategy() {
BatchingStrategy strategy = new ClassBatchingStrategy();
assertFalse(strategy.isSingleTestOnly());
List<TestInfo[]> testBlocks = new ArrayList<TestInfo[]>();
testBlocks.add(new TestInfo[] {TEST_INFO_0_0, TEST_INFO_0_1});
testBlocks.add(new TestInfo[] {TEST_INFO_1_2, TEST_INFO_1_3, TEST_INFO_1_4});
testBlocks.add(new TestInfo[] {TEST_INFO_2_5});
testBatchingStrategy(strategy, testBlocks);
}
public void testModuleBatchingStrategy() {
BatchingStrategy strategy = new ModuleBatchingStrategy();
assertFalse(strategy.isSingleTestOnly());
List<TestInfo[]> testBlocks = new ArrayList<TestInfo[]>();
testBlocks.add(new TestInfo[] {
TEST_INFO_0_0, TEST_INFO_0_1, TEST_INFO_1_2, TEST_INFO_1_3,
TEST_INFO_1_4, TEST_INFO_2_5});
testBatchingStrategy(strategy, testBlocks);
}
public void testNoBatchingStrategy() {
BatchingStrategy strategy = new NoBatchingStrategy();
assertTrue(strategy.isSingleTestOnly());
List<TestInfo[]> testBlocks = new ArrayList<TestInfo[]>();
testBlocks.add(new TestInfo[] {TEST_INFO_0_0});
testBlocks.add(new TestInfo[] {TEST_INFO_0_1});
testBlocks.add(new TestInfo[] {TEST_INFO_1_2});
testBlocks.add(new TestInfo[] {TEST_INFO_1_3});
testBlocks.add(new TestInfo[] {TEST_INFO_1_4});
testBlocks.add(new TestInfo[] {TEST_INFO_2_5});
testBatchingStrategy(strategy, testBlocks);
}
/**
* Add a fake entry to {@link GWTTestCase#ALL_GWT_TESTS} for testing.
*/
private void populateAllGwtTests() {
if (fakeModuleInfo == null) {
fakeModuleInfo = new TestModuleInfo("FakeModuleName",
FAKE_MODULE_SYNTHETIC_NAME, null);
Set<TestInfo> tests = fakeModuleInfo.getTests();
tests.add(TEST_INFO_0_0);
tests.add(TEST_INFO_0_1);
tests.add(TEST_INFO_1_2);
tests.add(TEST_INFO_1_3);
tests.add(TEST_INFO_1_4);
tests.add(TEST_INFO_2_5);
}
GWTTestCase.ALL_GWT_TESTS.put(fakeModuleInfo.getSyntheticModuleName(),
fakeModuleInfo);
}
/**
* Remove the fake entry in {@link GWTTestCase#ALL_GWT_TESTS} for testing.
*/
private void depopulateAllGwtTests() {
GWTTestCase.ALL_GWT_TESTS.remove(FAKE_MODULE_SYNTHETIC_NAME);
}
private void testBatchingStrategy(BatchingStrategy strategy,
List<TestInfo[]> expectedBlocks) {
try {
populateAllGwtTests();
List<TestInfo[]> actualBlocks = strategy.getTestBlocks(FAKE_MODULE_SYNTHETIC_NAME);
assertEquals(expectedBlocks.size(), actualBlocks.size());
for (int i = 0; i < expectedBlocks.size(); i++) {
TestInfo[] expectedBlock = expectedBlocks.get(i);
TestInfo[] actualBlock = actualBlocks.get(i);
assertEquals(expectedBlock.length, actualBlock.length);
for (int j = 0; j < expectedBlock.length; j++) {
assertEquals(expectedBlock[j], actualBlock[j]);
}
}
} finally {
depopulateAllGwtTests();
}
}
}