update test framework to ensure compiled before search for tests

This commit is contained in:
Anna.Kozlova
2017-08-08 17:42:39 +02:00
parent 39b70dc9ec
commit b846335cd0
15 changed files with 109 additions and 65 deletions
@@ -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<URL> 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 {
@@ -0,0 +1,2 @@
package org.junit;
public @interface Test {}
@@ -0,0 +1,4 @@
package org.junit.runner;
@interface RunWith {
Class<? extends Runner> value();
}
@@ -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<String> 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();
@@ -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 {