package com.codeaffine.extras.launch.internal.dialog;
import static org.assertj.core.api.Assertions.assertThat;
import static org.eclipse.debug.ui.IDebugUIConstants.ATTR_PRIVATE;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.preferences.InstanceScope;
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.debug.ui.IDebugUIConstants;
import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import com.codeaffine.extras.launch.internal.dialog.LaunchConfigProvider;
import com.codeaffine.extras.launch.test.LaunchConfigRule;
import com.codeaffine.extras.test.util.ProjectHelper;
public class LaunchConfigProviderPDETest {
private static final String DEBUG_PLUGIN_ID = IDebugUIConstants.PLUGIN_ID;
private static final String PREF_FILTER_LAUNCH_CLOSED = DEBUG_PLUGIN_ID + ".PREF_FILTER_LAUNCH_CLOSED";
private static final String PREF_FILTER_LAUNCH_DELETED = DEBUG_PLUGIN_ID + ".PREF_FILTER_LAUNCH_DELETED";
@Rule
public final LaunchConfigRule launchConfigRule = new LaunchConfigRule();
@Rule
public final ProjectHelper projectHelper = new ProjectHelper();
private ScopedPreferenceStore preferenceStore;
private ILaunchManager launchManager;
private LaunchConfigProvider launchConfigProvider;
@Before
public void setUp() {
preferenceStore = new ScopedPreferenceStore( InstanceScope.INSTANCE, DEBUG_PLUGIN_ID );
launchManager = DebugPlugin.getDefault().getLaunchManager();
setFilterLaunchConfigsInClosedProjects( false );
setFilterLaunchConfigsInDeletedProjects( false );
launchConfigProvider = new LaunchConfigProvider( launchManager );
}
@Test
public void testNoLaunchConfigs() throws CoreException {
ILaunchConfiguration[] launchConfigs = launchConfigProvider.getLaunchConfigurations();
assertThat( launchConfigs ).isEmpty();
}
@Test
public void testSingleLaunchConfig() throws CoreException {
ILaunchConfiguration launchConfig = launchConfigRule.createPublicLaunchConfig().doSave();
ILaunchConfiguration[] launchConfigs = launchConfigProvider.getLaunchConfigurations();
assertThat( launchConfigs ).containsOnly( launchConfig );
}
@Test
public void testKeepWhenPrivate() throws CoreException {
ILaunchConfigurationWorkingCopy launchConfig = launchConfigRule.createPublicLaunchConfig();
launchConfig.setAttribute( ATTR_PRIVATE, true );
launchConfig.doSave();
ILaunchConfiguration[] launchConfigs = launchConfigProvider.getLaunchConfigurations();
assertThat( launchConfigs ).hasSize( 1 );
}
@Test
public void testFilterWhenMappedProjectWasDeleted() throws CoreException {
setFilterLaunchConfigsInDeletedProjects( true );
IResource resource = createLaunchConfigForResource();
ProjectHelper.delete( resource.getProject() );
ILaunchConfiguration[] launchConfigs = launchConfigProvider.getLaunchConfigurations();
assertThat( launchConfigs ).isEmpty();
}
@Test
public void testFilterWhenMappedProjectWasClosed() throws CoreException {
setFilterLaunchConfigsInClosedProjects( true );
IResource resource = createLaunchConfigForResource();
resource.getProject().close( null );
ILaunchConfiguration[] launchConfigs = launchConfigProvider.getLaunchConfigurations();
assertThat( launchConfigs ).isEmpty();
}
@Test
public void testKeepWhenMappedProjectWasDeletedAndFilterClosedOptionOn() throws CoreException {
setFilterLaunchConfigsInClosedProjects( true );
IResource resource = createLaunchConfigForResource();
ProjectHelper.delete( resource.getProject() );
ILaunchConfiguration[] launchConfigs = launchConfigProvider.getLaunchConfigurations();
assertThat( launchConfigs ).hasSize( 1 );
}
@Test
public void testKeepWhenMappedProjectWasClosedAndFilterDeletedOptionOn() throws CoreException {
setFilterLaunchConfigsInDeletedProjects( true );
IResource resource = createLaunchConfigForResource();
resource.getProject().close( null );
ILaunchConfiguration[] launchConfigs = launchConfigProvider.getLaunchConfigurations();
assertThat( launchConfigs ).hasSize( 1 );
}
private void setFilterLaunchConfigsInDeletedProjects( boolean value ) {
preferenceStore.setValue( PREF_FILTER_LAUNCH_DELETED, value );
}
private void setFilterLaunchConfigsInClosedProjects( boolean value ) {
preferenceStore.setValue( PREF_FILTER_LAUNCH_CLOSED, value );
}
private IResource createLaunchConfigForResource() throws CoreException {
ILaunchConfigurationWorkingCopy launchConfig = launchConfigRule.createPublicLaunchConfig();
IFile resource = projectHelper.createFile();
launchConfig.setMappedResources( new IResource[] { resource } );
launchConfig.doSave();
return resource;
}
}