Package edu.ncsu.muclipse.launch

Source Code of edu.ncsu.muclipse.launch.TestsLaunchConfigGroup$MuClipseTests

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;
  }
  }
}
TOP

Related Classes of edu.ncsu.muclipse.launch.TestsLaunchConfigGroup$MuClipseTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.