From b846335cd0d175dbfc2245237063b4157dc4f1a4 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Tue, 8 Aug 2017 16:22:26 +0200 Subject: [PATCH] update test framework to ensure compiled before search for tests --- .../execution/TestClassCollector.java | 3 +- .../mock JUnit/org/junit/Test.class | Bin 0 -> 636 bytes .../mock JUnit/org/junit/Test.java | 2 + .../mock JUnit/org/junit/runner/RunWith.class | Bin 0 -> 521 bytes .../mock JUnit/org/junit/runner/RunWith.java | 4 + .../configurations/outputs/general 1/keep.dir | 0 .../configurations/outputs/general 2/keep.dir | 0 .../configurations/outputs/general 3/keep.dir | 0 .../configurations/outputs/general 4/keep.dir | 0 .../configurations/outputs/tests1/keep.dir | 0 .../configurations/outputs/tests2/keep.dir | 0 .../configurations/outputs/tests3/keep.dir | 0 .../configurations/outputs/tests4/keep.dir | 0 .../java/execution/ConfigurationsTest.java | 35 ++++- .../execution/junit/JUnitClasspathTest.java | 130 ++++++++++-------- 15 files changed, 109 insertions(+), 65 deletions(-) create mode 100644 java/java-tests/testData/junit/configurations/mock JUnit/org/junit/Test.class create mode 100644 java/java-tests/testData/junit/configurations/mock JUnit/org/junit/Test.java create mode 100644 java/java-tests/testData/junit/configurations/mock JUnit/org/junit/runner/RunWith.class create mode 100644 java/java-tests/testData/junit/configurations/mock JUnit/org/junit/runner/RunWith.java delete mode 100644 java/java-tests/testData/junit/configurations/outputs/general 1/keep.dir delete mode 100644 java/java-tests/testData/junit/configurations/outputs/general 2/keep.dir delete mode 100644 java/java-tests/testData/junit/configurations/outputs/general 3/keep.dir delete mode 100644 java/java-tests/testData/junit/configurations/outputs/general 4/keep.dir delete mode 100644 java/java-tests/testData/junit/configurations/outputs/tests1/keep.dir delete mode 100644 java/java-tests/testData/junit/configurations/outputs/tests2/keep.dir delete mode 100644 java/java-tests/testData/junit/configurations/outputs/tests3/keep.dir delete mode 100644 java/java-tests/testData/junit/configurations/outputs/tests4/keep.dir diff --git a/java/execution/impl/src/com/intellij/execution/TestClassCollector.java b/java/execution/impl/src/com/intellij/execution/TestClassCollector.java index 9183274a70d8..b00de4d4ea11 100644 --- a/java/execution/impl/src/com/intellij/execution/TestClassCollector.java +++ b/java/execution/impl/src/com/intellij/execution/TestClassCollector.java @@ -15,6 +15,7 @@ */ package com.intellij.execution; +import com.intellij.execution.testframework.TestSearchScope; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; import com.intellij.openapi.roots.CompilerModuleExtension; @@ -50,7 +51,7 @@ public class TestClassCollector { Module module = configuration.getConfigurationModule().getModule(); List urls = new ArrayList<>(); - PathsList pathsList = (module == null ? OrderEnumerator.orderEntries(configuration.getProject()) : OrderEnumerator.orderEntries(module)) + PathsList pathsList = (module == null || configuration.getTestSearchScope() == TestSearchScope.WHOLE_PROJECT ? OrderEnumerator.orderEntries(configuration.getProject()) : OrderEnumerator.orderEntries(module)) .runtimeOnly().recursively().getPathsList(); //include jdk to avoid NoClassDefFoundError for classes inside tools.jar for (VirtualFile file : pathsList.getVirtualFiles()) { try { diff --git a/java/java-tests/testData/junit/configurations/mock JUnit/org/junit/Test.class b/java/java-tests/testData/junit/configurations/mock JUnit/org/junit/Test.class new file mode 100644 index 0000000000000000000000000000000000000000..71231974b8c96e5011563ac3965653b9d8922910 GIT binary patch literal 636 zcmah`T`vPc6g{IKt5x5MqKHVNk=S^yNQ8r%_jJvz=*nXVJgr!4L4G#NB<+ ziY7Lh?94sqo^wAwzurFp9AeADx`ho3MGKn($%a-WkgF+0{;4N}fC7O@dh1i$(4)ZO zUiq>sU!?6x)v;qnMPU9!DQ%>2wK}6G8G1$_f2sYB-3^s%Y=;7~8%Z-a({ejXn$TyT z{l98Q`y=|!v#(#}gGZHP&a{l%BOS7KVy|3JasBZpkZtMEZ_~N!v1TSRJBVr&C^SPA zCEdA!%PPYvxvA|DANfhf$q$D6P z!6(79oJevDnB;ecUx_xdn2N&4F))o8ro})Vv&^55p#?1Rf1OE74Ce{USix#^y@wza Pu!b}fvK&eBNg?wMl$58< literal 0 HcmV?d00001 diff --git a/java/java-tests/testData/junit/configurations/mock JUnit/org/junit/Test.java b/java/java-tests/testData/junit/configurations/mock JUnit/org/junit/Test.java new file mode 100644 index 000000000000..66c78b4fe66d --- /dev/null +++ b/java/java-tests/testData/junit/configurations/mock JUnit/org/junit/Test.java @@ -0,0 +1,2 @@ +package org.junit; +public @interface Test {} \ No newline at end of file diff --git a/java/java-tests/testData/junit/configurations/mock JUnit/org/junit/runner/RunWith.class b/java/java-tests/testData/junit/configurations/mock JUnit/org/junit/runner/RunWith.class new file mode 100644 index 0000000000000000000000000000000000000000..e059434a16393d9c8f63de7c75fb315dd7cbf57b GIT binary patch literal 521 zcmah`(Mm!=5It+!O|!BrsE06mkV0tb*$5&G1S`>75k0LoTvyh;v3IZFul3Le^ik31 zLkbx^470Q6oSE6PpI`4E0M4-&U?)I1z^*`UtV~J*<&)FaP>q!|%0}|qs3fTiN^)qg1M*y#R*i9zS#E^OX51P+%=Lggaz%sgI> zHw=wD_waQfn0ms_xlt+Pcg<0#2W(h@XU~_tWfgo(5gl*s(y#$q7 literal 0 HcmV?d00001 diff --git a/java/java-tests/testData/junit/configurations/mock JUnit/org/junit/runner/RunWith.java b/java/java-tests/testData/junit/configurations/mock JUnit/org/junit/runner/RunWith.java new file mode 100644 index 000000000000..b4b9e9978904 --- /dev/null +++ b/java/java-tests/testData/junit/configurations/mock JUnit/org/junit/runner/RunWith.java @@ -0,0 +1,4 @@ +package org.junit.runner; +@interface RunWith { + Class value(); +} diff --git a/java/java-tests/testData/junit/configurations/outputs/general 1/keep.dir b/java/java-tests/testData/junit/configurations/outputs/general 1/keep.dir deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/java/java-tests/testData/junit/configurations/outputs/general 2/keep.dir b/java/java-tests/testData/junit/configurations/outputs/general 2/keep.dir deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/java/java-tests/testData/junit/configurations/outputs/general 3/keep.dir b/java/java-tests/testData/junit/configurations/outputs/general 3/keep.dir deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/java/java-tests/testData/junit/configurations/outputs/general 4/keep.dir b/java/java-tests/testData/junit/configurations/outputs/general 4/keep.dir deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/java/java-tests/testData/junit/configurations/outputs/tests1/keep.dir b/java/java-tests/testData/junit/configurations/outputs/tests1/keep.dir deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/java/java-tests/testData/junit/configurations/outputs/tests2/keep.dir b/java/java-tests/testData/junit/configurations/outputs/tests2/keep.dir deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/java/java-tests/testData/junit/configurations/outputs/tests3/keep.dir b/java/java-tests/testData/junit/configurations/outputs/tests3/keep.dir deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/java/java-tests/testData/junit/configurations/outputs/tests4/keep.dir b/java/java-tests/testData/junit/configurations/outputs/tests4/keep.dir deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/java/java-tests/testSrc/com/intellij/java/execution/ConfigurationsTest.java b/java/java-tests/testSrc/com/intellij/java/execution/ConfigurationsTest.java index 36b6f5f85781..801f15f94e3b 100644 --- a/java/java-tests/testSrc/com/intellij/java/execution/ConfigurationsTest.java +++ b/java/java-tests/testSrc/com/intellij/java/execution/ConfigurationsTest.java @@ -33,14 +33,17 @@ import com.intellij.execution.runners.ExecutionEnvironmentBuilder; import com.intellij.execution.testframework.SearchForTestsTask; import com.intellij.execution.testframework.TestSearchScope; import com.intellij.execution.ui.CommonJavaParametersPanel; +import com.intellij.openapi.Disposable; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.roots.*; import com.intellij.openapi.ui.LabeledComponent; import com.intellij.openapi.util.Disposer; +import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.LocalFileSystem; @@ -49,6 +52,7 @@ import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.rt.ant.execution.SegmentedOutputStream; import com.intellij.rt.execution.junit.JUnitStarter; +import com.intellij.testFramework.CompilerTester; import com.intellij.testFramework.MapDataContext; import com.intellij.testFramework.PlatformTestUtil; import com.intellij.testFramework.PsiTestUtil; @@ -61,10 +65,7 @@ import junit.framework.TestCase; import org.jdom.Element; import java.io.*; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.StringTokenizer; +import java.util.*; import static org.assertj.core.api.Assertions.assertThat; @@ -182,7 +183,7 @@ public class ConfigurationsTest extends BaseConfigurationTestCase { List lines = extractAllInPackageTests(parameters, psiPackage); Assertion.compareUnordered( //category, filters, classNames... - new Object[]{"", "", psiClass.getQualifiedName(), psiClass2.getQualifiedName(), derivedTest.getQualifiedName(), RT_INNER_TEST_NAME, + new Object[]{"", "", psiClass.getQualifiedName(), derivedTest.getQualifiedName(), RT_INNER_TEST_NAME, testB.getQualifiedName()}, lines); } @@ -446,7 +447,7 @@ public class ConfigurationsTest extends BaseConfigurationTestCase { return PathUtil.getLocalPath(output); } - private static String[] addOutputs(Module module, int index) { + private String[] addOutputs(Module module, int index) { String[] outputs = new String[2]; String prefix = "outputs" + File.separatorChar; VirtualFile generalOutput = findFile(prefix + "general " + index); @@ -455,6 +456,13 @@ public class ConfigurationsTest extends BaseConfigurationTestCase { outputs[1] = testOutput.getPresentableUrl(); PsiTestUtil.setCompilerOutputPath(module, generalOutput.getUrl(), false); PsiTestUtil.setCompilerOutputPath(module, testOutput.getUrl(), true); + Disposer.register(getTestRootDisposable(), new Disposable() { + @Override + public void dispose() { + FileUtil.delete(new File(outputs[0])); + FileUtil.delete(new File(outputs[1])); + } + }); return outputs; } @@ -468,7 +476,20 @@ public class ConfigurationsTest extends BaseConfigurationTestCase { final JavaParameters parameters = ((TestPackage)state).getJavaParameters(); final SearchForTestsTask task = ((TestPackage)state).createSearchingForTestsTask(); assertNotNull(task); - task.startSearch(); + Project project = configuration.getProject(); + try { + CompilerTester tester = new CompilerTester(project, Arrays.asList(ModuleManager.getInstance(project).getModules())); + try { + tester.rebuild(); + task.startSearch(); + } + finally { + tester.tearDown(); + } + } + catch (Exception e) { + fail(e.getMessage()); + } } try { configuration.checkConfiguration(); diff --git a/plugins/junit/test/com/intellij/execution/junit/JUnitClasspathTest.java b/plugins/junit/test/com/intellij/execution/junit/JUnitClasspathTest.java index b5b753d70492..1f827ed49d85 100644 --- a/plugins/junit/test/com/intellij/execution/junit/JUnitClasspathTest.java +++ b/plugins/junit/test/com/intellij/execution/junit/JUnitClasspathTest.java @@ -21,10 +21,12 @@ import com.intellij.execution.runners.ExecutionEnvironmentBuilder; import com.intellij.execution.testframework.TestSearchScope; import com.intellij.openapi.module.JavaModuleType; import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.testFramework.CompilerTester; import com.intellij.testFramework.IdeaTestUtil; import com.intellij.testFramework.PsiTestUtil; import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase; @@ -33,76 +35,90 @@ import junit.framework.TestCase; import java.io.File; import java.io.IOException; +import java.util.Arrays; public class JUnitClasspathTest extends JavaCodeInsightFixtureTestCase { public void testWorkingDirsFileWhenConfigurationSpansToMultipleModules() throws Exception { final Module mod1 = setupModule("mod1", "T1"); final Module mod2 = setupModule("mod2", "T2"); + CompilerTester compiler = new CompilerTester(myFixture.getProject(), Arrays.asList(ModuleManager.getInstance(myFixture.getProject()).getModules())); + compiler.rebuild(); + try { + final JUnitConfiguration configuration = + new JUnitConfiguration("p", getProject(), JUnitConfigurationType.getInstance().getConfigurationFactories()[0]); + configuration.setWorkingDirectory("$MODULE_DIR$"); + final JUnitConfiguration.Data persistentData = configuration.getPersistentData(); + persistentData.setScope(TestSearchScope.SINGLE_MODULE); + configuration.setModule(mod1); + persistentData.PACKAGE_NAME = "p"; + persistentData.TEST_OBJECT = JUnitConfiguration.TEST_PACKAGE; - final JUnitConfiguration configuration = - new JUnitConfiguration("p", getProject(), JUnitConfigurationType.getInstance().getConfigurationFactories()[0]); - configuration.setWorkingDirectory("$MODULE_DIR$"); - final JUnitConfiguration.Data persistentData = configuration.getPersistentData(); - persistentData.setScope(TestSearchScope.SINGLE_MODULE); - configuration.setModule(mod1); - persistentData.PACKAGE_NAME = "p"; - persistentData.TEST_OBJECT = JUnitConfiguration.TEST_PACKAGE; + final ExecutionEnvironment environment = + ExecutionEnvironmentBuilder.create(DefaultRunExecutor.getRunExecutorInstance(), configuration).build(); + final TestPackage aPackage = new TestPackage(configuration, environment) { + @Override + protected boolean createTempFiles() { + return true; + } + }; - final ExecutionEnvironment environment = - ExecutionEnvironmentBuilder.create(DefaultRunExecutor.getRunExecutorInstance(), configuration).build(); - final TestPackage aPackage = new TestPackage(configuration, environment) { - @Override - protected boolean createTempFiles() { - return true; - } - }; + //ensure no fork if single module is selected + aPackage.createSearchingForTestsTask().startSearch(); + File workingDirsFile = aPackage.getWorkingDirsFile(); + assertNotNull(workingDirsFile); + assertEmpty(FileUtil.loadFile(workingDirsFile)); - //ensure no fork if single module is selected - aPackage.createSearchingForTestsTask().startSearch(); - File workingDirsFile = aPackage.getWorkingDirsFile(); - assertNotNull(workingDirsFile); - assertEmpty(FileUtil.loadFile(workingDirsFile)); - - //ensure fork when whole project is used - persistentData.setScope(TestSearchScope.WHOLE_PROJECT); - aPackage.createSearchingForTestsTask().startSearch(); - workingDirsFile = aPackage.getWorkingDirsFile(); - assertNotNull(workingDirsFile); - String file; - aPackage.createSearchingForTestsTask().startSearch(); - workingDirsFile = aPackage.getWorkingDirsFile(); - assertNotNull(workingDirsFile); - file = preparePathsForComparison(FileUtil.loadFile(workingDirsFile), mod1, mod2); - assertEquals("p\n" + - "MODULE_1\n" + - "mod1\n" + - "CLASSPATH\n" + - "1\n" + - "p.T1\n" + - "MODULE_2\n" + - "mod2\n" + - "CLASSPATH\n" + - "1\n" + - "p.T2", file); + //ensure fork when whole project is used + persistentData.setScope(TestSearchScope.WHOLE_PROJECT); + aPackage.createSearchingForTestsTask().startSearch(); + workingDirsFile = aPackage.getWorkingDirsFile(); + assertNotNull(workingDirsFile); + String file; + aPackage.createSearchingForTestsTask().startSearch(); + workingDirsFile = aPackage.getWorkingDirsFile(); + assertNotNull(workingDirsFile); + file = preparePathsForComparison(FileUtil.loadFile(workingDirsFile), mod1, mod2); + assertEquals("p\n" + + "MODULE_1\n" + + "mod1\n" + + "CLASSPATH\n" + + "1\n" + + "p.T1\n" + + "MODULE_2\n" + + "mod2\n" + + "CLASSPATH\n" + + "1\n" + + "p.T2", file); + } + finally { + compiler.tearDown(); + } } public void testNoWorkingDirsFileWhenOnlyOneModuleExist() throws Exception { setupModule("mod1", "T1"); - final JUnitConfiguration configuration = - new JUnitConfiguration("p", getProject(), JUnitConfigurationType.getInstance().getConfigurationFactories()[0]); - configuration.setWorkingDirectory("$MODULE_DIR$"); - final JUnitConfiguration.Data persistentData = configuration.getPersistentData(); - persistentData.setScope(TestSearchScope.WHOLE_PROJECT); - persistentData.PACKAGE_NAME = "p"; - persistentData.TEST_OBJECT = JUnitConfiguration.TEST_PACKAGE; - final ExecutionEnvironment environment = - ExecutionEnvironmentBuilder.create(DefaultRunExecutor.getRunExecutorInstance(), configuration).build(); - final TestPackage aPackage = new TestPackage(configuration, environment); - aPackage.createSearchingForTestsTask().startSearch(); - final File workingDirsFile = aPackage.getWorkingDirsFile(); - assertNotNull(workingDirsFile); - assertEmpty(FileUtil.loadFile(workingDirsFile)); + CompilerTester compiler = new CompilerTester(getProject(), Arrays.asList(ModuleManager.getInstance(getProject()).getModules())); + compiler.rebuild(); + try { + final JUnitConfiguration configuration = + new JUnitConfiguration("p", getProject(), JUnitConfigurationType.getInstance().getConfigurationFactories()[0]); + configuration.setWorkingDirectory("$MODULE_DIR$"); + final JUnitConfiguration.Data persistentData = configuration.getPersistentData(); + persistentData.setScope(TestSearchScope.WHOLE_PROJECT); + persistentData.PACKAGE_NAME = "p"; + persistentData.TEST_OBJECT = JUnitConfiguration.TEST_PACKAGE; + final ExecutionEnvironment environment = + ExecutionEnvironmentBuilder.create(DefaultRunExecutor.getRunExecutorInstance(), configuration).build(); + final TestPackage aPackage = new TestPackage(configuration, environment); + aPackage.createSearchingForTestsTask().startSearch(); + final File workingDirsFile = aPackage.getWorkingDirsFile(); + assertNotNull(workingDirsFile); + assertEmpty(FileUtil.loadFile(workingDirsFile)); + } + finally { + compiler.tearDown(); + } } private Module setupModule(String moduleName, final String className) throws IOException {