blob: dbf71707f3453581523987fa7c9ec62b66b81fe8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* David Saff (saff@mit.edu) - initial API and implementation
* (bug 102632: [JUnit] Support for JUnit 4.)
*******************************************************************************/
package org.eclipse.jdt.internal.junit.launcher;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
public class JUnitLaunchDescription {
static final String[] ATTRIBUTES_THAT_MUST_MATCH = new String[] {
IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME,
JUnitBaseLaunchConfiguration.LAUNCH_CONTAINER_ATTR,
IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME,
JUnitBaseLaunchConfiguration.TESTNAME_ATTR
};
static final String EMPTY= ""; //$NON-NLS-1$
private static final String DEFAULT_VALUE= ""; //$NON-NLS-1$
private Map fAttributes= new HashMap();
private final IJavaElement fElement;
private final String fName;
public JUnitLaunchDescription(IJavaElement element, String name) {
fElement= element;
fName= name;
setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, getProjectName());
}
public void copyAttributesInto(ILaunchConfigurationWorkingCopy wc) {
wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, getProjectName());
wc.setAttribute(JUnitBaseLaunchConfiguration.ATTR_KEEPRUNNING, false);
Set definedAttributes= getDefinedAttributes();
for (Iterator iter= definedAttributes.iterator(); iter.hasNext();) {
Entry attribute= (Entry) iter.next();
wc.setAttribute((String) attribute.getKey(), (String) attribute.getValue());
}
}
public boolean equals(Object arg0) {
JUnitLaunchDescription desc = (JUnitLaunchDescription) arg0;
return areEqual(desc.fElement, fElement) && areEqual(desc.fName, fName)
&& areEqual(desc.fAttributes, fAttributes);
}
public String getAttribute(String attr) {
if (fAttributes.containsKey(attr))
return (String) fAttributes.get(attr);
return DEFAULT_VALUE;
}
public String getContainer() {
return getAttribute(JUnitBaseLaunchConfiguration.LAUNCH_CONTAINER_ATTR);
}
public Set getDefinedAttributes() {
return fAttributes.entrySet();
}
public IJavaElement getElement() {
return fElement;
}
public String getName() {
return fName;
}
public JUnitLaunchDescription setContainer(String handleIdentifier) {
return setAttribute(JUnitBaseLaunchConfiguration.LAUNCH_CONTAINER_ATTR, handleIdentifier);
}
public JUnitLaunchDescription setMainType(String mainType) {
return setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, mainType);
}
public JUnitLaunchDescription setTestKind(String testKindId) {
return setAttribute(JUnitBaseLaunchConfiguration.TEST_KIND_ATTR, testKindId);
}
public JUnitLaunchDescription setTestName(String testName) {
return setAttribute(JUnitBaseLaunchConfiguration.TESTNAME_ATTR, testName);
}
public String toString() {
return "JUnitLaunchDescription(" + fName + ")"; //$NON-NLS-1$//$NON-NLS-2$
}
protected String getProjectName() {
IJavaProject project = getProject();
return project == null ? null : project.getElementName();
}
boolean attributesMatch(ILaunchConfiguration config) throws CoreException {
for (int i = 0; i < ATTRIBUTES_THAT_MUST_MATCH.length; i++) {
if (! configurationMatches(ATTRIBUTES_THAT_MUST_MATCH[i], config)) {
return false;
}
}
return true;
}
boolean configurationMatches(final String attributeName, ILaunchConfiguration config) throws CoreException {
return config.getAttribute(attributeName, EMPTY).equals(getAttribute(attributeName));
}
void setMainType(IType type) {
setMainType(JavaModelUtil.getFullyQualifiedName(type));
}
private boolean areEqual(Object thing, Object otherThing) {
if (thing == null)
return otherThing == null;
return thing.equals(otherThing);
}
public IJavaProject getProject() {
return fElement == null ? null : fElement.getJavaProject();
}
private JUnitLaunchDescription setAttribute(String attr, String value) {
fAttributes.put(attr, value);
return this;
}
}