/******************************************************************************* * Copyright (c) 2016 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.openshift.ui.bot.test.common; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; import static org.junit.Assert.assertThat; import java.util.Date; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.jface.dialogs.PageChangingEvent; import org.eclipse.jface.wizard.IWizard; import org.eclipse.jface.wizard.Wizard; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.jboss.reddeer.common.wait.WaitUntil; import org.jboss.reddeer.core.condition.ShellWithTextIsActive; import org.jboss.reddeer.jface.wizard.WizardDialog; import org.jboss.reddeer.junit.runner.RedDeerSuite; import org.jboss.reddeer.swt.impl.shell.DefaultShell; import org.jboss.reddeer.workbench.impl.shell.WorkbenchShell; import org.jboss.tools.openshift.internal.common.ui.wizard.AbstractOpenShiftWizardPage; import org.jboss.tools.openshift.internal.common.ui.wizard.AbstractOpenShiftWizardPage.Direction; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; /** * @author adietish@redhat.com */ @RunWith(RedDeerSuite.class) public class AbstractOpenShiftWizardPageTest { private OpenShiftTestPage page1; private OpenShiftTestPage page2; private OpenShiftEventTestWizard wizard; private WizardDialog wizardBot; @Before public void setUp() { this.wizard = new OpenShiftEventTestWizard(); Shell shell = new WorkbenchShell().getSWTWidget(); org.jboss.reddeer.core.util.Display.asyncExec(new Runnable() { @Override public void run() { org.eclipse.jface.wizard.WizardDialog dialog = new org.eclipse.jface.wizard.WizardDialog(shell, wizard); dialog.create(); dialog.open(); } }); new WaitUntil(new ShellWithTextIsActive(OpenShiftEventTestWizard.TITLE)); wizardBot = new WizardDialog(); } @After public void tearDown() { DefaultShell activeShell = new DefaultShell(); if (activeShell.getText().equals(OpenShiftEventTestWizard.TITLE)){ activeShell.close(); } } @Test public void shouldFireWillGetDeactivatedAndWillGetActivatedWhenSwitchingToNextPage() { // given // when wizardBot.next(); // then OpenShiftTestPage.PageChangeEvent page1Event = page1.willGetDeactivated; assertThat(page1Event, is(notNullValue())); assertThat(page1Event.getDirection(), is(equalTo(Direction.FORWARDS))); OpenShiftTestPage.PageChangeEvent page2Event = page2.willGetActivated; assertThat(page2Event, is(notNullValue())); assertThat(page2Event.getDirection(), is(equalTo(Direction.FORWARDS))); } @Test public void shouldFireDeactivatedAndActivatedWhenSwitchingToNextPage() { // given // when wizardBot.next(); // then OpenShiftTestPage.PageChangeEvent page1Event = page1.deactivated; assertThat(page1Event, is(notNullValue())); assertThat(page1Event.getDirection(), is(nullValue())); OpenShiftTestPage.PageChangeEvent page2Event = page2.activated; assertThat(page2Event, is(notNullValue())); assertThat(page2Event.getDirection(), is(nullValue())); } @Test public void shouldFireWillGetActivatedAndWillGetDeactivatedWhenSwitchingToPreviousPage() { // given // when wizardBot.next(); page1.resetEvents(); page2.resetEvents(); wizardBot.back(); // then OpenShiftTestPage.PageChangeEvent page1Event = page1.willGetActivated; assertThat(page1Event, is(notNullValue())); assertThat(page1Event.getDirection(), is(equalTo(Direction.BACKWARDS))); OpenShiftTestPage.PageChangeEvent page2Event = page2.willGetDeactivated; assertThat(page2Event, is(notNullValue())); assertThat(page2Event.getDirection(), is(equalTo(Direction.BACKWARDS))); } @Test public void shouldFireActivatedAndDeactivatedWhenSwitchingToPreviousPage() { // given wizardBot.next(); page1.resetEvents(); page2.resetEvents(); // when wizardBot.back(); // then OpenShiftTestPage.PageChangeEvent page1Event = page1.activated; assertThat(page1Event, is(notNullValue())); assertThat(page1Event.getDirection(), is(nullValue())); OpenShiftTestPage.PageChangeEvent page2Event = page2.deactivated; assertThat(page2Event, is(notNullValue())); assertThat(page2Event.getDirection(), is(nullValue())); } private class OpenShiftEventTestWizard extends Wizard { private static final String TITLE = "OpenShiftEventTestWizard"; public OpenShiftEventTestWizard() { super(); setWindowTitle(TITLE); } @Override public void addPages() { addPage(page1 = new OpenShiftTestPage("page1", wizard)); addPage(page2 = new OpenShiftTestPage("page2", wizard)); } @Override public boolean performFinish() { return true; } } private class OpenShiftTestPage extends AbstractOpenShiftWizardPage { private PageChangeEvent activated; private PageChangeEvent deactivated; private PageChangeEvent willGetActivated; private PageChangeEvent willGetDeactivated; protected OpenShiftTestPage(String pageName, IWizard wizard) { super("title", "description", pageName, wizard); } @Override protected void doCreateControls(Composite parent, DataBindingContext dbc) { } @Override protected void onPageActivated(DataBindingContext dbc) { this.activated = new PageChangeEvent(); } @Override protected void onPageDeactivated(DataBindingContext dbc) { this.deactivated = new PageChangeEvent(); } @Override protected void onPageWillGetActivated(Direction direction, PageChangingEvent event, DataBindingContext dbc) { this.willGetActivated = new PageChangeEvent(direction); } @Override protected void onPageWillGetDeactivated(Direction direction, PageChangingEvent event, DataBindingContext dbc) { this.willGetDeactivated = new PageChangeEvent(direction); } public void resetEvents() { this.willGetActivated = null; this.activated = null; this.willGetDeactivated = null; this.deactivated = null; } public class PageChangeEvent { private Direction direction; private Date timestamp; public PageChangeEvent() { this(null); } public PageChangeEvent(Direction direction) { this.direction = direction; this.timestamp = new Date(); } public Direction getDirection() { return direction; } } } }