package com.codeaffine.extras.launch.internal.dialog;
import static com.codeaffine.extras.launch.internal.dialog.LaunchSelectionDialog.EDIT_BUTTON_ID;
import static org.assertj.core.api.Assertions.assertThat;
import static org.eclipse.core.runtime.IStatus.INFO;
import static org.eclipse.debug.core.ILaunchManager.DEBUG_MODE;
import static org.eclipse.jface.dialogs.IDialogConstants.OK_ID;
import java.util.Comparator;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.DialogSettings;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
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.test.LaunchConfigRule;
import com.codeaffine.extras.launch.test.LaunchModeHelper;
public class LaunchSelectionDialogPDETest {
@Rule
public final LaunchConfigRule launchConfigRule = new LaunchConfigRule();
@Rule
public final DisplayHelper displayHelper = new DisplayHelper();
private TestableLaunchSelectionDialog dialog;
@Before
public void setUp() {
dialog = new TestableLaunchSelectionDialog( displayHelper.createShell() );
dialog.setBlockOnOpen( false );
}
@Test
public void testValidateItemWithSupportedLaunchMode() throws CoreException {
ILaunchConfiguration launchConfig = launchConfigRule.createPublicLaunchConfig().doSave();
IStatus status = dialog.validateItem( launchConfig );
assertThat( status.isOK() ).isTrue();
}
@Test
public void testValidateItemWithUnsupportedLaunchMode() throws CoreException {
LaunchModeSetting launchModeSetting = getLaunchModeSettings();
launchModeSetting.setLaunchModeId( LaunchModeHelper.TEST_LAUNCH_MODE );
ILaunchConfiguration launchConfig = launchConfigRule.createPublicLaunchConfig().doSave();
IStatus status = dialog.validateItem( launchConfig );
assertThat( status.getSeverity() ).isEqualTo( INFO );
assertThat( status.getCode() ).isEqualTo( INFO );
assertThat( status.getMessage() ).contains( "Debug" );
}
@Test
public void testGetLaunchModeId() {
String launchModeId = dialog.getLaunchModeId();
assertThat( launchModeId ).isEqualTo( DEBUG_MODE );
}
@Test
public void testOkButtonLabel() {
dialog.create();
Button button = dialog.getButton( OK_ID );
assertThat( button.getText() ).isEqualTo( getDebugModeLabel() );
}
@Test
public void testEditButtonLabel() {
dialog.create();
Button button = dialog.getButton( EDIT_BUTTON_ID );
assertThat( button.getText() ).isNotEmpty();
}
@Test
public void testInitialEditButtonEnablement() {
dialog.open();
assertThat( dialog.getButton( EDIT_BUTTON_ID ).getEnabled() ).isFalse();
}
@Test
public void testCreateExtendedContentArea() {
Control extendedContentArea = dialog.createExtendedContentArea( null );
assertThat( extendedContentArea ).isNull();
}
@Test
public void testCreateFilter() {
Object filter = dialog.createFilter();
assertThat( filter ).isNotNull();
}
@Test
public void testGetItemsComparator() {
Comparator<ILaunchConfiguration> itemsComparator = dialog.getItemsComparator();
assertThat( itemsComparator ).isNotNull();
}
@Test
public void testGetDialogSettings() {
IDialogSettings dialogSettings = dialog.getDialogSettings();
assertThat( dialogSettings ).isNotNull();
}
@Test
public void testGetElementName() throws CoreException {
ILaunchConfigurationWorkingCopy launchConfig = launchConfigRule.createPublicLaunchConfig();
String elementName = dialog.getElementName( launchConfig );
assertThat( elementName ).isEqualTo( launchConfig.getName() );
}
@Test
public void testGetInitialPattern() {
String initialPattern = dialog.getInitialPattern();
assertThat( initialPattern ).isNull();
}
@Test
public void testTitle() {
dialog.create();
String text = dialog.getShell().getText();
assertThat( text ).isNotEmpty();
}
@Test
public void testUpdateStatus() {
dialog.create();
dialog.updateStatus();
assertThat( dialog.lastStatus.isOK() ).isTrue();
assertThat( dialog.lastStatus.getMessage() ).isEmpty();
}
@Test
public void testFillContextMenu() {
dialog.create();
MenuManager menuManager = new MenuManager();
dialog.fillContextMenu( menuManager );
assertThat( menuManager.getSize() ).isEqualTo( 4 );
assertThat( menuManager.getItems()[ 0 ].getId() ).isEqualTo( EditLaunchConfigAction.ID );
assertThat( menuManager.getItems()[ 1 ] ).isInstanceOf( Separator.class );
assertThat( menuManager.getItems()[ 2 ].getId() ).isEqualTo( TerminateLaunchesAction.ID );
assertThat( menuManager.getItems()[ 3 ] ).isInstanceOf( Separator.class );
}
@Test
public void testFillViewMenu() {
dialog.create();
MenuManager menuManager = new MenuManager();
dialog.fillViewMenu( menuManager );
assertThat( menuManager.getSize() ).isEqualTo( 4 );
assertThat( menuManager.getItems()[ 1 ] ).isInstanceOf( Separator.class );
assertThat( menuManager.getItems()[ 2 ].getId() ).isEqualTo( ToggleTerminateBeforeRelaunchAction.ID );
assertThat( menuManager.getItems()[ 3 ].getId() ).isEqualTo( LaunchModeDropDownAction.ID );
}
private LaunchModeSetting getLaunchModeSettings() {
ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager();
IDialogSettings dialogSettings = dialog.getDialogSettings();
return new LaunchModeSetting( launchManager, dialogSettings );
}
private static String getDebugModeLabel() {
return DebugPlugin.getDefault().getLaunchManager().getLaunchMode( DEBUG_MODE ).getLabel();
}
public static class TestableLaunchSelectionDialog extends LaunchSelectionDialog {
private final DialogSettings dialogSettings;
private IStatus lastStatus;
public TestableLaunchSelectionDialog( Shell shell ) {
super( shell );
dialogSettings = new DialogSettings( "TestableLaunchSelectionDialog" );
}
@Override
protected void fillContextMenu( IMenuManager menuManager ) {
super.fillContextMenu( menuManager );
}
@Override
protected void updateStatus( IStatus status ) {
lastStatus = status;
super.updateStatus( status );
}
@Override
protected String getInitialPattern() {
return super.getInitialPattern();
}
@Override
protected Button getButton( int id ) {
return super.getButton( id );
}
@Override
protected IDialogSettings getDialogSettings() {
return dialogSettings;
}
}
}