Java tutorial
/* * Copyright 2008 the Seasar Foundation and the Others. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language * governing permissions and limitations under the License. * * This is a program source code derived from the Eclipse Software. * An original copyright notice is as follows. ******************************************************************************* * Copyright (c) 2000, 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: * IBM Corporation - initial API and implementation * Sebastian Davids, sdavids@gmx.de - bug 38507 * Sebastian Davids, sdavids@gmx.de - 113998 [JUnit] New Test Case Wizard: Class Under Test Dialog -- allow Enums ******************************************************************************* */ package org.seasar.s2junit4plugin.wizard; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.ListIterator; import java.util.Map; import org.eclipse.core.resources.IFolder; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Text; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.window.Window; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.PreferencesUtil; import org.eclipse.ui.dialogs.SelectionDialog; import org.eclipse.jdt.core.Flags; import org.eclipse.jdt.core.IClassFile; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IMethod; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.ITypeHierarchy; import org.eclipse.jdt.core.JavaConventions; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.Signature; import org.eclipse.jdt.core.search.IJavaSearchScope; import org.eclipse.jdt.core.search.SearchEngine; import org.eclipse.jdt.ui.CodeGeneration; import org.eclipse.jdt.ui.IJavaElementSearchConstants; import org.eclipse.jdt.ui.JavaElementLabels; import org.eclipse.jdt.ui.JavaUI; import org.eclipse.jdt.ui.wizards.NewTypeWizardPage; import org.eclipse.jdt.internal.ui.refactoring.contentassist.ControlContentAssistHelper; import org.eclipse.jdt.internal.ui.refactoring.contentassist.JavaTypeCompletionProcessor; import org.eclipse.jdt.internal.junit.Messages; import org.eclipse.jdt.internal.junit.buildpath.BuildPathSupport; import org.eclipse.jdt.internal.junit.ui.IJUnitHelpContextIds; import org.eclipse.jdt.internal.junit.ui.JUnitPlugin; import org.eclipse.jdt.internal.junit.util.JUnitStatus; //import org.eclipse.jdt.internal.junit.util.JUnitStubUtility; import org.eclipse.jdt.internal.junit.util.LayoutUtil; import org.eclipse.jdt.internal.junit.util.TestSearchEngine; //import org.eclipse.jdt.internal.junit.util.JUnitStubUtility.GenStubSettings; import org.eclipse.jdt.internal.junit.wizards.MethodStubsSelectionButtonGroup; import org.eclipse.jdt.internal.junit.wizards.WizardMessages; import org.eclipse.jdt.junit.wizards.NewTestCaseWizardPageTwo; import org.seasar.s2junit4plugin.Constants; import org.seasar.s2junit4plugin.Logger; import org.seasar.s2junit4plugin.util.PreferenceStoreUtil; import org.seasar.s2junit4plugin.util.StringUtil; import org.seasar.s2junit4plugin.wizard.S2JUnit4StubUtility.GenStubSettings; /** * The class <code>NewTestCaseWizardPageOne</code> contains controls and validation routines * for the first page of the 'New JUnit TestCase Wizard'. * * Clients can use the page as-is and add it to their own wizard, or extend it to modify * validation or add and remove controls. * * @since 3.1 */ public class NewS2JUnit4TestCaseWizardPageOne extends NewS2JUnit4TypeWizardPage { private final static String PAGE_NAME = "NewTestCaseCreationWizardPage"; //$NON-NLS-1$ /** Field ID of the class under test field. */ public final static String CLASS_UNDER_TEST = PAGE_NAME + ".classundertest"; //$NON-NLS-1$ /** * Field ID of the Junit4 toggle * @since 3.2 */ public final static String JUNIT4TOGGLE = PAGE_NAME + ".junit4toggle"; //$NON-NLS-1$ public final static String S2JUNIT4TOGGLE = PAGE_NAME + ".s2junit4toggle"; //$NON-NLS-1$ private static final String COMPLIANCE_PAGE_ID = "org.eclipse.jdt.ui.propertyPages.CompliancePreferencePage"; //$NON-NLS-1$ private static final String BUILD_PATH_PAGE_ID = "org.eclipse.jdt.ui.propertyPages.BuildPathsPropertyPage"; //$NON-NLS-1$ private static final Object BUILD_PATH_KEY_ADD_ENTRY = "add_classpath_entry"; //$NON-NLS-1$ private static final Object BUILD_PATH_BLOCK = "block_until_buildpath_applied"; //$NON-NLS-1$ private static final String KEY_NO_LINK = "PropertyAndPreferencePage.nolink"; //$NON-NLS-1$ private final static String QUESTION_MARK_TAG = "Q"; //$NON-NLS-1$ private final static String OF_TAG = "Of"; //$NON-NLS-1$ private final static String TEST_SUFFIX = "Test"; //$NON-NLS-1$ private final static String PREFIX = "test"; //$NON-NLS-1$ private final static String STORE_SETUP = PAGE_NAME + ".USE_SETUP"; //$NON-NLS-1$ private final static String STORE_TEARDOWN = PAGE_NAME + ".USE_TEARDOWN"; //$NON-NLS-1$ private final static String STORE_SETUP_CLASS = PAGE_NAME + ".USE_SETUPCLASS"; //$NON-NLS-1$ private final static String STORE_TEARDOWN_CLASS = PAGE_NAME + ".USE_TEARDOWNCLASS"; //$NON-NLS-1$ private final static String STORE_CONSTRUCTOR = PAGE_NAME + ".USE_CONSTRUCTOR"; //$NON-NLS-1$ private final static int IDX_SETUP_CLASS = 0; private final static int IDX_TEARDOWN_CLASS = 1; private final static int IDX_SETUP = 2; private final static int IDX_TEARDOWN = 3; private final static int IDX_CONSTRUCTOR = 4; private NewTestCaseWizardPageTwo fPage2; private MethodStubsSelectionButtonGroup fMethodStubsButtons; private String fClassUnderTestText; // model private IType fClassUnderTest; // resolved model, can be null private Text fClassUnderTestControl; // control private IStatus fClassUnderTestStatus; // status private Button fClassUnderTestButton; private JavaTypeCompletionProcessor fClassToTestCompletionProcessor; private Button fJUnit4Toggle; private Button fS2JUnit4Toggle; private boolean fIsJunit4; private IStatus fJunit4Status; // status private boolean fIsJunit4Enabled; private boolean fIsS2Junit4Enabled; private Link fLink; private Label fImage; private IPreferenceStore store = PreferenceStoreUtil.getPreferenceStoreOfWorkspace(); /** * Creates a new <code>NewTestCaseCreationWizardPage</code>. * @param page2 The second page * * @since 3.1 */ public NewS2JUnit4TestCaseWizardPageOne(NewTestCaseWizardPageTwo page2) { super(true, PAGE_NAME); fPage2 = page2; setTitle(WizardMessages.NewTestCaseWizardPageOne_title); setDescription(WizardMessages.NewTestCaseWizardPageOne_description); String[] buttonNames = new String[] { /* IDX_SETUP_CLASS */ WizardMessages.NewTestCaseWizardPageOne_methodStub_setUpBeforeClass, /* IDX_TEARDOWN_CLASS */ WizardMessages.NewTestCaseWizardPageOne_methodStub_tearDownAfterClass, /* IDX_SETUP */ WizardMessages.NewTestCaseWizardPageOne_methodStub_setUp, /* IDX_TEARDOWN */ WizardMessages.NewTestCaseWizardPageOne_methodStub_tearDown, /* IDX_CONSTRUCTOR */ WizardMessages.NewTestCaseWizardPageOne_methodStub_constructor }; enableCommentControl(true); fMethodStubsButtons = new MethodStubsSelectionButtonGroup(SWT.CHECK, buttonNames, 2); fMethodStubsButtons.setLabelText(WizardMessages.NewTestCaseWizardPageOne_method_Stub_label); fClassToTestCompletionProcessor = new JavaTypeCompletionProcessor(false, false, true); fClassUnderTestStatus = new JUnitStatus(); fClassUnderTestText = ""; //$NON-NLS-1$ fJunit4Status = new JUnitStatus(); fIsJunit4 = false; fIsS2Junit4 = false; } /** * Initialized the page with the current selection * @param selection The selection */ public void init(IStructuredSelection selection) { IJavaElement element = getInitialJavaElement(selection); try { String mainTestPath = PreferenceStoreUtil.getPreferenceStoreOfWorkspace() .getString(Constants.PREF_TEST_JAVA_PATH); IJavaProject javaProject = element.getJavaProject(); IFolder folder = javaProject.getProject().getFolder(mainTestPath); if (folder.exists()) { IPackageFragmentRoot findPackageFragmentRoot = javaProject .findPackageFragmentRoot(folder.getFullPath()); setPackageFragmentRoot(findPackageFragmentRoot, true); } else { initContainerPage(element); } } catch (JavaModelException e) { Logger.error(e, this); } initTypePage(element); // put default class to test if (element != null) { IType classToTest = null; // evaluate the enclosing type IType typeInCompUnit = (IType) element.getAncestor(IJavaElement.TYPE); if (typeInCompUnit != null) { if (typeInCompUnit.getCompilationUnit() != null) { classToTest = typeInCompUnit; } } else { ICompilationUnit cu = (ICompilationUnit) element.getAncestor(IJavaElement.COMPILATION_UNIT); if (cu != null) classToTest = cu.findPrimaryType(); else { if (element instanceof IClassFile) { try { IClassFile cf = (IClassFile) element; if (cf.isStructureKnown()) classToTest = cf.getType(); } catch (JavaModelException e) { Logger.error(e, this); } } } } if (classToTest != null) { try { if (!TestSearchEngine.isTestImplementor(classToTest)) { setClassUnderTest(classToTest.getFullyQualifiedName('.')); } } catch (JavaModelException e) { Logger.error(e, this); } } } restoreWidgetValues(); boolean isJunit4 = false; // if (element != null && element.getElementType() != IJavaElement.JAVA_MODEL) { // IJavaProject project= element.getJavaProject(); // try { // isJunit4= project.findType(JUnitPlugin.JUNIT4_ANNOTATION_NAME) != null; // } catch (JavaModelException e) { // // ignore // } // } if (store.getString(Constants.PREF_TEST_GENERATION_TYPE) .equals(org.seasar.s2junit4plugin.Messages.getString("Preference.JUnit4"))) { isJunit4 = true; } setJUnit4(isJunit4, true); boolean isS2Junit4 = false; // if (element != null && element.getElementType() != IJavaElement.JAVA_MODEL) { // IJavaProject project= element.getJavaProject(); // try { // isS2Junit4= project.findType("org.seasar.framework.unit.Seasar2") != null; // } catch (JavaModelException e) { // // ignore // } // } if (store.getString(Constants.PREF_TEST_GENERATION_TYPE) .equals(org.seasar.s2junit4plugin.Messages.getString("Preference.S2JUnit4"))) { isS2Junit4 = true; } setS2JUnit4(isS2Junit4, true); updateStatus(getStatusList()); } private IStatus junit4Changed() { JUnitStatus status = new JUnitStatus(); return status; } /** * Specifies if the test should be created as JUnit 4 test. * @param isJUnit4 If set, a Junit 4 test will be created * @param isEnabled if <code>true</code> the modifier fields are * editable; otherwise they are read-only * * @since 3.2 */ public void setJUnit4(boolean isJUnit4, boolean isEnabled) { fIsJunit4Enabled = isEnabled; if (fJUnit4Toggle != null && !fJUnit4Toggle.isDisposed()) { fJUnit4Toggle.setSelection(isJUnit4); fJUnit4Toggle.setEnabled(isEnabled); } internalSetJUnit4(isJUnit4); } public void setS2JUnit4(boolean isS2JUnit4, boolean isEnabled) { fIsS2Junit4Enabled = isEnabled; if (fS2JUnit4Toggle != null && !fS2JUnit4Toggle.isDisposed()) { fS2JUnit4Toggle.setSelection(isS2JUnit4); fS2JUnit4Toggle.setEnabled(isEnabled); } internalSetS2JUnit4(isS2JUnit4); } /** * Returns <code>true</code> if the test should be created as Junit 4 test * @return returns <code>true</code> if the test should be created as Junit 4 test * * @since 3.2 */ public boolean isJUnit4() { return fIsJunit4; } private void internalSetJUnit4(boolean isJUnit4) { fIsJunit4 = isJUnit4; fJunit4Status = junit4Changed(); if (fIsJunit4) { setSuperClass("java.lang.Object", false); //$NON-NLS-1$ } else { setSuperClass(JUnitPlugin.TEST_SUPERCLASS_NAME, true); } handleFieldChanged(JUNIT4TOGGLE); } private void internalSetJUnit3(boolean isJUnit3) { fIsJunit4 = !isJUnit3; fJunit4Status = junit4Changed(); if (fIsJunit4) { setSuperClass("java.lang.Object", false); //$NON-NLS-1$ } else { setSuperClass(JUnitPlugin.TEST_SUPERCLASS_NAME, true); } handleFieldChanged(JUNIT4TOGGLE); } private void internalSetS2JUnit4(boolean isS2JUnit4) { fIsS2Junit4 = isS2JUnit4; fJunit4Status = junit4Changed(); if (fIsS2Junit4) { setSuperClass("java.lang.Object", false); //$NON-NLS-1$ } else { setSuperClass("org.seasar.extension.unit.S2TestCase", true); } handleFieldChanged(S2JUNIT4TOGGLE); } private void internalSetS2Unit(boolean isS2Unit) { fIsS2Junit4 = !isS2Unit; fJunit4Status = junit4Changed(); if (fIsS2Junit4) { setSuperClass("java.lang.Object", false); //$NON-NLS-1$ } else { setSuperClass("org.seasar.extension.unit.S2TestCase", true); } handleFieldChanged(S2JUNIT4TOGGLE); } /* (non-Javadoc) * @see org.eclipse.jdt.ui.wizards.NewContainerWizardPage#handleFieldChanged(String) */ protected void handleFieldChanged(String fieldName) { super.handleFieldChanged(fieldName); if (fieldName.equals(CONTAINER)) { fClassUnderTestStatus = classUnderTestChanged(); if (fClassUnderTestButton != null && !fClassUnderTestButton.isDisposed()) { fClassUnderTestButton.setEnabled(getPackageFragmentRoot() != null); } fJunit4Status = junit4Changed(); updateBuildPathMessage(); } else if (fieldName.equals(JUNIT4TOGGLE)) { updateBuildPathMessage(); fMethodStubsButtons.setEnabled(IDX_SETUP_CLASS, isJUnit4()); fMethodStubsButtons.setEnabled(IDX_TEARDOWN_CLASS, isJUnit4()); fMethodStubsButtons.setEnabled(IDX_CONSTRUCTOR, !isJUnit4()); } else if (fieldName.equals(S2JUNIT4TOGGLE)) { updateBuildPathMessage(); fMethodStubsButtons.setEnabled(IDX_SETUP_CLASS, isS2JUnit4()); fMethodStubsButtons.setEnabled(IDX_TEARDOWN_CLASS, isS2JUnit4()); fMethodStubsButtons.setEnabled(IDX_CONSTRUCTOR, !isS2JUnit4()); } updateStatus(getStatusList()); } /** * Returns all status to be consider for the validation. Clients can override. * @return The list of status to consider for the validation. */ protected IStatus[] getStatusList() { return new IStatus[] { fContainerStatus, fPackageStatus, fTypeNameStatus, fClassUnderTestStatus, fModifierStatus, fSuperClassStatus, fJunit4Status }; } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) */ public void createControl(Composite parent) { initializeDialogUnits(parent); Composite composite = new Composite(parent, SWT.NONE); int nColumns = 4; GridLayout layout = new GridLayout(); layout.numColumns = nColumns; composite.setLayout(layout); createJUnit4Controls(composite, nColumns); createContainerControls(composite, nColumns); createPackageControls(composite, nColumns); createSeparator(composite, nColumns); createTypeNameControls(composite, nColumns); createSuperClassControls(composite, nColumns); createMethodStubSelectionControls(composite, nColumns); createCommentControls(composite, nColumns); createSeparator(composite, nColumns); createClassUnderTestControls(composite, nColumns); createBuildPathConfigureControls(composite, nColumns); setControl(composite); //set default and focus String classUnderTest = getClassUnderTestText(); if (classUnderTest.length() > 0) { setTypeName(Signature.getSimpleName(classUnderTest) + TEST_SUFFIX, true); } Dialog.applyDialogFont(composite); PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IJUnitHelpContextIds.NEW_TESTCASE_WIZARD_PAGE); setFocus(); } /** * Creates the controls for the method stub selection buttons. Expects a <code>GridLayout</code> with * at least 3 columns. * * @param composite the parent composite * @param nColumns number of columns to span */ protected void createMethodStubSelectionControls(Composite composite, int nColumns) { LayoutUtil.setHorizontalSpan(fMethodStubsButtons.getLabelControl(composite), nColumns); LayoutUtil.createEmptySpace(composite, 1); LayoutUtil.setHorizontalSpan(fMethodStubsButtons.getSelectionButtonsGroup(composite), nColumns - 1); } /** * Creates the controls for the 'class under test' field. Expects a <code>GridLayout</code> with * at least 3 columns. * * @param composite the parent composite * @param nColumns number of columns to span */ protected void createClassUnderTestControls(Composite composite, int nColumns) { Label classUnderTestLabel = new Label(composite, SWT.LEFT | SWT.WRAP); classUnderTestLabel.setFont(composite.getFont()); classUnderTestLabel.setText(WizardMessages.NewTestCaseWizardPageOne_class_to_test_label); classUnderTestLabel.setLayoutData(new GridData()); fClassUnderTestControl = new Text(composite, SWT.SINGLE | SWT.BORDER); fClassUnderTestControl.setEnabled(true); fClassUnderTestControl.setFont(composite.getFont()); fClassUnderTestControl.setText(fClassUnderTestText); fClassUnderTestControl.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { internalSetClassUnderText(((Text) e.widget).getText()); } }); GridData gd = new GridData(); gd.horizontalAlignment = GridData.FILL; gd.grabExcessHorizontalSpace = true; gd.horizontalSpan = nColumns - 2; fClassUnderTestControl.setLayoutData(gd); fClassUnderTestButton = new Button(composite, SWT.PUSH); fClassUnderTestButton.setText(WizardMessages.NewTestCaseWizardPageOne_class_to_test_browse); fClassUnderTestButton.setEnabled(true); fClassUnderTestButton.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { classToTestButtonPressed(); } public void widgetSelected(SelectionEvent e) { classToTestButtonPressed(); } }); gd = new GridData(); gd.horizontalAlignment = GridData.FILL; gd.grabExcessHorizontalSpace = false; gd.horizontalSpan = 1; gd.widthHint = LayoutUtil.getButtonWidthHint(fClassUnderTestButton); fClassUnderTestButton.setLayoutData(gd); ControlContentAssistHelper.createTextContentAssistant(fClassUnderTestControl, fClassToTestCompletionProcessor); } /** * Creates the controls for the JUnit 4 toggle control. Expects a <code>GridLayout</code> with * at least 3 columns. * * @param composite the parent composite * @param nColumns number of columns to span * * @since 3.2 */ protected void createJUnit4Controls(Composite composite, int nColumns) { Composite inner = new Composite(composite, SWT.NONE); inner.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, nColumns, 1)); GridLayout layout = new GridLayout(4, false); layout.marginHeight = 0; layout.marginWidth = 0; inner.setLayout(layout); SelectionAdapter junit3Listener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { boolean isSelected = ((Button) e.widget).getSelection(); internalSetJUnit3(isSelected); } }; Button junti3Toggle = new Button(inner, SWT.RADIO); junti3Toggle.setText(WizardMessages.NewTestCaseWizardPageOne_junit3_radio_label); junti3Toggle.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false, 1, 1)); if (store.getString(Constants.PREF_TEST_GENERATION_TYPE) .equals(org.seasar.s2junit4plugin.Messages.getString("Preference.JUnit3"))) { junti3Toggle.setSelection(true); internalSetJUnit3(true); } junti3Toggle.setEnabled(fIsJunit4Enabled); junti3Toggle.addSelectionListener(junit3Listener); SelectionAdapter junit4Listener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { boolean isSelected = ((Button) e.widget).getSelection(); internalSetJUnit4(isSelected); } }; fJUnit4Toggle = new Button(inner, SWT.RADIO); fJUnit4Toggle.setText(WizardMessages.NewTestCaseWizardPageOne_junit4_radio_label); if (store.getString(Constants.PREF_TEST_GENERATION_TYPE) .equals(org.seasar.s2junit4plugin.Messages.getString("Preference.JUnit4"))) { fJUnit4Toggle.setSelection(true); internalSetJUnit4(true); } fJUnit4Toggle.setEnabled(fIsJunit4Enabled); fJUnit4Toggle.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false, 1, 1)); fJUnit4Toggle.addSelectionListener(junit4Listener); SelectionAdapter s2UnitListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { boolean isSelected = ((Button) e.widget).getSelection(); internalSetS2Unit(isSelected); } }; Button s2unitToggle = new Button(inner, SWT.RADIO); s2unitToggle.setText("New S2Unit test"); s2unitToggle.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false, 1, 1)); if (store.getString(Constants.PREF_TEST_GENERATION_TYPE) .equals(org.seasar.s2junit4plugin.Messages.getString("Preference.S2Unit"))) { s2unitToggle.setSelection(true); internalSetS2Unit(true); } s2unitToggle.setEnabled(fIsS2Junit4Enabled); s2unitToggle.addSelectionListener(s2UnitListener); SelectionAdapter s2JUnit4Listener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { boolean isSelected = ((Button) e.widget).getSelection(); internalSetS2JUnit4(isSelected); } }; fS2JUnit4Toggle = new Button(inner, SWT.RADIO); fS2JUnit4Toggle.setText("New S2JUnit4 test"); if (store.getString(Constants.PREF_TEST_GENERATION_TYPE) .equals(org.seasar.s2junit4plugin.Messages.getString("Preference.S2JUnit4"))) { fS2JUnit4Toggle.setSelection(true); internalSetS2JUnit4(true); } fS2JUnit4Toggle.setEnabled(fIsS2Junit4Enabled); fS2JUnit4Toggle.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false, 1, 1)); fS2JUnit4Toggle.addSelectionListener(s2JUnit4Listener); } /** * Creates the controls for the JUnit 4 toggle control. Expects a <code>GridLayout</code> with * at least 3 columns. * * @param composite the parent composite * @param nColumns number of columns to span * * @since 3.2 */ protected void createBuildPathConfigureControls(Composite composite, int nColumns) { Composite inner = new Composite(composite, SWT.NONE); inner.setLayoutData(new GridData(GridData.FILL, GridData.FILL, false, false, nColumns, 1)); GridLayout layout = new GridLayout(2, false); layout.marginWidth = 0; layout.marginHeight = 0; inner.setLayout(layout); fImage = new Label(inner, SWT.NONE); fImage.setImage(JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_WARNING)); fImage.setLayoutData(new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false, 1, 1)); fLink = new Link(inner, SWT.WRAP); fLink.setText("\n\n"); //$NON-NLS-1$ fLink.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { performBuildpathConfiguration(e.text); } }); GridData gd = new GridData(GridData.FILL, GridData.BEGINNING, true, false, 1, 1); gd.widthHint = convertWidthInCharsToPixels(60); fLink.setLayoutData(gd); updateBuildPathMessage(); } private void performBuildpathConfiguration(Object data) { IPackageFragmentRoot root = getPackageFragmentRoot(); if (root == null) { return; // should not happen. Link shouldn't be visible } IJavaProject javaProject = root.getJavaProject(); if ("a3".equals(data)) { // add and configure JUnit 3 //$NON-NLS-1$ String id = BUILD_PATH_PAGE_ID; Map input = new HashMap(); IClasspathEntry newEntry = BuildPathSupport.getJUnit3ClasspathEntry(); input.put(BUILD_PATH_KEY_ADD_ENTRY, newEntry); input.put(BUILD_PATH_BLOCK, Boolean.TRUE); PreferencesUtil.createPropertyDialogOn(getShell(), javaProject, id, new String[] { id }, input).open(); } else if ("a4".equals(data)) { // add and configure JUnit 4 //$NON-NLS-1$ String id = BUILD_PATH_PAGE_ID; Map input = new HashMap(); IClasspathEntry newEntry = BuildPathSupport.getJUnit4ClasspathEntry(); input.put(BUILD_PATH_KEY_ADD_ENTRY, newEntry); input.put(BUILD_PATH_BLOCK, Boolean.TRUE); PreferencesUtil.createPropertyDialogOn(getShell(), javaProject, id, new String[] { id }, input).open(); } else if ("b".equals(data)) { // open build path //$NON-NLS-1$ String id = BUILD_PATH_PAGE_ID; Map input = new HashMap(); input.put(BUILD_PATH_BLOCK, Boolean.TRUE); PreferencesUtil.createPropertyDialogOn(getShell(), javaProject, id, new String[] { id }, input).open(); } else if ("c".equals(data)) { // open compliance //$NON-NLS-1$ String buildPath = BUILD_PATH_PAGE_ID; String complianceId = COMPLIANCE_PAGE_ID; Map input = new HashMap(); input.put(BUILD_PATH_BLOCK, Boolean.TRUE); input.put(KEY_NO_LINK, Boolean.TRUE); PreferencesUtil.createPropertyDialogOn(getShell(), javaProject, complianceId, new String[] { buildPath, complianceId }, data).open(); } updateBuildPathMessage(); } private void updateBuildPathMessage() { if (fLink == null || fLink.isDisposed()) { return; } String message = null; IPackageFragmentRoot root = getPackageFragmentRoot(); if (root != null) { try { IJavaProject project = root.getJavaProject(); if (project.exists()) { if (isJUnit4()) { if (!S2JUnit4StubUtility.is50OrHigher(project)) { message = WizardMessages.NewTestCaseWizardPageOne_linkedtext_java5required; } else if (project.findType(JUnitPlugin.JUNIT4_ANNOTATION_NAME) == null) { message = Messages.format( WizardMessages.NewTestCaseWizardPageOne_linkedtext_junit4_notonbuildpath, project.getElementName()); } } else { if (project.findType(JUnitPlugin.TEST_SUPERCLASS_NAME) == null) { message = Messages.format( WizardMessages.NewTestCaseWizardPageOne_linkedtext_junit3_notonbuildpath, project.getElementName()); } } } } catch (JavaModelException e) { } } fLink.setVisible(message != null); fImage.setVisible(message != null); if (message != null) { fLink.setText(message); } } private void classToTestButtonPressed() { IType type = chooseClassToTestType(); if (type != null) { setClassUnderTest(type.getFullyQualifiedName('.')); } } private IType chooseClassToTestType() { IPackageFragmentRoot root = getPackageFragmentRoot(); if (root == null) return null; IJavaElement[] elements = new IJavaElement[] { root.getJavaProject() }; IJavaSearchScope scope = SearchEngine.createJavaSearchScope(elements); try { SelectionDialog dialog = JavaUI.createTypeDialog(getShell(), getWizard().getContainer(), scope, IJavaElementSearchConstants.CONSIDER_CLASSES_AND_ENUMS, false, getClassUnderTestText()); dialog.setTitle(WizardMessages.NewTestCaseWizardPageOne_class_to_test_dialog_title); dialog.setMessage(WizardMessages.NewTestCaseWizardPageOne_class_to_test_dialog_message); if (dialog.open() == Window.OK) { Object[] resultArray = dialog.getResult(); if (resultArray != null && resultArray.length > 0) return (IType) resultArray[0]; } } catch (JavaModelException e) { Logger.error(e, this); } return null; } /* (non-Javadoc) * @see org.eclipse.jdt.ui.wizards.NewTypeWizardPage#packageChanged() */ protected IStatus packageChanged() { IStatus status = super.packageChanged(); fClassToTestCompletionProcessor.setPackageFragment(getPackageFragment()); return status; } /** * Hook method that gets called when the class under test has changed. The method class under test * returns the status of the validation. * <p> * Subclasses may extend this method to perform their own validation. * </p> * * @return the status of the validation */ protected IStatus classUnderTestChanged() { JUnitStatus status = new JUnitStatus(); fClassUnderTest = null; IPackageFragmentRoot root = getPackageFragmentRoot(); if (root == null) { return status; } String classToTestName = getClassUnderTestText(); if (classToTestName.length() == 0) { return status; } IJavaProject javaProject = root.getJavaProject(); String sourceLevel = javaProject.getOption(JavaCore.COMPILER_SOURCE, true); String compliance = javaProject.getOption(JavaCore.COMPILER_COMPLIANCE, true); IStatus val = JavaConventions.validateJavaTypeName(classToTestName, sourceLevel, compliance); if (val.getSeverity() == IStatus.ERROR) { status.setError(WizardMessages.NewTestCaseWizardPageOne_error_class_to_test_not_valid); return status; } IPackageFragment pack = getPackageFragment(); // can be null try { IType type = resolveClassNameToType(root.getJavaProject(), pack, classToTestName); if (type == null) { status.setError(WizardMessages.NewTestCaseWizardPageOne_error_class_to_test_not_exist); return status; } if (type.isInterface()) { status.setWarning( Messages.format(WizardMessages.NewTestCaseWizardPageOne_warning_class_to_test_is_interface, classToTestName)); } if (pack != null && !S2JUnit4StubUtility.isVisible(type, pack)) { status.setWarning( Messages.format(WizardMessages.NewTestCaseWizardPageOne_warning_class_to_test_not_visible, classToTestName)); } fClassUnderTest = type; fPage2.setClassUnderTest(fClassUnderTest); } catch (JavaModelException e) { status.setError(WizardMessages.NewTestCaseWizardPageOne_error_class_to_test_not_valid); } return status; } /** * Returns the content of the class to test text field. * * @return the name of the class to test */ public String getClassUnderTestText() { return fClassUnderTestText; } /** * Returns the class to be tested. * * @return the class under test or <code>null</code> if the entered values are not valid */ public IType getClassUnderTest() { return fClassUnderTest; } /** * Sets the name of the class under test. * * @param name The name to set */ public void setClassUnderTest(String name) { if (fClassUnderTestControl != null && !fClassUnderTestControl.isDisposed()) { fClassUnderTestControl.setText(name); } internalSetClassUnderText(name); } private void internalSetClassUnderText(String name) { fClassUnderTestText = name; fClassUnderTestStatus = classUnderTestChanged(); handleFieldChanged(CLASS_UNDER_TEST); } /* (non-Javadoc) * @see org.eclipse.jdt.ui.wizards.NewTypeWizardPage#createTypeMembers(org.eclipse.jdt.core.IType, org.eclipse.jdt.ui.wizards.NewTypeWizardPage.ImportsManager, org.eclipse.core.runtime.IProgressMonitor) */ protected void createTypeMembers(IType type, ImportsManager imports, IProgressMonitor monitor) throws CoreException { if (isS2JUnit4() && !Flags.isAbstract(fClassUnderTest.getFlags())) { createAutoBindingField(type, monitor); } if (fMethodStubsButtons.isSelected(IDX_CONSTRUCTOR)) createConstructor(type, imports); if (fMethodStubsButtons.isSelected(IDX_SETUP_CLASS)) { createSetUpClass(type, imports); } if (fMethodStubsButtons.isSelected(IDX_TEARDOWN_CLASS)) { createTearDownClass(type, imports); } if (fMethodStubsButtons.isSelected(IDX_SETUP)) { createSetUp(type, imports); } if (fMethodStubsButtons.isSelected(IDX_TEARDOWN)) { createTearDown(type, imports); } if (fClassUnderTest != null) { createTestMethodStubs(type, imports); } if (isJUnit4()) { imports.addStaticImport("org.junit.Assert", "*", false); //$NON-NLS-1$ //$NON-NLS-2$ } if (isS2JUnit4()) { imports.addStaticImport("org.seasar.framework.unit.S2Assert", "*", false); //$NON-NLS-1$ //$NON-NLS-2$ } } private void createAutoBindingField(IType type, IProgressMonitor monitor) throws JavaModelException { String typeName = fClassUnderTest.getElementName(); if (!StringUtil.isEmpty(typeName)) { if (typeName.endsWith("Service") || typeName.endsWith("Dao")) { StringBuffer buffer = new StringBuffer(); buffer.append("private ").append(typeName).append(" " + StringUtil.decapitalize(typeName) + ";"); type.createField(buffer.toString(), null, false, monitor); } } } private void createConstructor(IType type, ImportsManager imports) throws CoreException { ITypeHierarchy typeHierarchy = null; IType[] superTypes = null; String content; IMethod methodTemplate = null; if (type.exists()) { typeHierarchy = type.newSupertypeHierarchy(null); superTypes = typeHierarchy.getAllSuperclasses(type); for (int i = 0; i < superTypes.length; i++) { if (superTypes[i].exists()) { IMethod constrMethod = superTypes[i].getMethod(superTypes[i].getElementName(), new String[] { "Ljava.lang.String;" }); //$NON-NLS-1$ if (constrMethod.exists() && constrMethod.isConstructor()) { methodTemplate = constrMethod; break; } } } } GenStubSettings settings = S2JUnit4StubUtility.getCodeGenerationSettings(type.getJavaProject()); settings.createComments = isAddComments(); if (methodTemplate != null) { settings.callSuper = true; settings.methodOverwrites = true; content = S2JUnit4StubUtility.genStub(type.getCompilationUnit(), getTypeName(), methodTemplate, settings, null, imports); } else { final String delimiter = getLineDelimiter(); StringBuffer buffer = new StringBuffer(32); buffer.append("public "); //$NON-NLS-1$ buffer.append(getTypeName()); buffer.append('('); if (!isJUnit4()) { buffer.append(imports.addImport("java.lang.String")).append(" name"); //$NON-NLS-1$ //$NON-NLS-2$ } buffer.append(") {"); //$NON-NLS-1$ buffer.append(delimiter); if (!isJUnit4()) { buffer.append("super(name);").append(delimiter); //$NON-NLS-1$ } buffer.append('}'); buffer.append(delimiter); content = buffer.toString(); } type.createMethod(content, null, true, null); } private IMethod findInHierarchy(IType type, String methodName) throws JavaModelException { ITypeHierarchy typeHierarchy = null; IType[] superTypes = null; if (type.exists()) { typeHierarchy = type.newSupertypeHierarchy(null); superTypes = typeHierarchy.getAllSuperclasses(type); for (int i = 0; i < superTypes.length; i++) { if (superTypes[i].exists()) { IMethod testMethod = superTypes[i].getMethod(methodName, new String[] {}); if (testMethod.exists()) { return testMethod; } } } } return null; } private void createSetupStubs(IType type, String methodName, boolean isStatic, String annotationType, ImportsManager imports) throws CoreException { String content = null; IMethod methodTemplate = findInHierarchy(type, methodName); String annotation = null; if (isJUnit4()) { annotation = '@' + imports.addImport(annotationType); } GenStubSettings settings = S2JUnit4StubUtility.getCodeGenerationSettings(type.getJavaProject()); settings.createComments = isAddComments(); if (methodTemplate != null) { settings.callSuper = true; settings.methodOverwrites = true; content = S2JUnit4StubUtility.genStub(type.getCompilationUnit(), getTypeName(), methodTemplate, settings, annotation, imports); } else { final String delimiter = getLineDelimiter(); StringBuffer buffer = new StringBuffer(); if (settings.createComments) { String[] excSignature = { Signature.createTypeSignature("java.lang.Exception", true) }; //$NON-NLS-1$ String comment = CodeGeneration.getMethodComment(type.getCompilationUnit(), type.getElementName(), methodName, new String[0], excSignature, Signature.SIG_VOID, null, delimiter); if (comment != null) { buffer.append(comment); } } if (annotation != null) { buffer.append(annotation).append(delimiter); } if (isJUnit4()) { buffer.append("public "); //$NON-NLS-1$ } else { buffer.append("protected "); //$NON-NLS-1$ } if (isStatic) { buffer.append("static "); //$NON-NLS-1$ } buffer.append("void "); //$NON-NLS-1$ buffer.append(methodName); buffer.append("() throws "); //$NON-NLS-1$ buffer.append(imports.addImport("java.lang.Exception")); //$NON-NLS-1$ buffer.append(" {}"); //$NON-NLS-1$ buffer.append(delimiter); content = buffer.toString(); } type.createMethod(content, null, false, null); } private void createSetUp(IType type, ImportsManager imports) throws CoreException { createSetupStubs(type, "setUp", false, "org.junit.Before", imports); //$NON-NLS-1$ //$NON-NLS-2$ } private void createTearDown(IType type, ImportsManager imports) throws CoreException { createSetupStubs(type, "tearDown", false, "org.junit.After", imports); //$NON-NLS-1$ //$NON-NLS-2$ } private void createSetUpClass(IType type, ImportsManager imports) throws CoreException { createSetupStubs(type, "setUpBeforeClass", true, "org.junit.BeforeClass", imports); //$NON-NLS-1$ //$NON-NLS-2$ } private void createTearDownClass(IType type, ImportsManager imports) throws CoreException { createSetupStubs(type, "tearDownAfterClass", true, "org.junit.AfterClass", imports); //$NON-NLS-1$ //$NON-NLS-2$ } private void createTestMethodStubs(IType type, ImportsManager imports) throws CoreException { IMethod[] methods = fPage2.getCheckedMethods(); if (methods.length == 0) return; /* find overloaded methods */ IMethod[] allMethodsArray = fPage2.getAllMethods(); List allMethods = new ArrayList(); allMethods.addAll(Arrays.asList(allMethodsArray)); List overloadedMethods = getOverloadedMethods(allMethods); /* used when for example both sum and Sum methods are present. Then * sum -> testSum * Sum -> testSum1 */ List names = new ArrayList(); for (int i = 0; i < methods.length; i++) { IMethod method = methods[i]; String elementName = method.getElementName(); StringBuffer name = new StringBuffer(PREFIX).append(Character.toUpperCase(elementName.charAt(0))) .append(elementName.substring(1)); StringBuffer buffer = new StringBuffer(); final boolean contains = overloadedMethods.contains(method); if (contains) appendParameterNamesToMethodName(name, method.getParameterTypes()); replaceIllegalCharacters(name); /* void foo(java.lang.StringBuffer sb) {} * void foo(mypackage1.StringBuffer sb) {} * void foo(mypackage2.StringBuffer sb) {} * -> * testFooStringBuffer() * testFooStringBuffer1() * testFooStringBuffer2() */ String testName = name.toString(); if (names.contains(testName)) { int suffix = 1; while (names.contains(testName + Integer.toString(suffix))) suffix++; name.append(Integer.toString(suffix)); } testName = name.toString(); names.add(testName); if (isAddComments()) { appendMethodComment(buffer, method); } if (isJUnit4()) { buffer.append('@').append(imports.addImport(JUnitPlugin.JUNIT4_ANNOTATION_NAME)) .append(getLineDelimiter()); } buffer.append("public ");//$NON-NLS-1$ if (fPage2.getCreateFinalMethodStubsButtonSelection()) buffer.append("final "); //$NON-NLS-1$ buffer.append("void ");//$NON-NLS-1$ buffer.append(testName); buffer.append("()");//$NON-NLS-1$ appendTestMethodBody(buffer, testName, method, type.getCompilationUnit(), imports); type.createMethod(buffer.toString(), null, false, null); } } private void replaceIllegalCharacters(StringBuffer buffer) { char character = 0; for (int index = buffer.length() - 1; index >= 0; index--) { character = buffer.charAt(index); if (Character.isWhitespace(character)) buffer.deleteCharAt(index); else if (character == '<') buffer.replace(index, index + 1, OF_TAG); else if (character == '?') buffer.replace(index, index + 1, QUESTION_MARK_TAG); else if (!Character.isJavaIdentifierPart(character)) buffer.deleteCharAt(index); } } private String getLineDelimiter() throws JavaModelException { IType classToTest = getClassUnderTest(); if (classToTest != null && classToTest.exists() && classToTest.getCompilationUnit() != null) return classToTest.getCompilationUnit().findRecommendedLineSeparator(); return getPackageFragment().findRecommendedLineSeparator(); } private void appendTestMethodBody(StringBuffer buffer, String name, IMethod method, ICompilationUnit targetCu, ImportsManager imports) throws CoreException { final String delimiter = getLineDelimiter(); buffer.append('{').append(delimiter); String todoTask = ""; //$NON-NLS-1$ if (fPage2.isCreateTasks()) { String todoTaskTag = S2JUnit4StubUtility.getTodoTaskTag(targetCu.getJavaProject()); if (todoTaskTag != null) { todoTask = " // " + todoTaskTag; //$NON-NLS-1$ } } String message = WizardMessages.NewTestCaseWizardPageOne_not_yet_implemented_string; buffer.append(Messages.format("fail(\"{0}\");", message)).append(todoTask).append(delimiter); //$NON-NLS-1$ buffer.append('}').append(delimiter); } private void appendParameterNamesToMethodName(StringBuffer buffer, String[] parameters) { for (int i = 0; i < parameters.length; i++) { final StringBuffer buf = new StringBuffer( Signature.getSimpleName(Signature.toString(Signature.getElementType(parameters[i])))); final char character = buf.charAt(0); if (buf.length() > 0 && !Character.isUpperCase(character)) buf.setCharAt(0, Character.toUpperCase(character)); buffer.append(buf.toString()); for (int j = 0, arrayCount = Signature.getArrayCount(parameters[i]); j < arrayCount; j++) { buffer.append("Array"); //$NON-NLS-1$ } } } private void appendMethodComment(StringBuffer buffer, IMethod method) throws JavaModelException { final String delimiter = getLineDelimiter(); final StringBuffer buf = new StringBuffer("{@link "); //$NON-NLS-1$ JavaElementLabels.getTypeLabel(method.getDeclaringType(), JavaElementLabels.T_FULLY_QUALIFIED, buf); buf.append('#'); buf.append(method.getElementName()); buf.append('('); String[] paramTypes = S2JUnit4StubUtility.getParameterTypeNamesForSeeTag(method); for (int i = 0; i < paramTypes.length; i++) { if (i != 0) { buf.append(", "); //$NON-NLS-1$ } buf.append(paramTypes[i]); } buf.append(')'); buf.append('}'); buffer.append("/**");//$NON-NLS-1$ buffer.append(delimiter); buffer.append(" * ");//$NON-NLS-1$ buffer.append( Messages.format(WizardMessages.NewTestCaseWizardPageOne_comment_class_to_test, buf.toString())); buffer.append(delimiter); buffer.append(" */");//$NON-NLS-1$ buffer.append(delimiter); } private List getOverloadedMethods(List allMethods) { List overloadedMethods = new ArrayList(); for (int i = 0; i < allMethods.size(); i++) { IMethod current = (IMethod) allMethods.get(i); String currentName = current.getElementName(); boolean currentAdded = false; for (ListIterator iter = allMethods.listIterator(i + 1); iter.hasNext();) { IMethod iterMethod = (IMethod) iter.next(); if (iterMethod.getElementName().equals(currentName)) { //method is overloaded if (!currentAdded) { overloadedMethods.add(current); currentAdded = true; } overloadedMethods.add(iterMethod); iter.remove(); } } } return overloadedMethods; } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean) */ public void setVisible(boolean visible) { super.setVisible(visible); if (!visible) { saveWidgetValues(); } //if (visible) setFocus(); } /** * The method is called when the container has changed to validate if the project * is suited for the JUnit test class. Clients can override to modify or remove that validation. * * @return the status of the validation */ protected IStatus validateIfJUnitProject() { JUnitStatus status = new JUnitStatus(); IPackageFragmentRoot root = getPackageFragmentRoot(); if (root != null) { try { IJavaProject project = root.getJavaProject(); if (project.exists()) { if (isJUnit4()) { if (!S2JUnit4StubUtility.is50OrHigher(project)) { status.setError(WizardMessages.NewTestCaseWizardPageOne_error_java5required); return status; } if (project.findType(JUnitPlugin.JUNIT4_ANNOTATION_NAME) == null) { status.setWarning(WizardMessages.NewTestCaseWizardPageOne__error_junit4NotOnbuildpath); return status; } } else { if (project.findType(JUnitPlugin.TEST_SUPERCLASS_NAME) == null) { status.setWarning(WizardMessages.NewTestCaseWizardPageOne_error_junitNotOnbuildpath); return status; } } } } catch (JavaModelException e) { } } return status; } /* (non-Javadoc) * @see org.eclipse.jdt.ui.wizards.NewTypeWizardPage#superClassChanged() */ protected IStatus superClassChanged() { // replaces the super class validation of of the normal type wizard if (isJUnit4() || isS2JUnit4()) { return new JUnitStatus(); } String superClassName = getSuperClass(); JUnitStatus status = new JUnitStatus(); if (superClassName == null || superClassName.trim().equals("")) { //$NON-NLS-1$ status.setError(WizardMessages.NewTestCaseWizardPageOne_error_superclass_empty); return status; } if (getPackageFragmentRoot() != null) { try { IType type = resolveClassNameToType(getPackageFragmentRoot().getJavaProject(), getPackageFragment(), superClassName); if (type == null) { status.setWarning(WizardMessages.NewTestCaseWizardPageOne_error_superclass_not_exist); return status; } if (type.isInterface()) { status.setError(WizardMessages.NewTestCaseWizardPageOne_error_superclass_is_interface); return status; } if (!TestSearchEngine.isTestImplementor(type)) { // TODO: expensive! status.setError(Messages.format( WizardMessages.NewTestCaseWizardPageOne_error_superclass_not_implementing_test_interface, JUnitPlugin.TEST_INTERFACE_NAME)); return status; } } catch (JavaModelException e) { Logger.error(e, this); } } return status; } /* (non-Javadoc) * @see org.eclipse.jface.wizard.IWizardPage#canFlipToNextPage() */ public boolean canFlipToNextPage() { return super.canFlipToNextPage() && getClassUnderTest() != null; } private IType resolveClassNameToType(IJavaProject jproject, IPackageFragment pack, String classToTestName) throws JavaModelException { if (!jproject.exists()) { return null; } IType type = jproject.findType(classToTestName); // search in current package if (type == null && pack != null && !pack.isDefaultPackage()) { type = jproject.findType(pack.getElementName(), classToTestName); } // search in java.lang if (type == null) { type = jproject.findType("java.lang", classToTestName); //$NON-NLS-1$ } return type; } /** * Use the dialog store to restore widget values to the values that they held * last time this wizard was used to completion */ private void restoreWidgetValues() { IDialogSettings settings = getDialogSettings(); if (settings != null) { fMethodStubsButtons.setSelection(IDX_SETUP, settings.getBoolean(STORE_SETUP)); fMethodStubsButtons.setSelection(IDX_TEARDOWN, settings.getBoolean(STORE_TEARDOWN)); fMethodStubsButtons.setSelection(IDX_SETUP_CLASS, settings.getBoolean(STORE_SETUP_CLASS)); fMethodStubsButtons.setSelection(IDX_TEARDOWN_CLASS, settings.getBoolean(STORE_TEARDOWN_CLASS)); fMethodStubsButtons.setSelection(IDX_CONSTRUCTOR, settings.getBoolean(STORE_CONSTRUCTOR)); } else { fMethodStubsButtons.setSelection(IDX_SETUP, false); //setUp fMethodStubsButtons.setSelection(IDX_TEARDOWN, false); //tearDown fMethodStubsButtons.setSelection(IDX_SETUP_CLASS, false); //setUpBeforeClass fMethodStubsButtons.setSelection(IDX_TEARDOWN_CLASS, false); //setUpAfterClass fMethodStubsButtons.setSelection(IDX_CONSTRUCTOR, false); //constructor } } /** * Since Finish was pressed, write widget values to the dialog store so that they * will persist into the next invocation of this wizard page */ private void saveWidgetValues() { IDialogSettings settings = getDialogSettings(); if (settings != null) { settings.put(STORE_SETUP, fMethodStubsButtons.isSelected(IDX_SETUP)); settings.put(STORE_TEARDOWN, fMethodStubsButtons.isSelected(IDX_TEARDOWN)); settings.put(STORE_SETUP_CLASS, fMethodStubsButtons.isSelected(IDX_SETUP_CLASS)); settings.put(STORE_TEARDOWN_CLASS, fMethodStubsButtons.isSelected(IDX_TEARDOWN_CLASS)); settings.put(STORE_CONSTRUCTOR, fMethodStubsButtons.isSelected(IDX_CONSTRUCTOR)); } } }