blob: 927d3ea0e36330861df53193b4bc6e6f73cf4297 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008 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
******************************************************************************/
package org.eclipse.jface.tests.wizards;
import java.io.IOException;
import junit.framework.TestCase;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IPageChangedListener;
import org.eclipse.jface.dialogs.IPageChangingListener;
import org.eclipse.jface.dialogs.PageChangedEvent;
import org.eclipse.jface.dialogs.PageChangingEvent;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;
public class WizardTest extends TestCase {
/**
*
*/
protected static final int NUM_PAGES = 3;
static boolean DID_FINISH = false; //accessed from this test AND wizard
protected final static String WIZARD_TITLE = "TEST WIZARD TITLE";
protected final static String PAGE_TITLE = "TEST PAGE TITLE";
protected RGB color1;
protected RGB color2;
protected TheTestWizard wizard;
protected TheTestWizardDialog dialog;
boolean pageChanged = false;
boolean pageChangingFired = false;
public WizardTest() {
super("NewWizardTest");
}
public void testEndingWithFinish() throws IOException {
//test page count
assertEquals("Wizard has wrong number of pages", NUM_PAGES, wizard.getPageCount());
//test page name
assertEquals("WizardPage.getName() returned wrong name", wizard.page1Name, wizard.page1.getName());
//test getPage()
assertSame("Wizard.getPage() returned wrong page", wizard.getPage(wizard.page1Name), wizard.page1);
//test title
wizard.setWindowTitle(WIZARD_TITLE);
assertEquals("Wizard has wrong title", wizard.getWindowTitle(), WIZARD_TITLE);
wizard.page1.setTitle(PAGE_TITLE);
assertEquals("Wizard has wrong title", wizard.page1.getTitle(), PAGE_TITLE);
//set+test color twice to ensure initial color didn't happen to be color1
wizard.setTitleBarColor(color1);
assertEquals("Wizard has wrong title color", wizard.getTitleBarColor(), color1);
wizard.setTitleBarColor(color2);
assertEquals("Wizard has wrong title color", wizard.getTitleBarColor(), color2);
//test on starting page
assertSame("Wizard has wrong starting page", wizard.page1, wizard.getStartingPage());
assertSame("Wizard not on starting page", wizard.page1, dialog.getCurrentPage());
//test getMessage()
assertSame("WizardPage error message should be null", null, wizard.page1.getErrorMessage());
wizard.page1.textInputField.setText(TheTestWizardPage.BAD_TEXT_FIELD_CONTENTS);
assertEquals("WizardPage error message set correctly", TheTestWizardPage.BAD_TEXT_FIELD_STATUS, wizard.page1.getErrorMessage());
//test page completion
wizard.page1.textInputField.setText(TheTestWizardPage.GOOD_TEXT_FIELD_CONTENTS);
assertEquals("Page should be completed", true, wizard.page1.canFlipToNextPage());
//Setting good value should've cleared the error message
assertSame("WizardPage error message should be null", null, wizard.page1.getErrorMessage());
//test getNextPage() without page changes
assertSame("WizardPage.getNexPage() wrong page", wizard.page2, wizard.page1.getNextPage());
assertSame("Wizard.getNexPage() wrong page", wizard.page2, wizard.getNextPage(wizard.page1));
assertSame("WizardPage.getPreviousPage() wrong page", wizard.page1, wizard.page2.getPreviousPage());
assertSame("Wizard.getPreviousPage() wrong page", wizard.page1, wizard.getPreviousPage(wizard.page2));
assertSame("WizardPage.getNexPage() wrong page", wizard.page3, wizard.page2.getNextPage());
assertSame("Wizard.getPreviousPage() wrong page", wizard.page2, wizard.getPreviousPage(wizard.page3));
//test canFinish()
wizard.page2.textInputField.setText(TheTestWizardPage.BAD_TEXT_FIELD_CONTENTS);
assertEquals("Wizard should not be able to finish", false, wizard.canFinish());
wizard.page2.textInputField.setText(TheTestWizardPage.GOOD_TEXT_FIELD_CONTENTS);
assertEquals("Wizard should be able to finish", true, wizard.canFinish());
//test simulated Finish button hit
//TheTestWizard's performFinish() sets DID_FINISH to true
dialog.finishPressed();
assertEquals("Wizard didn't perform finish", true, DID_FINISH);
}
public void testEndingWithCancel() throws IOException {
assertSame("Wizard not on starting page", wizard.page1, dialog.getCurrentPage());
//TheTestWizard's performFinish() sets DID_FINISH to true, ensure it was not called
wizard.performCancel();
assertEquals("Wizard finished but should not have", false, DID_FINISH);
dialog.cancelPressed();
assertEquals("Wizard performed finished but should not have", false, DID_FINISH);
}
public void testPageChanging() throws IOException {
//initially on first page
assertSame("Wizard started on wrong page", wizard.page1, dialog.getCurrentPage());
assertEquals("Back button should be disabled on first page", false, dialog.getBackButton().getEnabled());
assertEquals("Next button should be enabled on first page", true, dialog.getNextButton().getEnabled());
//move to middle page 2
dialog.nextPressed();
assertSame("Wizard.nextPressed() set wrong page", wizard.page2, dialog.getCurrentPage());
assertEquals("Back button should be enabled on middle page", true, dialog.getBackButton().getEnabled());
assertEquals("Next button should be enabled on middle page", true, dialog.getNextButton().getEnabled());
//test that can't complete by inserting bad value to be validated
wizard.page2.textInputField.setText(TheTestWizardPage.BAD_TEXT_FIELD_CONTENTS);
assertEquals("Finish should be disabled when bad field value", false, dialog.getFinishedButton().getEnabled());
assertEquals("Cancel should always be enabled", true, dialog.getCancelButton().getEnabled());
//test that can complete by inserting good value to be validated
wizard.page2.textInputField.setText(TheTestWizardPage.GOOD_TEXT_FIELD_CONTENTS);
assertEquals("Finish should be enabled when good field value", true, dialog.getFinishedButton().getEnabled());
//move to last page 3
dialog.nextPressed();
assertSame("Wizard.nextPressed() set wrong page", wizard.page3, dialog.getCurrentPage());
assertEquals("Back button should be enabled on last page", true, dialog.getBackButton().getEnabled());
assertEquals("Next button should be disenabled on last page", false, dialog.getNextButton().getEnabled());
//move back to page 2
dialog.backPressed();
assertSame("Wizard.backPressed() set wrong page", wizard.page2, dialog.getCurrentPage());
assertEquals("Back button should be enabled on middle page", true, dialog.getBackButton().getEnabled());
assertEquals("Next button should be enabled on middle page", true, dialog.getNextButton().getEnabled());
//move back to page 1
dialog.backPressed();
assertSame("Wizard.backPressed() set wrong page", wizard.page1, dialog.getCurrentPage());
assertEquals("Back button should be disabled on first page", false, dialog.getBackButton().getEnabled());
assertEquals("Next button should be enabled on first page", true, dialog.getNextButton().getEnabled());
//move Next to page 2
dialog.buttonPressed(IDialogConstants.NEXT_ID);
assertSame("Wizard.backPressed() set wrong page", wizard.page2, dialog.getCurrentPage());
//move Back to page 1
dialog.buttonPressed(IDialogConstants.BACK_ID);
assertSame("Wizard.backPressed() set wrong page", wizard.page1, dialog.getCurrentPage());
}
public void testShowPage() throws IOException {
//move to page 3
dialog.nextPressed();
dialog.nextPressed();
assertSame("Wizard.nextPressed() set wrong page", wizard.page3, dialog.getCurrentPage());
//showPage() back to page 1
dialog.showPage(wizard.page1);
assertSame("Wizard.showPage() set wrong page", wizard.page1, dialog.getCurrentPage());
//TODO Next test fails due to bug #249369
// assertEquals("Back button should be disabled on first page", false, dialog.getBackButton().getEnabled());
assertEquals("Next button should be enabled on first page", true, dialog.getNextButton().getEnabled());
}
public void testPageChangeListening() throws IOException {
pageChanged = false;
pageChangingFired = false;
IPageChangedListener changedListener = new IPageChangedListener() {
public void pageChanged(PageChangedEvent event) {
pageChanged = true;
}
};
IPageChangingListener changingListener = new IPageChangingListener() {
public void handlePageChanging(PageChangingEvent event) {
assertEquals("Page should not have changed yet", false, pageChanged);
pageChangingFired = true;
}
};
//test that listener notifies us of page change
dialog.addPageChangedListener(changedListener);
dialog.addPageChangingListener(changingListener); //assert is in the listener
assertEquals("Page change notified unintentially", false, pageChanged);
//change to page 2
dialog.nextPressed();
assertEquals("Wasn't notified of page change", true, pageChanged);
assertEquals("Wasn't notified of page changing", true, pageChangingFired);
dialog.removePageChangingListener(changingListener); //if not removed, its assert will fail on next nextPressed()
//change to page 2
dialog.nextPressed();
//test with listener removed
pageChanged = false;
dialog.removePageChangedListener(changedListener);
//change to page 3
dialog.nextPressed();
assertEquals("Page change notified unintentially", false, pageChanged);
}
//----------------------------------------------------
protected void setUp() throws Exception {
// TODO Auto-generated method stub
super.setUp();
DID_FINISH = false;
color1 = new RGB(255, 0, 0);
color2 = new RGB(0, 255, 0);
createWizardDialog();
}
protected void tearDown() throws Exception {
if(dialog.getShell() != null && ! dialog.getShell().isDisposed()) {
dialog.close();
}
}
//Create and open the wizard
protected void createWizardDialog() {
//ensure we've initialized a display for this thread
Display.getDefault();
wizard = new TheTestWizard();
dialog = new TheTestWizardDialog(null, wizard);
dialog.create();
dialog.open();
}
}