/*! * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * Copyright (c) 2002-2015 Pentaho Corporation.. All rights reserved. */ package org.pentaho.gwt.widgets.client.wizards; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.ClickListener; import com.google.gwt.user.client.ui.DeckPanel; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwtmockito.GwtMockitoTestRunner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import static org.junit.Assert.*; import static org.junit.Assert.assertFalse; import static org.mockito.Mockito.*; @RunWith( GwtMockitoTestRunner.class ) public class AbstractWizardDialogTest { private AbstractWizardDialog abstractWizardDialog; @Before public void setUp() throws Exception { abstractWizardDialog = mock( AbstractWizardDialog.class ); abstractWizardDialog.wizardDeckPanel = mock( DeckPanel.class ); } @Test @SuppressWarnings( "deprecation" ) public void testInit() throws Exception { doCallRealMethod().when( abstractWizardDialog ).init(); abstractWizardDialog.backButton = mock( Button.class ); when( abstractWizardDialog.backButton.getElement() ).thenReturn( mock( Element.class ) ); abstractWizardDialog.nextButton = mock( Button.class ); when( abstractWizardDialog.nextButton.getElement() ).thenReturn( mock( Element.class ) ); abstractWizardDialog.cancelButton = mock( Button.class ); when( abstractWizardDialog.cancelButton.getElement() ).thenReturn( mock( Element.class ) ); abstractWizardDialog.finishButton = mock( Button.class ); when( abstractWizardDialog.finishButton.getElement() ).thenReturn( mock( Element.class ) ); abstractWizardDialog.steps = mock( ListBox.class ); abstractWizardDialog.init(); verify( abstractWizardDialog.backButton ).setStyleName( AbstractWizardDialog.PENTAHO_BUTTON ); verify( abstractWizardDialog.nextButton ).setStyleName( AbstractWizardDialog.PENTAHO_BUTTON ); verify( abstractWizardDialog.cancelButton ).setStyleName( AbstractWizardDialog.PENTAHO_BUTTON ); verify( abstractWizardDialog.finishButton ).setStyleName( AbstractWizardDialog.PENTAHO_BUTTON ); verify( abstractWizardDialog.backButton ).addClickListener( any( ClickListener.class ) ); verify( abstractWizardDialog.nextButton ).addClickListener( any( ClickListener.class ) ); verify( abstractWizardDialog.cancelButton ).addClickListener( any( ClickListener.class ) ); verify( abstractWizardDialog.finishButton ).addClickListener( any( ClickListener.class ) ); verify( abstractWizardDialog.steps ).setEnabled( false ); } @Test public void testEnableNext() throws Exception { doCallRealMethod().when( abstractWizardDialog ).enableNext( anyInt() ); final AbstractWizardPanel panel = mock( AbstractWizardPanel.class ); final int index = 5; when( abstractWizardDialog.wizardDeckPanel.getWidget( index ) ).thenReturn( panel ); when( panel.canContinue() ).thenReturn( false ); assertFalse( abstractWizardDialog.enableNext( index ) ); when( panel.canContinue() ).thenReturn( true ); when( abstractWizardDialog.wizardDeckPanel.getWidgetCount() ).thenReturn( 3 ); assertFalse( abstractWizardDialog.enableNext( index ) ); when( abstractWizardDialog.wizardDeckPanel.getWidgetCount() ).thenReturn( 7 ); assertTrue( abstractWizardDialog.enableNext( index ) ); } @Test public void testEnableFinish() throws Exception { doCallRealMethod().when( abstractWizardDialog ).enableFinish( anyInt() ); final AbstractWizardPanel panel = mock( AbstractWizardPanel.class ); final int index = 5; when( abstractWizardDialog.wizardDeckPanel.getWidget( index ) ).thenReturn( panel ); when( panel.canFinish() ).thenReturn( false ); assertFalse( abstractWizardDialog.enableFinish( index ) ); when( panel.canFinish() ).thenReturn( true ); assertTrue( abstractWizardDialog.enableFinish( index ) ); } @Test public void testEnableBack() throws Exception { doCallRealMethod().when( abstractWizardDialog ).enableBack( anyInt() ); assertFalse( abstractWizardDialog.enableBack( 0 ) ); assertFalse( abstractWizardDialog.enableBack( -1 ) ); assertTrue( abstractWizardDialog.enableBack( 1 ) ); assertTrue( abstractWizardDialog.enableBack( 10 ) ); } @Test public void testShowNext() throws Exception { doCallRealMethod().when( abstractWizardDialog ).showNext( anyInt() ); final int index = 5; when( abstractWizardDialog.wizardDeckPanel.getWidgetCount() ).thenReturn( 0 ); assertFalse( abstractWizardDialog.showNext( index ) ); when( abstractWizardDialog.wizardDeckPanel.getWidgetCount() ).thenReturn( 1 ); assertFalse( abstractWizardDialog.showNext( index ) ); when( abstractWizardDialog.wizardDeckPanel.getWidgetCount() ).thenReturn( 2 ); assertTrue( abstractWizardDialog.showNext( index ) ); when( abstractWizardDialog.wizardDeckPanel.getWidgetCount() ).thenReturn( 20 ); assertTrue( abstractWizardDialog.showNext( index ) ); } @Test public void testShowBack() throws Exception { doCallRealMethod().when( abstractWizardDialog ).showBack( anyInt() ); final int index = 5; when( abstractWizardDialog.wizardDeckPanel.getWidgetCount() ).thenReturn( 0 ); assertFalse( abstractWizardDialog.showBack( index ) ); when( abstractWizardDialog.wizardDeckPanel.getWidgetCount() ).thenReturn( 1 ); assertFalse( abstractWizardDialog.showBack( index ) ); when( abstractWizardDialog.wizardDeckPanel.getWidgetCount() ).thenReturn( 2 ); assertTrue( abstractWizardDialog.showBack( index ) ); when( abstractWizardDialog.wizardDeckPanel.getWidgetCount() ).thenReturn( 20 ); assertTrue( abstractWizardDialog.showBack( index ) ); } @Test public void testShowFinish() throws Exception { doCallRealMethod().when( abstractWizardDialog ).showFinish( anyInt() ); assertTrue( abstractWizardDialog.showFinish( -1 ) ); assertTrue( abstractWizardDialog.showFinish( 0 ) ); assertTrue( abstractWizardDialog.showFinish( 1 ) ); assertTrue( abstractWizardDialog.showFinish( 5 ) ); assertTrue( abstractWizardDialog.showFinish( 100 ) ); } @Test public void testGetIndex() throws Exception { doCallRealMethod().when( abstractWizardDialog ).getIndex(); final int index = 5; when( abstractWizardDialog.wizardDeckPanel.getVisibleWidget() ).thenReturn( index ); assertEquals( index, abstractWizardDialog.getIndex() ); } @Test public void testNextClicked() throws Exception { doCallRealMethod().when( abstractWizardDialog ).nextClicked(); abstractWizardDialog.steps = mock( ListBox.class ); final int index = 5; when( abstractWizardDialog.steps.getSelectedIndex() ).thenReturn( index ); final AbstractWizardPanel nextWidget = mock( AbstractWizardPanel.class ); when( abstractWizardDialog.wizardDeckPanel.getWidget( index + 1 ) ).thenReturn( nextWidget ); final AbstractWizardPanel prevWidget = mock( AbstractWizardPanel.class ); when( abstractWizardDialog.wizardDeckPanel.getWidget( index ) ).thenReturn( prevWidget ); when( abstractWizardDialog.onNext( nextWidget, prevWidget ) ).thenReturn( false ); abstractWizardDialog.nextClicked(); verify( prevWidget, never() ).removeWizardPanelListener( any( IWizardPanelListener.class ) ); verify( nextWidget, never() ).addWizardPanelListener( any( IWizardPanelListener.class ) ); verify( abstractWizardDialog, never() ).updateGUI( anyInt() ); when( abstractWizardDialog.onNext( nextWidget, prevWidget ) ).thenReturn( true ); abstractWizardDialog.nextClicked(); verify( prevWidget ).removeWizardPanelListener( abstractWizardDialog ); verify( nextWidget ).addWizardPanelListener( abstractWizardDialog ); verify( abstractWizardDialog ).updateGUI( index + 1 ); } @Test public void testBackClicked() throws Exception { doCallRealMethod().when( abstractWizardDialog ).backClicked(); final int index = 5; when( abstractWizardDialog.getIndex() ).thenReturn( index ); final AbstractWizardPanel currWidget = mock( AbstractWizardPanel.class ); when( abstractWizardDialog.wizardDeckPanel.getWidget( index ) ).thenReturn( currWidget ); final AbstractWizardPanel prevWidget = mock( AbstractWizardPanel.class ); when( abstractWizardDialog.wizardDeckPanel.getWidget( index - 1 ) ).thenReturn( prevWidget ); when( abstractWizardDialog.onPrevious( prevWidget, currWidget ) ).thenReturn( false ); abstractWizardDialog.backClicked(); verify( currWidget, never() ).removeWizardPanelListener( any( IWizardPanelListener.class ) ); verify( prevWidget, never() ).addWizardPanelListener( any( IWizardPanelListener.class ) ); verify( abstractWizardDialog, never() ).updateGUI( anyInt() ); when( abstractWizardDialog.onPrevious( prevWidget, currWidget ) ).thenReturn( true ); abstractWizardDialog.backClicked(); verify( currWidget ).removeWizardPanelListener( abstractWizardDialog ); verify( prevWidget ).addWizardPanelListener( abstractWizardDialog ); verify( abstractWizardDialog ).updateGUI( index - 1 ); } @Test public void testFinishClicked() throws Exception { doCallRealMethod().when( abstractWizardDialog ).finishClicked(); when( abstractWizardDialog.onFinish() ).thenReturn( false ); abstractWizardDialog.finishClicked(); verify( abstractWizardDialog, never() ).hide(); when( abstractWizardDialog.onFinish() ).thenReturn( true ); abstractWizardDialog.finishClicked(); verify( abstractWizardDialog ).hide(); } @Test public void testCancelClicked() throws Exception { doCallRealMethod().when( abstractWizardDialog ).cancelClicked(); abstractWizardDialog.cancelClicked(); verify( abstractWizardDialog ).hide(); } @Test public void testUpdateGUI() throws Exception { doCallRealMethod().when( abstractWizardDialog ).updateGUI( anyInt() ); abstractWizardDialog.stepsList = mock( VerticalPanel.class ); abstractWizardDialog.finishButton = mock( Button.class ); abstractWizardDialog.backButton = mock( Button.class ); abstractWizardDialog.nextButton = mock( Button.class ); abstractWizardDialog.steps = mock( ListBox.class ); final int index = 5; abstractWizardDialog.updateGUI( index ); verify( abstractWizardDialog.stepsList ).setVisible( anyBoolean() ); verify( abstractWizardDialog ).showFinish( index ); verify( abstractWizardDialog.finishButton ).setVisible( anyBoolean() ); verify( abstractWizardDialog ).showBack( index ); verify( abstractWizardDialog.backButton ).setVisible( anyBoolean() ); verify( abstractWizardDialog ).showNext( index ); verify( abstractWizardDialog.nextButton ).setVisible( anyBoolean() ); verify( abstractWizardDialog.steps ).setSelectedIndex( index ); verify( abstractWizardDialog.wizardDeckPanel ).showWidget( index ); verify( abstractWizardDialog ).enableFinish( index ); verify( abstractWizardDialog.finishButton ).setEnabled( anyBoolean() ); verify( abstractWizardDialog ).enableBack( index ); verify( abstractWizardDialog.backButton ).setEnabled( anyBoolean() ); verify( abstractWizardDialog ).enableNext( index ); verify( abstractWizardDialog.nextButton ).setEnabled( anyBoolean() ); } @Test public void testSetWizardPanels() throws Exception { doCallRealMethod().when( abstractWizardDialog ).setWizardPanels( any( IWizardPanel[].class ) ); abstractWizardDialog.steps = mock( ListBox.class ); abstractWizardDialog.finishButton = mock( Button.class ); final AbstractWizardPanel wizardPanel = mock( AbstractWizardPanel.class ); final String wpName = "wpName"; when( wizardPanel.getName() ).thenReturn( wpName ); when( abstractWizardDialog.wizardDeckPanel.getWidget( 0 ) ).thenReturn( wizardPanel ); abstractWizardDialog.setWizardPanels( new IWizardPanel[0] ); verify( abstractWizardDialog.steps ).clear(); verify( abstractWizardDialog.wizardDeckPanel ).clear(); verify( abstractWizardDialog, never() ).updateGUI( anyInt() ); abstractWizardDialog.setWizardPanels( new AbstractWizardPanel[] { wizardPanel } ); verify( abstractWizardDialog.steps, times( 2 ) ).clear(); verify( abstractWizardDialog.wizardDeckPanel, times( 2 ) ).clear(); verify( abstractWizardDialog.steps ).addItem( wpName ); verify( abstractWizardDialog.wizardDeckPanel ).add( wizardPanel ); verify( wizardPanel ).addWizardPanelListener( abstractWizardDialog ); verify( abstractWizardDialog.finishButton ).setText( anyString() ); verify( abstractWizardDialog ).updateGUI( 0 ); } @Test public void testPanelUpdated() throws Exception { doCallRealMethod().when( abstractWizardDialog ).panelUpdated( any( IWizardPanel.class ) ); final int index = 5; when( abstractWizardDialog.getIndex() ).thenReturn( index ); abstractWizardDialog.nextButton = mock( Button.class ); abstractWizardDialog.finishButton = mock( Button.class ); abstractWizardDialog.panelUpdated( mock( IWizardPanel.class ) ); verify( abstractWizardDialog ).enableNext( index ); verify( abstractWizardDialog.nextButton ).setEnabled( anyBoolean() ); verify( abstractWizardDialog ).enableFinish( index ); verify( abstractWizardDialog.finishButton ).setEnabled( anyBoolean() ); } }