package com.codeaffine.extras.launch.internal.cleanup; import static org.assertj.core.api.Assertions.assertThat; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunchConfigurationType; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferenceStore; import org.eclipse.swt.SWT; 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; public class CleanupPreferencePagePDETest { @Rule public final LaunchConfigRule launchConfigRule = new LaunchConfigRule(); @Rule public final DisplayHelper displayHelper = new DisplayHelper(); private LaunchPreferences launchPreferences; private CleanupPreferencePage preferencePage; @Before public void setUp() { PreferenceStore preferenceStore = new PreferenceStore(); launchPreferences = new LaunchPreferences( preferenceStore ); preferencePage = new CleanupPreferencePage( preferenceStore ); } @Test public void testCreateContentsWithCleanupDisabled() { preferencePage.createContents( displayHelper.createShell() ); assertThat( preferencePage.cleanupButton.getSelection() ).isFalse(); assertThat( getCheckedCleanupLaunchConfigTypes() ).isEmpty(); assertThat( preferencePage.cleanupTypesLabel.getEnabled() ).isFalse(); assertThat( preferencePage.cleanupTypesViewer.getControl().getEnabled() ).isFalse(); } @Test public void testCreateContentsWithCleanupEnabled() { launchPreferences.setCleanupGeneratedLaunchConfigs( true ); preferencePage.createContents( displayHelper.createShell() ); assertThat( preferencePage.cleanupButton.getSelection() ).isTrue(); } @Test public void testCreateContentsWithCleanupLaunchConfigTypes() { ILaunchConfigurationType type = launchConfigRule.getPublicTestLaunchConfigType(); prepareLaunchPreferences( true, type ); preferencePage.createContents( displayHelper.createShell() ); assertThat( getCheckedCleanupLaunchConfigTypes() ).containsOnly( type ); } @Test public void testSelectCleanupEnabledButton() { preferencePage.createContents( displayHelper.createShell() ); preferencePage.cleanupButton.setSelection( true ); preferencePage.cleanupButton.notifyListeners( SWT.Selection, null ); assertThat( preferencePage.cleanupTypesLabel.getEnabled() ).isTrue(); assertThat( preferencePage.cleanupTypesViewer.getControl().getEnabled() ).isTrue(); assertThat( preferencePage.selectAllButton.getEnabled() ).isTrue(); assertThat( preferencePage.deselectAllButton.getEnabled() ).isTrue(); assertThat( launchPreferences.isCleanupGeneratedLaunchConfigs() ).isTrue(); } @Test public void testDeselectCleanupEnabledButtonWhileLaunchConfigTypesChecked() { ILaunchConfigurationType type = launchConfigRule.getPublicTestLaunchConfigType(); prepareLaunchPreferences( true, type ); preferencePage.createContents( displayHelper.createShell() ); preferencePage.cleanupButton.setSelection( false ); preferencePage.cleanupButton.notifyListeners( SWT.Selection, null ); assertThat( getCheckedCleanupLaunchConfigTypes() ).containsOnly( type ); } @Test public void testSelectAllButton() { preferencePage.createContents( displayHelper.createShell() ); preferencePage.selectAllButton.notifyListeners( SWT.Selection, null ); assertThat( getCheckedCleanupLaunchConfigTypes() ).isNotEmpty(); assertThat( getCheckedCleanupLaunchConfigTypes().length ).isEqualTo( getCleanupLaunchConfigTypesCount() ); } @Test public void testDeselectAllButton() { ILaunchConfigurationType type = launchConfigRule.getPublicTestLaunchConfigType(); prepareLaunchPreferences( true, type ); preferencePage.createContents( displayHelper.createShell() ); preferencePage.selectAllButton.notifyListeners( SWT.Selection, null ); preferencePage.deselectAllButton.notifyListeners( SWT.Selection, null ); assertThat( getCheckedCleanupLaunchConfigTypes() ).isEmpty(); } @Test public void testApplyDefaults() { prepareLaunchPreferences( true, launchConfigRule.getPublicTestLaunchConfigType() ); preferencePage.createContents( displayHelper.createShell() ); preferencePage.performDefaults(); assertThat( preferencePage.cleanupButton.getSelection() ).isFalse(); assertThat( getCheckedCleanupLaunchConfigTypes() ).isEmpty(); } @Test public void testPerformOk() { ILaunchConfigurationType type = launchConfigRule.getPublicTestLaunchConfigType(); preferencePage.createContents( displayHelper.createShell() ); preferencePage.cleanupButton.setSelection( true ); preferencePage.cleanupButton.notifyListeners( SWT.Selection, null ); preferencePage.cleanupTypesViewer.setChecked( type, true ); preferencePage.performOk(); assertThat( launchPreferences.isCleanupGeneratedLaunchConfigs() ).isTrue(); assertThat( launchPreferences.getCleanupGenerateLaunchConfigTypes() ).isEqualTo( type.getIdentifier() ); } @Test public void testGetTitle() { String title = preferencePage.getTitle(); assertThat( title ).isNotEmpty(); } @Test public void testGetPreferenceStore() { IPreferenceStore preferenceStore = preferencePage.getPreferenceStore(); assertThat( preferenceStore ).isEqualTo( launchPreferences.getPreferenceStore() ); } private Object[] getCheckedCleanupLaunchConfigTypes() { return preferencePage.cleanupTypesViewer.getCheckedElements(); } private int getCleanupLaunchConfigTypesCount() { return preferencePage.cleanupTypesViewer.getTable().getItemCount(); } private void prepareLaunchPreferences( boolean cleanupEnabled, ILaunchConfigurationType... types ) { launchPreferences.setCleanupGeneratedLaunchConfigs( cleanupEnabled ); ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); String serializedTypes = new LaunchConfigTypeSerializer( launchManager ).serialize( types ); launchPreferences.setCleanupGenerateLaunchConfigTypes( serializedTypes ); } }