package com.codeaffine.extras.launch.internal.dialog; import static com.codeaffine.extras.launch.internal.dialog.LaunchConfigLabelProvider.LabelMode.DETAIL; import static com.codeaffine.extras.launch.internal.dialog.LaunchConfigLabelProvider.LabelMode.LIST; import static org.assertj.core.api.Assertions.assertThat; import static org.eclipse.debug.core.ILaunchManager.RUN_MODE; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Collection; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; import org.junit.After; 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.LaunchConfigLabelProvider.LabelMode; import com.codeaffine.extras.launch.test.LaunchConfigRule; import com.codeaffine.extras.test.util.ProjectHelper; public class LaunchConfigLabelProviderPDETest { @Rule public final LaunchConfigRule launchConfigRule = new LaunchConfigRule(); @Rule public final DisplayHelper displayHelper = new DisplayHelper(); @Rule public final ProjectHelper projectHelper = new ProjectHelper(); private DuplicatesDetector duplicatesDetector; private Collection<LaunchConfigLabelProvider> labelProviders; @Before public void setUp() { duplicatesDetector = mock( DuplicatesDetector.class ); } @After public void tearDown() { for( LaunchConfigLabelProvider labelProvider : labelProviders ) { labelProvider.dispose(); } } @Test public void testGetImage() throws CoreException { ILaunchConfiguration launchConfig = launchConfigRule.createPublicLaunchConfig().doSave(); LaunchConfigLabelProvider labelProvider = createLabelProvider( LIST ); Image image = labelProvider.getImage( launchConfig ); assertThat( image ).isNotNull(); } @Test public void testGetImageForDeletedLaunchConfig() throws CoreException { ILaunchConfiguration launchConfig = launchConfigRule.createPublicLaunchConfig().doSave(); launchConfig.delete(); LaunchConfigLabelProvider labelProvider = createLabelProvider( LIST ); Image image = labelProvider.getImage( launchConfig ); assertThat( image ).isNull(); } @Test public void testGetImageForRunningLaunchConfig() throws CoreException { LaunchConfigLabelProvider labelProvider = createLabelProvider( LIST ); ILaunchConfiguration launchConfig = launchConfigRule.createPublicLaunchConfig().doSave(); Image image = labelProvider.getImage( launchConfig ); launchConfig.launch( RUN_MODE, null ); Image runningImage = labelProvider.getImage( launchConfig ); assertThat( runningImage ).isNotNull(); assertThat( runningImage ).isNotEqualTo( image ); } @Test public void testGetImageForArbitraryObject() { LaunchConfigLabelProvider labelProvider = createLabelProvider( LIST ); Image image = labelProvider.getImage( new Object() ); assertThat( image ).isNull(); } @Test public void testGetListText() throws CoreException { ILaunchConfigurationWorkingCopy launchConfig = launchConfigRule.createPublicLaunchConfig(); LaunchConfigLabelProvider labelProvider = createLabelProvider( LIST ); String text = labelProvider.getText( launchConfig ); assertThat( text ).isEqualTo( launchConfig.getName() ); } @Test public void testGetListTextForDuplicate() throws CoreException { ILaunchConfigurationWorkingCopy launchConfig = launchConfigRule.createPublicLaunchConfig(); when( duplicatesDetector.isDuplicateElement( launchConfig ) ).thenReturn( true ); LaunchConfigLabelProvider labelProvider = createLabelProvider( LIST ); String text = labelProvider.getText( launchConfig ); assertThat( text ).isEqualTo( launchConfig.getName() + " - " + launchConfig.getType().getName() ); } @Test public void testGetListTextForDuplicateInContainer() throws CoreException { ILaunchConfigurationWorkingCopy launchConfig = launchConfigRule.createPublicLaunchConfig(); saveToContainer( launchConfig ); when( duplicatesDetector.isDuplicateElement( launchConfig ) ).thenReturn( true ); LaunchConfigLabelProvider labelProvider = createLabelProvider( LIST ); String text = labelProvider.getText( launchConfig ); assertThat( text ).isEqualTo( launchConfig.getName() + " - " + launchConfig.getFile().getParent().getName() ); } @Test public void testGetDetailText() throws CoreException { ILaunchConfigurationWorkingCopy launchConfig = launchConfigRule.createPublicLaunchConfig(); LaunchConfigLabelProvider labelProvider = createLabelProvider( DETAIL ); String text = labelProvider.getText( launchConfig ); assertThat( text ).isEqualTo( launchConfig.getName() + " - " + launchConfig.getType().getName() ); } @Test public void testGetDetailTextForDuplicate() throws CoreException { ILaunchConfigurationWorkingCopy launchConfig = launchConfigRule.createPublicLaunchConfig(); when( duplicatesDetector.isDuplicateElement( launchConfig ) ).thenReturn( true ); LaunchConfigLabelProvider labelProvider = createLabelProvider( DETAIL ); String text = labelProvider.getText( launchConfig ); assertThat( text ).isEqualTo( launchConfig.getName() + " - " + launchConfig.getType().getName() ); } @Test public void testGetDetailTextForContainerLaunchConfig() throws CoreException { ILaunchConfigurationWorkingCopy launchConfig = launchConfigRule.createPublicLaunchConfig(); saveToContainer( launchConfig ); LaunchConfigLabelProvider labelProvider = createLabelProvider( DETAIL ); String text = labelProvider.getText( launchConfig ); String expected = launchConfig.getName() + " - " + launchConfig.getType().getName() + " (" + launchConfig.getFile().getParent().getName() + ")"; assertThat( text ).isEqualTo( expected ); } @Test public void testGetTextForNullArgument() { LaunchConfigLabelProvider labelProvider = createLabelProvider( LIST ); String text = labelProvider.getText( null ); assertThat( text ).isNotNull(); } @Test public void testGetTextForArbitraryObject() { LaunchConfigLabelProvider labelProvider = createLabelProvider( LIST ); String text = labelProvider.getText( new Object() ); assertThat( text ).isNotNull(); } private LaunchConfigLabelProvider createLabelProvider( LabelMode labelMode ) { labelProviders = new ArrayList<>(); Display display = displayHelper.getDisplay(); LaunchConfigLabelProvider result = new LaunchConfigLabelProvider( display, duplicatesDetector, labelMode ); labelProviders.add( result ); return result; } private void saveToContainer( ILaunchConfigurationWorkingCopy launchConfig ) throws CoreException { launchConfig.setContainer( projectHelper.getProject() ); launchConfig.doSave(); } }