blob: d69743f77290a2b840897120a4f25d3e2ddfdc08 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 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:
* John Kaplan (johnkaplantech@gmail.com) - initial API and implementation
* (report 45408: Enable assertions during unit tests [JUnit])
*******************************************************************************/
package org.eclipse.jdt.internal.junit.launcher;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
import org.eclipse.jdt.internal.junit.ui.JUnitPreferencesConstants;
/**
* Utilities to manipulate virtual machine arguments to enable assertions
* according to user preferences.
*/
public class AssertionVMArg {
private static final String LONG_VM_ARG_TEXT = "-enableassertions"; //$NON-NLS-1$
private static final String SHORT_VM_ARG_TEXT = "-ea"; //$NON-NLS-1$
public static final int ASSERT_ARG_NOT_FOUND = -1;
/**
* Sets default VM args in launch configuration to enable assertions if
* user preference indicates such, or blank if not.
*
* @param config the launch configuration to default
*/
public static void setArgDefault(ILaunchConfigurationWorkingCopy config) {
String argText= getEnableAssertionsPreference() ? SHORT_VM_ARG_TEXT : ""; //$NON-NLS-1$
config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, argText);
}
public static String enableAssertInArgString(String currentArgs) {
String[] argArray= DebugPlugin.parseArguments(currentArgs);
boolean assertAlreadyEnabled= (findAssertEnabledArg(argArray) != ASSERT_ARG_NOT_FOUND);
String result= currentArgs;
// logic here is: if assertion is already enabled, take no action
// if assertion is not already enabled, enable based on user preference
if (!assertAlreadyEnabled && getEnableAssertionsPreference()) {
result= setAssertInArgString(currentArgs);
}
return result;
}
public static int findAssertEnabledArg(String[] argArray) {
int assertArgIndex= ASSERT_ARG_NOT_FOUND;
for (int i= 0; i < argArray.length; ++i) {
String arg= argArray[i].toLowerCase();
if (arg.startsWith(SHORT_VM_ARG_TEXT) || arg.startsWith(LONG_VM_ARG_TEXT)) {
assertArgIndex= i;
break;
}
}
return assertArgIndex;
}
public static String setAssertInArgString(String currentArgs) {
// add argument to end (with separating space)
// ..if there are VM arguments already,
// ..otherwise, default args to single enabling arg
return (currentArgs.length() == 0)
? SHORT_VM_ARG_TEXT
: currentArgs + " " + SHORT_VM_ARG_TEXT; //$NON-NLS-1$
}
public static boolean getEnableAssertionsPreference() {
IPreferenceStore store= JUnitPlugin.getDefault().getPreferenceStore();
return store.getBoolean(JUnitPreferencesConstants.ENABLE_ASSERTIONS);
}
public static void setEnableAssertionsPreference(boolean preference) {
IPreferenceStore store= JUnitPlugin.getDefault().getPreferenceStore();
store.setValue(JUnitPreferencesConstants.ENABLE_ASSERTIONS, preference);
}
/* not needed unless you're manipulating already entered configurations
public static String removeAssertFromArgString(String currentArgs, String assertArg)
{
currentArgs.indexOf(assertArg);
}
public static void syncAssertionVMArgInConfigs()
{
ILaunchManager lm= DebugPlugin.getDefault().getLaunchManager();
ILaunchConfigurationType configType= lm.getLaunchConfigurationType(JUnitLaunchConfiguration.ID_JUNIT_APPLICATION);
try {
ILaunchConfiguration[] configs= DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurations(configType);
for (int i=0; i<configs.length; ++i) {
ILaunchConfiguration config = configs[i];
String vmArgs = config.getAttribute(
IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, ""); //$NON-NLS-1$
String[] argArray = DebugPlugin.parseArguments(vmArgs);
int assertArgIndex = findAssertEnabledArg(argArray);
boolean assertAlreadyEnabled = (assertArgIndex != ASSERT_ARG_NOT_FOUND);
if (assertAlreadyEnabled != getEnableAssertionsPreference()) {
if (assertAlreadyEnabled && !getEnableAssertionsPreference()) {
// remove the assertion argument
vmArgs = removeAssertFromArgString(vmArgs, argArray[assertArgIndex]);
}
else if (!assertAlreadyEnabled && getEnableAssertionsPreference()) {
// add the assertion argument
vmArgs = setAssertInArgString(vmArgs);
}
// save whatever change was made
ILaunchConfigurationWorkingCopy wc = config.getWorkingCopy();
wc.setAttribute(
IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, vmArgs);
wc.doSave();
}
}
} catch (CoreException e) {
JUnitPlugin.log(e);
}
}*/
}