| /******************************************************************************* |
| * 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); |
| } |
| |
| }*/ |
| } |