blob: b40ab4c3ef03d380c21909ef02b51ae1f094563f [file] [log] [blame]
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* 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.theoryinpractice.testng.model;
import com.intellij.execution.ExternalizablePath;
import com.intellij.execution.JavaExecutionUtil;
import com.intellij.execution.Location;
import com.intellij.execution.configurations.JavaRunConfigurationModule;
import com.intellij.execution.junit.JUnitUtil;
import com.intellij.execution.junit2.info.MethodLocation;
import com.intellij.execution.testframework.TestSearchScope;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import java.util.*;
/**
* @author Hani Suleiman Date: Jul 20, 2005 Time: 1:11:01 PM
*/
public class TestData implements Cloneable
{
public String SUITE_NAME;
public String PACKAGE_NAME;
public String MAIN_CLASS_NAME;
public String METHOD_NAME;
public String GROUP_NAME;
public String TEST_OBJECT;
public String VM_PARAMETERS;
public String PARAMETERS;
public String WORKING_DIRECTORY;
public String OUTPUT_DIRECTORY;
public String ANNOTATION_TYPE;
public String ENV_VARIABLES;
private Map<String, String> ENVS = new LinkedHashMap<String, String>();
public boolean PASS_PARENT_ENVS = true;
public TestSearchScope.Wrapper TEST_SEARCH_SCOPE;
public Map<String, String> TEST_PROPERTIES = new HashMap<String, String>();
public List<String> TEST_LISTENERS = new ArrayList<String>();
public boolean USE_DEFAULT_REPORTERS = false;
public String PROPERTIES_FILE;
private Set<String> myPatterns = new LinkedHashSet<String>();
public TestData() {
TEST_OBJECT = TestType.CLASS.getType();
TEST_SEARCH_SCOPE = new TestSearchScope.Wrapper();
}
public TestSearchScope getScope() {
return TEST_SEARCH_SCOPE.getScope();
}
public void setScope(TestSearchScope testseachscope) {
TEST_SEARCH_SCOPE.setScope(testseachscope);
}
public String getPackageName() {
return PACKAGE_NAME == null ? "" : PACKAGE_NAME;
}
public String getGroupName() {
return GROUP_NAME == null ? "" : GROUP_NAME;
}
public String getMethodName() {
return METHOD_NAME == null ? "" : METHOD_NAME;
}
public String getSuiteName() {
return SUITE_NAME == null ? "" : SUITE_NAME;
}
public String getPropertiesFile() {
return PROPERTIES_FILE == null ? "" : PROPERTIES_FILE;
}
public String getOutputDirectory() {
return OUTPUT_DIRECTORY == null ? "" : OUTPUT_DIRECTORY;
}
public void setVMParameters(String value) {
VM_PARAMETERS = value;
}
public String getVMParameters() {
return VM_PARAMETERS;
}
public void setProgramParameters(String value) {
PARAMETERS = value;
}
public String getProgramParameters() {
return PARAMETERS;
}
public void setWorkingDirectory(String value) {
WORKING_DIRECTORY = ExternalizablePath.urlValue(value);
}
public String getWorkingDirectory(Project project) {
return ExternalizablePath.localPathValue(WORKING_DIRECTORY);
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof TestData)) {
return false;
} else {
TestData data = (TestData) obj;
return Comparing.equal(TEST_OBJECT, data.TEST_OBJECT)
&& Comparing.equal(getMainClassName(), data.getMainClassName())
&& Comparing.equal(getPackageName(), data.getPackageName())
&& Comparing.equal(getSuiteName(), data.getSuiteName())
&& Comparing.equal(getMethodName(), data.getMethodName())
&& Comparing.equal(WORKING_DIRECTORY, data.WORKING_DIRECTORY)
&& Comparing.equal(OUTPUT_DIRECTORY, data.OUTPUT_DIRECTORY)
&& Comparing.equal(VM_PARAMETERS, data.VM_PARAMETERS)
&& Comparing.equal(PARAMETERS, data.PARAMETERS)
&& Comparing.equal(myPatterns, data.myPatterns)
&& USE_DEFAULT_REPORTERS == data.USE_DEFAULT_REPORTERS;
}
}
@Override
public int hashCode() {
return Comparing.hashcode(getMainClassName()) ^
Comparing.hashcode(getMethodName()) ^
Comparing.hashcode(getGroupName()) ^
Comparing.hashcode(getSuiteName()) ^
Comparing.hashcode(TEST_OBJECT) ^
Comparing.hashcode(WORKING_DIRECTORY) ^
Comparing.hashcode(OUTPUT_DIRECTORY) ^
Comparing.hashcode(VM_PARAMETERS) ^
Comparing.hashcode(PARAMETERS) ^
Comparing.hashcode(USE_DEFAULT_REPORTERS) ^
Comparing.hashcode(myPatterns);
}
@Override
public Object clone() throws CloneNotSupportedException {
TestData data = (TestData) super.clone();
data.TEST_SEARCH_SCOPE = new TestSearchScope.Wrapper();
data.TEST_PROPERTIES = new HashMap<String, String>();
data.TEST_PROPERTIES.putAll(TEST_PROPERTIES);
data.TEST_LISTENERS = new ArrayList<String>();
data.TEST_LISTENERS.addAll(TEST_LISTENERS);
data.USE_DEFAULT_REPORTERS = USE_DEFAULT_REPORTERS;
data.ENVS = new LinkedHashMap<String, String>(ENVS);
data.myPatterns = new HashSet<String>();
data.myPatterns.addAll(myPatterns);
data.setScope(getScope());
return data;
}
public String getGeneratedName(JavaRunConfigurationModule runconfigurationmodule) {
if (TestType.PACKAGE.getType().equals(TEST_OBJECT)) if (getPackageName().length() == 0) return "<default>";
else return getPackageName();
String name = JavaExecutionUtil.getPresentableClassName(getMainClassName());
if (TestType.METHOD.getType().equals(TEST_OBJECT)) {
return name + '.' + getMethodName();
}
else if (TestType.SUITE.getType().equals(TEST_OBJECT)) {
return getSuiteName();
}
else {
if (TestType.PATTERN.getType().equals(TEST_OBJECT)) {
final int size = myPatterns.size();
if (size == 0) return "Temp suite";
return StringUtil.getShortName(myPatterns.iterator().next()) + (size > 1 ? " and " + (size - 1) + " more" : "");
}
return name;
}
}
public String getMainClassName() {
return MAIN_CLASS_NAME == null ? "" : MAIN_CLASS_NAME;
}
public Module setTestMethod(Location<PsiMethod> location) {
final PsiMethod method = location.getPsiElement();
METHOD_NAME = method.getName();
TEST_OBJECT = TestType.METHOD.getType();
return setMainClass(location instanceof MethodLocation ? ((MethodLocation)location).getContainingClass() : method.getContainingClass());
}
public Module setPackage(PsiPackage pkg) {
PACKAGE_NAME = pkg.getQualifiedName();
return null;
}
public Module setMainClass(PsiClass psiclass) {
MAIN_CLASS_NAME = JavaExecutionUtil.getRuntimeQualifiedName(psiclass);
PsiPackage psipackage = JUnitUtil.getContainingPackage(psiclass);
PACKAGE_NAME = psipackage == null ? "" : psipackage.getQualifiedName();
return JavaExecutionUtil.findModule(psiclass);
}
public boolean isConfiguredByElement(PsiElement element) {
if (TEST_OBJECT.equals(TestType.PACKAGE.getType())) {
if (element instanceof PsiPackage) {
return Comparing.strEqual(PACKAGE_NAME, ((PsiPackage) element).getQualifiedName());
} else if (element instanceof PsiDirectory) {
final PsiPackage psiPackage = JavaDirectoryService.getInstance().getPackage(((PsiDirectory)element));
return psiPackage != null && Comparing.strEqual(PACKAGE_NAME, psiPackage.getQualifiedName());
}
}
element = PsiTreeUtil.getParentOfType(element, PsiModifierListOwner.class, false);
if (element instanceof PsiMethod && TEST_OBJECT.equals(TestType.METHOD.getType())) {
final PsiClass aClass = ((PsiMethod) element).getContainingClass();
return aClass != null &&
Comparing.strEqual(MAIN_CLASS_NAME, JavaExecutionUtil.getRuntimeQualifiedName(aClass)) &&
Comparing.strEqual(METHOD_NAME, ((PsiMethod) element).getName());
} else if (element instanceof PsiClass && TEST_OBJECT.equals(TestType.CLASS.getType())) {
return Comparing.strEqual(MAIN_CLASS_NAME, JavaExecutionUtil.getRuntimeQualifiedName((PsiClass) element));
}
return false;
}
public Map<String, String> getEnvs() {
return ENVS;
}
public void setEnvs(final Map<String, String> envs) {
ENVS = envs;
}
public Set<String> getPatterns() {
return myPatterns;
}
public void setPatterns(Set<String> set) {
myPatterns = set;
}
}