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