Package de.abg.jreichert.junit4runner

Source Code of de.abg.jreichert.junit4runner.NewTestSuite4CreationWizard

package de.abg.jreichert.junit4runner;

import java.lang.reflect.InvocationTargetException;

import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.core.IAnnotation;
import org.eclipse.jdt.core.IBuffer;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.ISourceRange;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.junit.BasicElementLabels;
import org.eclipse.jdt.internal.junit.Messages;
import org.eclipse.jdt.internal.junit.wizards.JUnitWizard;
import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.ui.IEditorPart;

/**
* A wizard for creating test suites.
*/
public class NewTestSuite4CreationWizard extends JUnitWizard {

  private NewTestSuite4WizardPage fPage;

  public NewTestSuite4CreationWizard() {
    super();
    setWindowTitle(WizardMessages.Wizard_title_new_testsuite);
    initDialogSettings();
  }

  /*
   * @see Wizard#createPages
   */
  public void addPages() {
    super.addPages();
    fPage = new NewTestSuite4WizardPage();
    addPage(fPage);
    fPage.init(getSelection());
  }

  /*
   * @see Wizard#performFinish
   */
  public boolean performFinish() {
    IPackageFragment pack = fPage.getPackageFragment();
    String filename = fPage.getTypeName() + ".java"; //$NON-NLS-1$
    ICompilationUnit cu = pack.getCompilationUnit(filename);
    if (cu.exists()) {
      IEditorPart cu_ep = EditorUtility.isOpenInEditor(cu);
      if (cu_ep != null && cu_ep.isDirty()) {
        boolean saveUnsavedChanges = MessageDialog
            .openQuestion(
                fPage.getShell(),
                WizardMessages.NewTestSuiteWiz_unsavedchangesDialog_title,
                Messages.format(
                    WizardMessages.NewTestSuiteWiz_unsavedchangesDialog_message,
                    BasicElementLabels
                        .getResourceName(filename)));
        if (saveUnsavedChanges) {
          try {
            getContainer()
                .run(false, false, getRunnableSave(cu_ep));
          } catch (Exception e) {
            Activator.log(e);
          }
        }
      }
      IType suiteType = cu.getType(fPage.getTypeName());
      boolean hasTestAnnotatedMethod = false;
      try {

        for (IMethod method : suiteType.getMethods()) {
          for (IAnnotation anno : method.getAnnotations()) {
            if ("Test".equals(anno.getElementName())) {
              hasTestAnnotatedMethod = true;
              break;
            }
          }
          if (hasTestAnnotatedMethod) {
            break;
          }
        }
      } catch (JavaModelException e) {
        e.printStackTrace();
      }
      if(hasTestAnnotatedMethod) {
        MessageDialog.openConfirm(this.getShell(), "title2", "message");
      }
      IMethod suiteMethod = suiteType.getMethod("suite", new String[] {}); //$NON-NLS-1$
      if (suiteMethod.exists()) {
        try {
          ISourceRange range = suiteMethod.getSourceRange();
          IBuffer buf = cu.getBuffer();
          String originalContent = buf.getText(range.getOffset(),
              range.getLength());
          if (UpdateTestSuite4
              .getTestSuiteClassListRange(originalContent) == null) {
            cannotUpdateSuiteError();
            return false;
          }
        } catch (JavaModelException e) {
          Activator.log(e);
          return false;
        }
      }
    }

    if (finishPage(fPage.getRunnable())) {
      if (!fPage.hasUpdatedExistingClass())
        postCreatingType();
      return true;
    }

    return false;
  }

  private void cannotUpdateSuiteError() {
    MessageDialog
        .openError(
            getShell(),
            WizardMessages.NewTestSuiteWizPage_cannotUpdateDialog_title,
            Messages.format(
                WizardMessages.NewTestSuiteWizPage_cannotUpdateDialog_message,
                new String[] {
                    NewTestSuite4WizardPage.START_MARKER,
                    NewTestSuite4WizardPage.END_MARKER }));

  }

  protected void postCreatingType() {
    IType newClass = fPage.getCreatedType();
    if (newClass == null)
      return;
    ICompilationUnit cu = newClass.getCompilationUnit();
    IResource resource = cu.getResource();
    if (resource != null) {
      selectAndReveal(resource);
      openResource(resource);
    }
  }

  public NewTestSuite4WizardPage getPage() {
    return fPage;
  }

  protected void initializeDefaultPageImageDescriptor() {
    setDefaultPageImageDescriptor(Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "wizban/newtest_wiz.png")); //$NON-NLS-1$
  }

  public IRunnableWithProgress getRunnableSave(final IEditorPart cu_ep) {
    return new IRunnableWithProgress() {
      public void run(IProgressMonitor monitor)
          throws InvocationTargetException, InterruptedException {
        if (monitor == null) {
          monitor = new NullProgressMonitor();
        }
        cu_ep.doSave(monitor);
      }
    };
  }
}
TOP

Related Classes of de.abg.jreichert.junit4runner.NewTestSuite4CreationWizard

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.