package edu.ncsu.muclipse.launch;
import java.io.File;
import java.io.FilenameFilter;
import java.util.Vector;
import mujava.MutationSystem;
import mujava.util.DirFileFilter;
import mujava.util.ExtensionFilter;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
//import org.eclipse.debug.internal.ui.SWTUtil;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup;
import org.eclipse.debug.ui.CommonTab;
import org.eclipse.debug.ui.EnvironmentTab;
import org.eclipse.debug.ui.ILaunchConfigurationDialog;
import org.eclipse.debug.ui.ILaunchConfigurationTab;
import org.eclipse.debug.ui.sourcelookup.SourceLookupTab;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.debug.ui.launchConfigurations.JavaClasspathTab;
import org.eclipse.jdt.debug.ui.launchConfigurations.JavaJRETab;
import org.eclipse.jdt.debug.ui.launchConfigurations.JavaLaunchTab;
//import org.eclipse.jdt.internal.debug.ui.launcher.JavaLaunchConfigurationTab;
import org.eclipse.jdt.internal.ui.wizards.TypedElementSelectionValidator;
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
import org.eclipse.jdt.ui.IJavaElementSearchConstants;
import org.eclipse.jdt.ui.ISharedImages;
import org.eclipse.jdt.ui.JavaElementLabelProvider;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.MouseMoveListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.dialogs.ElementListSelectionDialog;
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
import org.eclipse.ui.dialogs.SelectionDialog;
import edu.ncsu.muclipse.*;
/**
* This is an Eclipse Runtime Configuration control
* for running test cases against created mutants. It
* allows the user to specify which classes they want
* to target and which test cases should be run.
*
* These options are turned into parameters in the class
* TestsLaunchConfigGroup, which is what implements
* the Eclipse Runtime Configuration. The standard
* environment, classpath, JRE and source lookup tabs
* for a Java Runtime Configuration are also provided
* such that the user can better specify the context of
* his or her application.
*
* The following specific options are available in this
* runtime configuration group:
* <ul>
* <li>Resource pointers for directories containing:
* <ul>
* <li>.class objects</li>
* <li>.java sources</li>
* <li>.java/.class test cases</li>
* <li>Mutant Location</li>
* </ul></li>
* <li>Which project is being used</li>
* <li>The timeout period to use</li>
* <li>Which kind of mutants to test against</li>
* <li>Which test to run</li>
* <li>Which classes to target</li>
* </ul>
* @see TestsLaunchConfigType
* @author Ben Smith
*/
public class TestsLaunchConfigGroup extends
AbstractLaunchConfigurationTabGroup {
/**
* The default constructor is never called.
*/
public TestsLaunchConfigGroup() {
}
/**
* This method is called from the Eclipse API; it
* provides a parent dialog control into which all
* the tabs (inner-classes) are placed.
*/
public void createTabs(ILaunchConfigurationDialog dialog, String mode) {
ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[] {
new MuClipseDirectories(),
new MuClipseTests(),
new JavaClasspathTab(),
new JavaJRETab(),
new SourceLookupTab(),
new EnvironmentTab(),
new CommonTab()
};
setTabs(tabs);
}
private static class MuClipseDirectories extends
JavaLaunchTab {
Text txtProject;
Text txtOutput;
Text txtSelectedFolderClasses;
Text txtSelectedFolderSource;
Text txtSelectedFolderTest;
Text txtTargetClass;
Text txtSelectedTest;
Button btnBrowseFolder;
// List mutantlist;
// List testlist;
// Group selectionblock;
//
private Button btnBrowseOutput;
public void createControl(Composite parent) {
Composite comp = new Composite(parent, SWT.NONE);
setControl(comp);
GridLayout topLayout = new GridLayout();
topLayout.numColumns = 3;
comp.setLayout(topLayout);
insertEmpty(comp);
createProjectBlock(comp);
insertEmpty(comp);
createClassesFolderBlock(comp);
createSourceFolderBlock(comp);
createTestFolderBlock(comp);
insertEmpty(comp);
createTargetClass(comp);
createSelectedTest(comp);
Dialog.applyDialogFont(comp);
//setMessage("Be sure to select a project for mutation testing...");
}
static private void insertEmpty(Composite comp) {
Label label = new Label(comp, SWT.NONE);
setLayoutSpan(label, 3);
}
public Image getImage() {
return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_EMPTY_PACKAGE);
}
static private void setLayoutSpan(Control control, int span) {
GridData gd = new GridData();
gd.horizontalSpan = span;
control.setLayoutData(gd);
}
private static void setButtonGridData(Button button) {
GridData gridData= new GridData();
button.setLayoutData(gridData);
// SWTUtil.setButtonDimensionHint(button);
}
private static void setLayoutIndent(Control control, int indent) {
GridData gd = new GridData();
gd.horizontalIndent = indent;
control.setLayoutData(gd);
}
private void createClassesFolderBlock(Composite parent) {
Label lblFolder = new Label(parent, SWT.NONE);
lblFolder.setText("Classes Folder");
txtSelectedFolderClasses = new Text(parent, SWT.SINGLE | SWT.BORDER);
txtSelectedFolderClasses.setLayoutData(
new GridData(GridData.FILL_HORIZONTAL));
txtSelectedFolderClasses.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent evt) {
validatePage();
}
});
btnBrowseFolder = new Button(parent, SWT.PUSH);
btnBrowseFolder.setText("Browse...");
setButtonGridData(btnBrowseFolder);
btnBrowseFolder.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent evt) {
IProject project = MuClipsePlugin.getProject(txtProject.getText().trim());
browseFolderClicked(txtSelectedFolderClasses);
}
});
}
private void createSourceFolderBlock(Composite parent) {
Label lblFolder = new Label(parent, SWT.NONE);
lblFolder.setText("Source Folder");
txtSelectedFolderSource = new Text(parent, SWT.SINGLE | SWT.BORDER);
txtSelectedFolderSource.setLayoutData(
new GridData(GridData.FILL_HORIZONTAL));
txtSelectedFolderSource.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent evt) {
validatePage();
}
});
btnBrowseFolder = new Button(parent, SWT.PUSH);
btnBrowseFolder.setText("Browse...");
setButtonGridData(btnBrowseFolder);
btnBrowseFolder.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent evt) {
IProject project = MuClipsePlugin.getProject(txtProject.getText().trim());
browseFolderClicked(txtSelectedFolderSource);
}
});
}
private void createTestFolderBlock(Composite parent) {
Label lblFolder = new Label(parent, SWT.NONE);
lblFolder.setText("Testset Folder");
txtSelectedFolderTest = new Text(parent, SWT.SINGLE | SWT.BORDER);
txtSelectedFolderTest.setLayoutData(
new GridData(GridData.FILL_HORIZONTAL));
txtSelectedFolderTest.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent evt) {
validatePage();
// composeTestList(
// txtSelectedFolderTest.getText(),
// txtProject.getText());
}
});
btnBrowseFolder = new Button(parent, SWT.PUSH);
btnBrowseFolder.setText("Browse...");
setButtonGridData(btnBrowseFolder);
btnBrowseFolder.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent evt) {
IProject project = MuClipsePlugin.getProject(txtProject.getText().trim());
browseFolderClicked(txtSelectedFolderTest);
}
});
}
private void createProjectBlock(Composite parent) {
Label lblProject = new Label(parent, SWT.NONE);
lblProject.setText("Project");
txtProject = new Text(parent, SWT.SINGLE | SWT.BORDER);
txtProject.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
txtProject.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent evt) {
validatePage();
}
});
Button btnBrowseProject = new Button(parent, SWT.PUSH);
btnBrowseProject.setText("Browse...");
setButtonGridData(btnBrowseProject);
btnBrowseProject.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent evt) {
browseProjectClicked();
}
});
Label lblOutput = new Label(parent, SWT.NONE);
lblOutput.setText("Mutants Output");
txtOutput = new Text(parent, SWT.SINGLE | SWT.BORDER);
txtOutput.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
txtOutput.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent evt) {
validatePage();
// composeClassList(
// txtOutput.getText(),
// txtProject.getText());
}
});
btnBrowseOutput = new Button(parent, SWT.PUSH);
btnBrowseOutput.setText("Browse...");
setButtonGridData(btnBrowseOutput);
btnBrowseOutput.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent evt) {
browseOutputClicked();
}
});
}
private boolean validateFolderExists(
String folderName, String errMessage) {
if(isEmptyString(folderName)) {
setErrorMessage(errMessage);
return false;
}
try{
IProject project =
MuClipsePlugin.getProject(txtProject.getText());
IFolder folder = project.getFolder(folderName);
if(!folder.exists()) {
setErrorMessage("Folder " + folderName + " does not exist");
return false;
}
return true;
} catch (IllegalArgumentException ignored) {
return false;
}
}
static private boolean isEmptyString(String string) {
return string == null || string.equals("");
}
private boolean validateProject(String projectName) {
if(isEmptyString(projectName)) {
setErrorMessage("Project does not exist!");
return false;
}
try {
IProject project = MuClipsePlugin.getProject(projectName);
if(!project.exists()) {
setErrorMessage(
"Project " + projectName + " does not exist");
return false;
}
return true;
} catch (IllegalArgumentException ignored) {
return false;
}
}
private void browseProjectClicked() {
IJavaProject selectedProject = chooseJavaProject();
if(selectedProject != null) {
txtProject.setText(selectedProject.getElementName());
}
}
private void browseOutputClicked() {
IProject project = MuClipsePlugin.getProject(txtProject.getText().trim());
String folder = chooseFolder();
if(folder != null) {
txtOutput.setText(folder);
}
}
private void browseFolderClicked(Text boxToSet) {
String folder = chooseFolder();
if(folder != null) {
boxToSet.setText(folder);
}
}
private void browseMutantsClicked()
{
// String folder = chooseMutantRoot();
// if(folder != null) {
// txtTargetClass.setText(folder);
// }
String classname = chooseTargetClass();
if(classname != null) {
txtTargetClass.setText(classname);
}
}
private void browseFileClicked(Text boxToSet,
Object rootDirectory) {
String file = chooseFile(rootDirectory);
if(file != null) {
boxToSet.setText(file);
}
}
private String chooseFile(Object rootDirectory) {
final ElementTreeSelectionDialog dialog =
new ElementTreeSelectionDialog(getShell(),
new FileLabelProvider(),
new FileTreeContentProvider(false));
dialog.setAllowMultiple(true);
dialog.setTitle("MuClipse");
dialog.setMessage("Select a java class");
dialog.setInput(rootDirectory);
dialog.setValidator(new TypedElementSelectionValidator(
new Class[]{IFile.class}, false));
if(dialog.open() == Window.OK) {
IResource rc = (IResource)dialog.getFirstResult();
return rc.getFullPath()
.removeFirstSegments(1).toString();
}
return null;
}
private void createTargetClass(Composite parent) {
Label lblFolder = new Label(parent, SWT.NONE);
lblFolder.setText("Target Class");
setLayoutIndent(lblFolder, 0);
txtTargetClass = new Text(parent, SWT.SINGLE | SWT.BORDER);
txtTargetClass.setLayoutData(
new GridData(GridData.FILL_HORIZONTAL));
txtTargetClass.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent evt) {
validatePage();
}
});
btnBrowseFolder = new Button(parent, SWT.PUSH);
btnBrowseFolder.setText("Browse...");
setButtonGridData(btnBrowseFolder);
btnBrowseFolder.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent evt) {
IFolder root = MuClipsePlugin.getProject
(txtProject.getText().trim())
.getFolder(txtOutput.getText());
browseMutantsClicked();
}
});
}
private void createSelectedTest(Composite parent) {
Label lblFolder = new Label(parent, SWT.NONE);
lblFolder.setText("Test");
setLayoutIndent(lblFolder, 0);
txtSelectedTest = new Text(parent, SWT.SINGLE | SWT.BORDER);
txtSelectedTest.setLayoutData(
new GridData(GridData.FILL_HORIZONTAL));
txtSelectedTest.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent evt) {
validatePage();
}
});
btnBrowseFolder = new Button(parent, SWT.PUSH);
btnBrowseFolder.setText("Browse...");
setButtonGridData(btnBrowseFolder);
btnBrowseFolder.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent evt) {
IFolder root = MuClipsePlugin.getProject
(txtProject.getText().trim())
.getFolder(txtSelectedFolderTest.getText());
txtSelectedTest.setText(chooseTest());
}
});
}
private String chooseFolder() {
IProject project = MuClipsePlugin.getProject(txtProject.getText().trim());
final ElementTreeSelectionDialog dialog =
new ElementTreeSelectionDialog(getShell(),
new FileLabelProvider(),
new FileTreeContentProvider(true));
dialog.setAllowMultiple(false);
dialog.setTitle("MuClipse");
dialog.setMessage("Select a folder");
dialog.setInput(project);
dialog.setValidator(new TypedElementSelectionValidator(
new Class[]{IFolder.class}, false));
if(dialog.open() == Window.OK) {
IResource rc = (IResource)dialog.getFirstResult();
if (rc != null)
return rc.getFullPath().removeFirstSegments(1).toString();
}
return null;
}
private String chooseMutantRoot() {
IFolder project = MuClipsePlugin.getProject(txtProject.
getText().trim()).getFolder(txtOutput.getText());
final ElementTreeSelectionDialog dialog =
new ElementTreeSelectionDialog(getShell(),
new FileLabelProvider(),
new FileTreeContentProvider(true));
dialog.setAllowMultiple(false);
dialog.setTitle("MuClipse");
dialog.setMessage("Select a mutated class");
dialog.setInput(project);
dialog.setValidator(new TypedElementSelectionValidator(
new Class[]{IFolder.class}, false));
if(dialog.open() == Window.OK) {
IResource rc = (IResource)dialog.getFirstResult();
if (rc != null)
return rc.getFullPath().removeFirstSegments(2).toString();
}
return null;
}
private IJavaProject chooseJavaProject() {
IJavaProject[] projects;
try {
projects = JavaCore.create(
MuClipsePlugin.getWorkspaceRoot()).getJavaProjects();
} catch (JavaModelException e) {
projects = new IJavaProject[0];
}
ILabelProvider labelProvider = new JavaElementLabelProvider(
JavaElementLabelProvider.SHOW_DEFAULT);
ElementListSelectionDialog dialog =
new ElementListSelectionDialog(getShell(), labelProvider);
dialog.setTitle("MuClipse");
dialog.setMessage("Select a Project");
dialog.setElements(projects);
IJavaProject javaProject = getJavaProject();
if (javaProject != null) {
dialog.setInitialSelections(new Object[] { javaProject });
}
if (dialog.open() == Window.OK) {
return (IJavaProject) dialog.getFirstResult();
}
return null;
}
private IJavaProject getJavaProject() {
String projectName = txtProject.getText().trim();
return MutantsLaunchConfigType.getJavaProject(projectName);
}
public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
IJavaElement javaElement = getContext();
if (javaElement != null) {
initializeJavaProject(javaElement, configuration);
} else {
configuration.setAttribute(
IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME,
"");
}
configuration.setAttribute(
MuClipseConstants.MUTANTS,
MuClipseConstants.MUTANT_HOME);
configuration.setAttribute(
MuClipseConstants.TESTS,
MuClipseConstants.TESTSET_PATH);
configuration.setAttribute(
MuClipseConstants.CLASSES,
MuClipseConstants.CLASS_PATH);
configuration.setAttribute(
MuClipseConstants.SOURCE,
MuClipseConstants.SRC_PATH);
}
private String chooseTargetClass() {
IProject project = MuClipsePlugin.getProject(txtProject.getText().trim());
try
{
SelectionDialog dialog = JavaUI.createTypeDialog(getShell(), MuClipsePlugin.getWorkbenchWindow(),
project, IJavaElementSearchConstants.CONSIDER_CLASSES, false);
dialog.setTitle("MuClipse");
dialog.setMessage("Select a Java class");
if(dialog.open() == Window.OK) {
Object[] rc = dialog.getResult();
IType thisone = (IType) rc[0];
txtSelectedFolderSource.setText(thisone.getPath().segment(1));
return thisone.getFullyQualifiedName();
}
else
{
return "";
}
}
catch (JavaModelException jme)
{
jme.printStackTrace();
}
return "";
}
private String chooseTest() {
IProject project = MuClipsePlugin.getProject(txtProject.getText().trim());
try
{
SelectionDialog dialog = JavaUI.createTypeDialog(getShell(), MuClipsePlugin.getWorkbenchWindow(),
project, IJavaElementSearchConstants.CONSIDER_CLASSES, false);
dialog.setTitle("MuClipse");
dialog.setMessage("Select a test case");
if(dialog.open() == Window.OK) {
Object[] rc = dialog.getResult();
IType thisone = (IType) rc[0];
return thisone.getFullyQualifiedName();
}
else
{
return "";
}
}
catch (JavaModelException jme)
{
jme.printStackTrace();
}
return "";
}
public void initializeFrom(ILaunchConfiguration configuration) {
try {
txtProject.setText(
configuration.getAttribute(
IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME,
""));
txtOutput.setText(
configuration.getAttribute(
MuClipseConstants.MUTANTS,
MuClipseConstants.MUTANT_HOME));
txtSelectedFolderClasses.setText(
configuration.getAttribute(
MuClipseConstants.CLASSES,
MuClipseConstants.CLASS_PATH));
txtSelectedFolderSource.setText(
configuration.getAttribute(
MuClipseConstants.SOURCE,
MuClipseConstants.SRC_PATH));
txtSelectedFolderTest.setText(
configuration.getAttribute(
MuClipseConstants.TESTS,
MuClipseConstants.TESTSET_PATH));
txtTargetClass.setText(configuration.getAttribute(
MuClipseConstants.CLASSCHOICE, ""));
txtSelectedTest.setText(configuration.getAttribute(
MuClipseConstants.WHICH_TEST, ""));
validatePage();
} catch (CoreException ignored) {
ignored.printStackTrace();
}
}
public void performApply(
ILaunchConfigurationWorkingCopy configuration) {
configuration.setAttribute(
IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME,
txtProject.getText());
configuration.setAttribute(
MuClipseConstants.MUTANTS,
txtOutput.getText());
configuration.setAttribute(
MuClipseConstants.TESTS,
txtSelectedFolderTest.getText());
configuration.setAttribute(
MuClipseConstants.CLASSES,
txtSelectedFolderClasses.getText());
configuration.setAttribute(
MuClipseConstants.SOURCE,
txtSelectedFolderSource.getText());
configuration.setAttribute(
MuClipseConstants.CLASSCHOICE,
txtTargetClass.getText());
configuration.setAttribute(
MuClipseConstants.WHICH_TEST,
txtSelectedTest.getText());
}
private void validatePage() {
setDirty(false);
setMessage(null);
setErrorMessage(null);
validateFolderExists(
txtOutput.getText(),
"Please specify an output folder");
validateFolderExists(
txtSelectedFolderClasses.getText(),
"Please specify a .classes folder");
validateFolderExists(
txtSelectedFolderSource.getText(),
"Please specify a source (.java) folder");
validateFolderExists(
txtSelectedFolderTest.getText(),
"Please specify a testset folder");
// if (mutantlist.getSelectionCount() < 1)
// setErrorMessage("Please select classes to target.");
//
// if (testlist.getSelectionCount() < 1)
// setErrorMessage("Please select a test class.");
//
boolean projectSet = validateProject(txtProject.getText());
btnBrowseOutput.setEnabled(projectSet);
updateLaunchConfigurationDialog();
}
public String getName() {
return "Directories";
}
public boolean isValid(ILaunchConfiguration launchConfig) {
return getErrorMessage() == null;
}
}
private static class MuClipseTests extends
JavaLaunchTab {
Label lblFile;
Label timeout;
Button btnBrowseFile;
Slider slid;
Button classlevel, traditional;
public void createControl(Composite parent) {
// currentProject = "";
Composite comp = new Composite(parent, SWT.NONE);
setControl(comp);
comp.setLayoutData(
new GridData(GridData.FILL_VERTICAL));
GridLayout topLayout = new GridLayout();
topLayout.numColumns = 2;
comp.setLayout(topLayout);
//comp.setLayout(new FillLayout());
createTimeout(comp);
Dialog.applyDialogFont(comp);
}
public Image getImage() {
return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_DEFAULT);
}
private void createTimeout(Composite comp)
{
Group slidgrp = new Group(comp, SWT.SHADOW_ETCHED_IN);
setLayoutSpan(slidgrp, 1);
slidgrp.setText("Timeout period (ms)");
slidgrp.setLayout(new GridLayout());
slid = new Slider(slidgrp, SWT.HORIZONTAL);
timeout = new Label(slidgrp, SWT.NONE);
timeout.setText("5000");
slid.setValues(5000, 500, 5000, 500, 500, 1000);
slid.addSelectionListener(new SelectionListener () {
public void widgetDefaultSelected(SelectionEvent e)
{
}
public void widgetSelected(SelectionEvent e)
{
timeout.setText(slid.getSelection() + "");
validatePage();
}
});
traditional = new Button(slidgrp, SWT.CHECK);
traditional.setText("Test Traditional Mutants");
traditional.addSelectionListener(new SelectionListener () {
public void widgetDefaultSelected(SelectionEvent e)
{
}
public void widgetSelected(SelectionEvent e)
{
validatePage();
}
});
classlevel = new Button(slidgrp, SWT.CHECK);
classlevel.setText("Test Class-Level Mutants");
classlevel.addSelectionListener(new SelectionListener () {
public void widgetDefaultSelected(SelectionEvent e)
{
}
public void widgetSelected(SelectionEvent e)
{
validatePage();
}
});
}
/*
private void createTestChoiceBlock(Composite parent) {
Group testgroup = new Group(parent, SWT.SHADOW_ETCHED_IN);
setLayoutSpan(testgroup, 1);
testgroup.setText("Test to run");
testgroup.setLayout(new FillLayout());
txtSelectedFile = new Text(testgroup, SWT.SINGLE | SWT.BORDER);
txtSelectedFile.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent evt) {
validatePage();
}
});
btnBrowseFile = new Button(testgroup, SWT.PUSH);
btnBrowseFile.setText("Browse...");
btnBrowseFile.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent evt) {
browseFileClicked();
}
});
}*/
/*
private void browseFileClicked() {
String file = chooseFile();
if(file != null) {
txtSelectedFile.setText(file);
}
}*/
private String chooseFile() {
return chooseFile(false);
}
private String chooseFile(boolean multiple) {
//IProject project = MuClipsePlugin.getProject(currentProject);
final ElementTreeSelectionDialog dialog =
new ElementTreeSelectionDialog(getShell(),
new FileLabelProvider(),
new FileTreeContentProvider(false));
dialog.setAllowMultiple(multiple);
dialog.setTitle("Choose file");
dialog.setSorter(new FileViewerSorter());
//dialog.setInput(project);
if(multiple) {
dialog.setMessage("Select resources. Press CTRL or SHIFT" +
" to select multiple resources.");
dialog.setValidator(new TypedElementSelectionValidator(
new Class[]{IFile.class, IFolder.class}, true));
if(dialog.open() == Window.OK) {
Object[] results = dialog.getResult();
StringBuffer ret = new StringBuffer();
if (results != null) {
for (int i = 0; i < results.length; i++) {
IResource rc = (IResource)results[i];
ret.append(rc.getFullPath().removeFirstSegments(1));
ret.append(";");
}
return ret.toString();
}
}
} else {
dialog.setMessage("Select a .class file");
dialog.setValidator(new TypedElementSelectionValidator(
new Class[]{IFile.class}, false));
if(dialog.open() == Window.OK) {
IResource rc = (IResource)dialog.getFirstResult();
if (rc != null)
return rc.getFullPath().removeFirstSegments(1).toString();
}
}
return null;
}
static private void insertEmpty(Composite comp) {
Label label = new Label(comp, SWT.NONE);
setLayoutSpan(label, 3);
}
static private void setLayoutSpan(Control control, int span) {
GridData gd = new GridData();
gd.horizontalSpan = span;
control.setLayoutData(gd);
}
private static void setButtonGridData(Button button) {
GridData gridData= new GridData();
button.setLayoutData(gridData);
// SWTUtil.setButtonDimensionHint(button);
}
private static void setLayoutIndent(Control control, int indent) {
GridData gd = new GridData();
gd.horizontalIndent = indent;
control.setLayoutData(gd);
}
private static void setTop(Control control) {
GridData gd = new GridData();
control.setLayoutData(gd);
}
static private boolean isEmptyString(String string) {
return string == null || string.equals("");
}
String[] getTestSetNames(String testDir) {
File dir = new File(testDir).getAbsoluteFile();
boolean x = dir.isDirectory();
String[] names = dir.list();
return dir.list();
}
public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
configuration.setAttribute(
MuClipseConstants.TIMEOUT,
5000);
configuration.setAttribute(
MuClipseConstants.TESTLEVEL,
3);
}
public void initializeFrom(ILaunchConfiguration configuration) {
try
{
int testlevel = configuration.getAttribute(
MuClipseConstants.TESTLEVEL, 3);
if (testlevel > 1)
traditional.setSelection(true);
if (testlevel == 1 || testlevel == 3)
classlevel.setSelection(true);
int timeout = configuration.getAttribute(
MuClipseConstants.TIMEOUT, 5000);
slid.setSelection(timeout);
this.timeout.setText(timeout + "");
}
catch (CoreException e) {
e.printStackTrace();
}
validatePage();
}
private void validatePage()
{
setDirty(false);
setMessage(null);
setErrorMessage(null);
if (! (traditional.getSelection() ||
classlevel.getSelection()))
setErrorMessage("Select a type of mutant to test.");
updateLaunchConfigurationDialog();
}
public void performApply(
ILaunchConfigurationWorkingCopy configuration) {
int testlevel = 0;
if (classlevel.getSelection())
testlevel += 1;
if (traditional.getSelection())
testlevel += 2;
configuration.setAttribute(
MuClipseConstants.TIMEOUT,
slid.getSelection());
configuration.setAttribute(
MuClipseConstants.TESTLEVEL,
testlevel);
}
public String getName() {
return "Testing Options";
}
public boolean isValid(ILaunchConfiguration launchConfig) {
return getErrorMessage() == null;
}
}
}