blob: ab751661c8da9edee536f3a83bd5c67de7530f69 [file] [log] [blame]
package com.intellij.execution.actions;
import com.intellij.execution.BaseConfigurationTestCase;
import com.intellij.execution.RunManagerEx;
import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.application.ApplicationConfiguration;
import com.intellij.execution.junit.*;
import com.intellij.execution.testframework.TestSearchScope;
import com.intellij.openapi.actionSystem.DataConstants;
import com.intellij.openapi.actionSystem.ex.DataConstantsEx;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtil;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiPackage;
import com.intellij.testFramework.MapDataContext;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
public class ContextConfigurationTest extends BaseConfigurationTestCase {
private static final String PACKAGE_NAME = "apackage";
private static final String SHORT_CLASS_NAME = "SampleClass";
private static final String CLASS_NAME = PACKAGE_NAME + "." + SHORT_CLASS_NAME;
private static final String METHOD_NAME = "test1";
@Override
protected void setUp() throws Exception {
super.setUp();
addModule("commonConfiguration");
}
public void testJUnitMethodTest() {
PsiClass psiClass = findClass(getModule1(), CLASS_NAME);
PsiMethod testMethod = psiClass.findMethodsByName(METHOD_NAME, false)[0];
JUnitConfiguration configuration = (JUnitConfiguration)createConfiguration(testMethod);
checkTestObject(JUnitConfiguration.TEST_METHOD, configuration);
checkClassName(CLASS_NAME, configuration);
checkMethodName(METHOD_NAME, configuration);
checkPackage(PACKAGE_NAME, configuration);
checkGeneretedName(configuration, SHORT_CLASS_NAME + "." + METHOD_NAME);
}
public void testJUnitClassTest() {
PsiClass psiClass = findClass(getModule1(), CLASS_NAME);
final MapDataContext dataContext = new MapDataContext();
JUnitConfiguration configuration = createJUnitConfiguration(psiClass, TestClassConfigurationProducer.class, dataContext);
checkTestObject(JUnitConfiguration.TEST_CLASS, configuration);
checkClassName(CLASS_NAME, configuration);
checkPackage(PACKAGE_NAME, configuration);
checkGeneretedName(configuration, SHORT_CLASS_NAME);
}
public void testRecreateJUnitClass() throws IOException {
createEmptyModule();
addDependency(getModule2(), getModule1());
PsiClass psiClass = findClass(getModule1(), CLASS_NAME);
PsiPackage psiPackage = JUnitUtil.getContainingPackage(psiClass);
JUnitConfiguration configuration = createJUnitConfiguration(psiPackage, AllInPackageConfigurationProducer.class, new MapDataContext());
configuration.getPersistentData().setScope(TestSearchScope.MODULE_WITH_DEPENDENCIES);
configuration.setModule(getModule2());
MapDataContext dataContext = new MapDataContext();
dataContext.put(DataConstantsEx.RUNTIME_CONFIGURATION, configuration);
configuration = createJUnitConfiguration(psiClass, TestClassConfigurationProducer.class, dataContext);
checkClassName(psiClass.getQualifiedName(), configuration);
assertEquals(Collections.singleton(getModule2()), new HashSet(Arrays.asList(configuration.getModules())));
}
public void testJUnitPackage() {
PsiClass psiClass = findClass(getModule1(), CLASS_NAME);
PsiPackage psiPackage = JUnitUtil.getContainingPackage(psiClass);
final MapDataContext dataContext = new MapDataContext();
final Module module = ModuleUtil.findModuleForPsiElement(psiClass);
dataContext.put(DataConstants.MODULE, module);
JUnitConfiguration configuration = createJUnitConfiguration(psiPackage, AllInPackageConfigurationProducer.class, dataContext);
checkTestObject(JUnitConfiguration.TEST_PACKAGE, configuration);
checkPackage(PACKAGE_NAME, configuration);
checkGeneretedName(configuration, PACKAGE_NAME + " in " + module.getName());
}
public void testJUnitDefaultPackage() {
PsiClass psiClass = findClass(getModule1(), CLASS_NAME);
PsiPackage psiPackage = JUnitUtil.getContainingPackage(psiClass);
PsiPackage defaultPackage = psiPackage.getParentPackage();
final Module module = ModuleUtil.findModuleForPsiElement(psiClass);
final MapDataContext dataContext = new MapDataContext();
dataContext.put(DataConstants.MODULE, module);
JUnitConfiguration configuration = createJUnitConfiguration(defaultPackage, AllInPackageConfigurationProducer.class, dataContext);
checkTestObject(JUnitConfiguration.TEST_PACKAGE, configuration);
checkPackage("", configuration);
checkGeneretedName(configuration, "All in " + module.getName());
}
public void testApplication() {
PsiClass psiClass = findClass(getModule1(), CLASS_NAME);
PsiMethod psiMethod = psiClass.findMethodsByName("main", false)[0];
ApplicationConfiguration configuration = createConfiguration(psiMethod);
assertEquals(CLASS_NAME, configuration.MAIN_CLASS_NAME);
assertEquals(configuration.suggestedName(), configuration.getName());
assertEquals(SHORT_CLASS_NAME, configuration.getName());
}
public void testReusingConfiguration() {
RunManagerEx runManager = RunManagerEx.getInstanceEx(myProject);
PsiClass psiClass = findClass(getModule1(), CLASS_NAME);
PsiPackage psiPackage = JUnitUtil.getContainingPackage(psiClass);
ConfigurationContext context = createContext(psiClass);
assertEquals(null, context.findExisting());
RunnerAndConfigurationSettings testClass = context.getConfiguration();
runManager.addConfiguration(testClass, false);
context = createContext(psiClass);
assertSame(testClass, context.findExisting());
runManager.setSelectedConfiguration(testClass);
context = createContext(psiPackage);
assertEquals(null, context.findExisting());
RunnerAndConfigurationSettings testPackage = context.getConfiguration();
runManager.addConfiguration(testPackage, false);
context = createContext(psiPackage);
assertSame(testPackage, context.findExisting());
assertSame(testClass, runManager.getSelectedConfiguration());
runManager.setSelectedConfiguration(context.findExisting());
assertSame(testPackage, runManager.getSelectedConfiguration());
}
public void testJUnitGeneratedName() {
PsiClass psiClass = findClass(getModule1(), CLASS_NAME);
PsiPackage psiPackage = JUnitUtil.getContainingPackage(psiClass);
JUnitConfiguration configuration = new JUnitConfiguration(null, myProject, JUnitConfigurationType.getInstance().getConfigurationFactories()[0]);
JUnitConfiguration.Data data = configuration.getPersistentData();
data.PACKAGE_NAME = psiPackage.getQualifiedName();
data.TEST_OBJECT = JUnitConfiguration.TEST_PACKAGE;
assertEquals(PACKAGE_NAME, configuration.suggestedName());
data.PACKAGE_NAME = "not.existing.pkg";
assertEquals("not.existing.pkg", configuration.suggestedName());
data.TEST_OBJECT = JUnitConfiguration.TEST_CLASS;
data.MAIN_CLASS_NAME = psiClass.getQualifiedName();
assertEquals(SHORT_CLASS_NAME, configuration.suggestedName());
data.MAIN_CLASS_NAME = "not.existing.TestClass";
assertEquals("TestClass", configuration.suggestedName());
data.MAIN_CLASS_NAME = "pkg.TestClass.";
assertEquals("pkg.TestClass.", configuration.suggestedName());
data.MAIN_CLASS_NAME = "TestClass";
assertEquals("TestClass", configuration.suggestedName());
data.TEST_OBJECT = JUnitConfiguration.TEST_METHOD;
data.MAIN_CLASS_NAME = psiClass.getQualifiedName();
data.METHOD_NAME = METHOD_NAME;
assertEquals(SHORT_CLASS_NAME + "." + METHOD_NAME, configuration.suggestedName());
data.MAIN_CLASS_NAME = "not.existing.TestClass";
assertEquals("TestClass." + METHOD_NAME, configuration.suggestedName());
}
private static void checkGeneretedName(JUnitConfiguration configuration, String name) {
assertEquals(configuration.suggestedName(), configuration.getName());
assertEquals(name, configuration.getName());
}
}