/* * This is part of Geomajas, a GIS framework, http://www.geomajas.org/. * * Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium. * * The program is available in open source according to the GNU Affero * General Public License. All contributions in this program are covered * by the Geomajas Contributors License Agreement. For full licensing * details, see LICENSE.txt in the project root. */ package org.geomajas.widget.utility.gwt.client.wizard; import java.util.ArrayList; import java.util.List; import com.google.gwt.junit.GWTMockUtilities; import org.geomajas.widget.utility.gwt.client.wizard.WizardButton.ButtonType; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.google.gwt.event.shared.GwtEvent; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.user.client.ui.Widget; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; /** * Test for {@link Wizard}. * * @author jan De Moerloose */ public class WizardTest { @Before public void disableWidgets() { GWTMockUtilities.disarm(); } @After public void reEnableWidgets() { GWTMockUtilities.restore(); } @Test public void testStartToFinish() { TestView view = new TestView(); TestWizard wizard = new TestWizard(view); TestPage page1 = new TestPage("1"); TestPage page2 = new TestPage("2"); TestPage page3 = new TestPage("3"); wizard.addPage(page1); wizard.addPage(page2); wizard.addPage(page3); wizard.start("test"); // check page and button states Assert.assertSame(page1, wizard.getCurrentPage()); Assert.assertFalse(view.getBack().isEnabled()); Assert.assertTrue(view.getNext().isEnabled()); Assert.assertTrue(view.getCancel().isEnabled()); Assert.assertFalse(view.getFinish().isEnabled()); Assert.assertTrue(page1.canShow()); Assert.assertFalse(page2.canShow()); Assert.assertFalse(page3.canShow()); // click on next view.getNext().fireEvent(new ClickEvent(null)); // page not validating, button states remain Assert.assertFalse(page1.isValid()); Assert.assertSame(page1, wizard.getCurrentPage()); Assert.assertFalse(view.getBack().isEnabled()); Assert.assertTrue(view.getNext().isEnabled()); Assert.assertTrue(view.getCancel().isEnabled()); Assert.assertFalse(view.getFinish().isEnabled()); Assert.assertTrue(page1.canShow()); Assert.assertFalse(page2.canShow()); Assert.assertFalse(page3.canShow()); // make page1 validate page1.setValidate(true); // click on next view.getNext().fireEvent(new ClickEvent(null)); Assert.assertSame(page2, wizard.getCurrentPage()); Assert.assertTrue(view.getBack().isEnabled()); Assert.assertTrue(view.getNext().isEnabled()); Assert.assertTrue(view.getCancel().isEnabled()); Assert.assertFalse(view.getFinish().isEnabled()); Assert.assertTrue(page1.canShow()); Assert.assertTrue(page2.canShow()); Assert.assertFalse(page3.canShow()); // make page2 validate page2.setValidate(true); view.getNext().fireEvent(new ClickEvent(null)); Assert.assertSame(page3, wizard.getCurrentPage()); Assert.assertTrue(view.getBack().isEnabled()); Assert.assertFalse(view.getNext().isEnabled()); Assert.assertTrue(view.getCancel().isEnabled()); Assert.assertTrue(view.getFinish().isEnabled()); Assert.assertTrue(page1.canShow()); Assert.assertTrue(page2.canShow()); Assert.assertTrue(page3.canShow()); } class TestView implements WizardView<String> { private TestButton back = new TestButton(ButtonType.PREVIOUS); private TestButton next = new TestButton(ButtonType.NEXT); private TestButton cancel = new TestButton(ButtonType.CANCEL); private TestButton finish = new TestButton(ButtonType.FINISH); private List<WizardButton<String>> buttons = new ArrayList<WizardButton<String>>(); public TestView() { buttons.add(back); buttons.add(next); buttons.add(cancel); buttons.add(finish); } public void addPageToView(WizardPage<String> page) { TestButton button = new TestButton(page); buttons.add(button); } public void setCurrentPage(WizardPage<String> currentPage) { // not needed here } public List<WizardButton<String>> getButtons() { return buttons; } public TestButton getBack() { return back; } public TestButton getNext() { return next; } public TestButton getCancel() { return cancel; } public TestButton getFinish() { return finish; } public Widget asWidget() { return null; } public void setLoading(boolean loading) { } } class TestPage extends WizardPage<String> { private String id; private boolean validate = false; public TestPage(String id) { this.id = id; } @Override public String getTitle() { return id; } @Override public String getExplanation() { return id; } @Override public boolean doValidate() { return validate; } public void setValidate(boolean validate) { this.validate = validate; } @Override public Canvas asWidget() { return null; } @Override public void clear() { } @Override public void show() { } } class TestWizard extends Wizard<String> { public TestWizard(WizardView<String> wizardView) { super(wizardView); } @Override public void onCancel() { } @Override public void onFinish() { } } public class TestButton implements WizardButton<String> { private HandlerManager manager = new HandlerManager(this); private boolean enabled; private ButtonType type; private WizardPage<String> page; public TestButton(ButtonType type) { this.type = type; } public TestButton(WizardPage<String> page) { this.type = ButtonType.PAGE; this.page = page; } public HandlerRegistration addClickHandler(ClickHandler handler) { return manager.addHandler(ClickEvent.getType(), handler); } public void fireEvent(GwtEvent<?> event) { manager.fireEvent(event); } public void setEnabled(boolean enabled) { this.enabled = enabled; } public boolean isEnabled() { return enabled; } public ButtonType getType() { return type; } public void setActive(boolean active) { } public WizardPage<String> getPage() { return page; } } }