package com.codeaffine.extras.launch.internal.dialog; import static com.codeaffine.extras.launch.test.LaunchModeHelper.createLaunchMode; import static org.assertj.core.api.Assertions.assertThat; import static org.eclipse.debug.core.ILaunchManager.DEBUG_MODE; import static org.eclipse.debug.core.ILaunchManager.RUN_MODE; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.debug.core.ILaunchMode; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuCreator; import org.eclipse.jface.dialogs.DialogSettings; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import com.codeaffine.eclipse.swt.test.util.DisplayHelper; import com.codeaffine.extras.launch.internal.dialog.LaunchModeDropDownAction; import com.codeaffine.extras.launch.internal.dialog.LaunchModeSetting; public class LaunchModeDropDownActionTest { @Rule public final DisplayHelper displayHelper = new DisplayHelper(); private ILaunchManager launchManager; private LaunchModeSetting launchModeSetting; @Before public void setUp() { launchManager = mock( ILaunchManager.class ); when( launchManager.getLaunchModes() ).thenReturn( new ILaunchMode[ 0 ] ); DialogSettings dialogSettings = new DialogSettings( "section-name" ); launchModeSetting = new LaunchModeSetting( launchManager, dialogSettings ); } @Test public void testMenuCreator() { LaunchModeDropDownAction action = new LaunchModeDropDownAction( launchModeSetting ); IMenuCreator menuCreator = action.getMenuCreator(); assertThat( menuCreator ).isSameAs( action ); } @Test public void testText() { LaunchModeDropDownAction action = new LaunchModeDropDownAction( launchModeSetting ); String text = action.getText(); assertThat( text ).isNotEmpty(); } @Test public void testId() { LaunchModeDropDownAction action = new LaunchModeDropDownAction( launchModeSetting ); String id = action.getId(); assertThat( id ).isEqualTo( LaunchModeDropDownAction.ID ); } @Test public void testStyle() { LaunchModeDropDownAction action = new LaunchModeDropDownAction( launchModeSetting ); int style = action.getStyle(); assertThat( style ).isEqualTo( IAction.AS_DROP_DOWN_MENU ); } @Test(expected=UnsupportedOperationException.class) public void testGetMenuForControl() { LaunchModeDropDownAction action = new LaunchModeDropDownAction( launchModeSetting ); action.getMenu( ( Control )null ); } @Test public void testGetMenuForMenu() { ILaunchMode run = createLaunchMode( RUN_MODE ); ILaunchMode debug = createLaunchMode( DEBUG_MODE ); when( launchManager.getLaunchModes() ).thenReturn( new ILaunchMode[]{ run, debug } ); LaunchModeDropDownAction action = new LaunchModeDropDownAction( launchModeSetting ); Menu menu = action.getMenu( new Menu( displayHelper.createShell() ) ); assertThat( menu.getItemCount() ).isEqualTo( 2 ); assertThat( menu.getItem( 0 ).getText() ).isNotEmpty(); assertThat( menu.getItem( 0 ).getImage() ).isNull(); } @Test public void testDispose() { ILaunchMode run = createLaunchMode( RUN_MODE ); when( launchManager.getLaunchModes() ).thenReturn( new ILaunchMode[]{ run } ); LaunchModeDropDownAction action = new LaunchModeDropDownAction( launchModeSetting ); Menu menu = action.getMenu( new Menu( displayHelper.createShell() ) ); action.dispose(); assertThat( menu.isDisposed() ).isTrue(); } }