Fixes a bug in CompileStrategy where it would throw an IllegalArgumentException if tests are run out of module order. Patch by: jlabanca Review by: jgw git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@6157 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/junit/CompileStrategy.java b/user/src/com/google/gwt/junit/CompileStrategy.java index 5828d7f..7b36739 100644 --- a/user/src/com/google/gwt/junit/CompileStrategy.java +++ b/user/src/com/google/gwt/junit/CompileStrategy.java
@@ -20,6 +20,7 @@ import com.google.gwt.dev.cfg.ConfigurationProperty; import com.google.gwt.dev.cfg.ModuleDef; import com.google.gwt.dev.cfg.ModuleDefLoader; +import com.google.gwt.dev.util.collect.HashSet; import com.google.gwt.junit.JUnitShell.Strategy; import com.google.gwt.junit.client.GWTTestCase; import com.google.gwt.junit.client.GWTTestCase.TestModuleInfo; @@ -30,6 +31,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; /** * An interface that specifies how modules should be compiled. @@ -37,9 +39,10 @@ public abstract class CompileStrategy { /** - * The number of modules that have been compiled. + * The list of modules that have already been compiled. We use this to avoid + * adding test batches that have already been added. */ - private int compiledModuleCount; + private Set<String> compiledModuleNames = new HashSet<String>(); /** * Let the compile strategy compile another module. This is called while @@ -101,11 +104,14 @@ runStyle.maybeCompileModule(syntheticModuleName); - // Add all test blocks for the module. - compiledModuleCount++; - boolean isFinalModule = compiledModuleCount == GWTTestCase.getModuleCount(); - List<TestInfo[]> testBlocks = batchingStrategy.getTestBlocks(syntheticModuleName); - JUnitShell.getMessageQueue().addTestBlocks(testBlocks, isFinalModule); + // Add all test blocks for the module if we haven't seen this module before. + if (!compiledModuleNames.contains(syntheticModuleName)) { + compiledModuleNames.add(syntheticModuleName); + boolean isFinalModule = compiledModuleNames.size() == GWTTestCase.getModuleCount(); + List<TestInfo[]> testBlocks = batchingStrategy.getTestBlocks(syntheticModuleName); + JUnitShell.getMessageQueue().addTestBlocks(testBlocks, isFinalModule); + } + return moduleDef; } }
diff --git a/user/test/com/google/gwt/junit/JUnitTest.gwt.xml b/user/test/com/google/gwt/junit/JUnitTest.gwt.xml new file mode 100644 index 0000000..b9cd010 --- /dev/null +++ b/user/test/com/google/gwt/junit/JUnitTest.gwt.xml
@@ -0,0 +1,17 @@ +<!-- --> +<!-- 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 --> +<!-- 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. License for the specific language governing permissions and --> +<!-- limitations under the License. --> + +<module> + <inherits name="com.google.gwt.user.User"/> +</module>
diff --git a/user/test/com/google/gwt/junit/JUnitTest2.gwt.xml b/user/test/com/google/gwt/junit/JUnitTest2.gwt.xml new file mode 100644 index 0000000..b9cd010 --- /dev/null +++ b/user/test/com/google/gwt/junit/JUnitTest2.gwt.xml
@@ -0,0 +1,17 @@ +<!-- --> +<!-- 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 --> +<!-- 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. License for the specific language governing permissions and --> +<!-- limitations under the License. --> + +<module> + <inherits name="com.google.gwt.user.User"/> +</module>
diff --git a/user/test/com/google/gwt/junit/TestSuiteTest.java b/user/test/com/google/gwt/junit/TestSuiteTest.java new file mode 100644 index 0000000..89b6ba0 --- /dev/null +++ b/user/test/com/google/gwt/junit/TestSuiteTest.java
@@ -0,0 +1,40 @@ +/* + * 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.ModuleOneTest; +import com.google.gwt.junit.client.ModuleOneTest2; +import com.google.gwt.junit.client.ModuleTwoTest; + +import junit.framework.Test; +import junit.framework.TestSuite; + +/** + * Tests that a normal test suite will run even if modules are out of order. + */ +public class TestSuiteTest { + + public static Test suite() { + // This is intentionally not a GWTTestSuite. + TestSuite suite = new TestSuite(); + + suite.addTestSuite(ModuleOneTest.class); + suite.addTestSuite(ModuleTwoTest.class); + suite.addTestSuite(ModuleOneTest2.class); + + return suite; + } +}
diff --git a/user/test/com/google/gwt/junit/client/ModuleOneTest.java b/user/test/com/google/gwt/junit/client/ModuleOneTest.java new file mode 100644 index 0000000..1d1c5a7 --- /dev/null +++ b/user/test/com/google/gwt/junit/client/ModuleOneTest.java
@@ -0,0 +1,30 @@ +/* + * 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.client; + +/** + * A test in the first module. + */ +public class ModuleOneTest extends GWTTestCase { + @Override + public String getModuleName() { + return "com.google.gwt.junit.JUnitTest"; + } + + public void testTrue() { + assertTrue(true); + } +}
diff --git a/user/test/com/google/gwt/junit/client/ModuleOneTest2.java b/user/test/com/google/gwt/junit/client/ModuleOneTest2.java new file mode 100644 index 0000000..f0fc271 --- /dev/null +++ b/user/test/com/google/gwt/junit/client/ModuleOneTest2.java
@@ -0,0 +1,30 @@ +/* + * 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.client; + +/** + * Another test in the first module. + */ +public class ModuleOneTest2 extends GWTTestCase { + @Override + public String getModuleName() { + return "com.google.gwt.junit.JUnitTest"; + } + + public void testTrue() { + assertTrue(true); + } +}
diff --git a/user/test/com/google/gwt/junit/client/ModuleTwoTest.java b/user/test/com/google/gwt/junit/client/ModuleTwoTest.java new file mode 100644 index 0000000..0d983dc --- /dev/null +++ b/user/test/com/google/gwt/junit/client/ModuleTwoTest.java
@@ -0,0 +1,30 @@ +/* + * 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.client; + +/** + * A test in the second module. + */ +public class ModuleTwoTest extends GWTTestCase { + @Override + public String getModuleName() { + return "com.google.gwt.junit.JUnitTest2"; + } + + public void testTrue() { + assertTrue(true); + } +}