-
Notifications
You must be signed in to change notification settings - Fork 114
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Call the "activated" method of the default tab in a Launch Config Dialog
Also add a new test bundle that contains the proper regression test. Bundle: org.eclipse.debug.ui.tests Class: LaunchConfigurationTabGroupViewerTest This class also contains a regression test for #766 Fixes: #859
- Loading branch information
1 parent
b345854
commit 92b20bb
Showing
8 changed files
with
298 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
158 changes: 158 additions & 0 deletions
158
...rg/eclipse/debug/tests/ui/launchconfigurations/LaunchConfigurationTabGroupViewerTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,158 @@ | ||
package org.eclipse.debug.tests.ui.launchconfigurations; | ||
|
||
import static org.hamcrest.CoreMatchers.not; | ||
import static org.hamcrest.MatcherAssert.assertThat; | ||
|
||
import java.util.concurrent.atomic.AtomicReference; | ||
|
||
import org.eclipse.core.runtime.CoreException; | ||
import org.eclipse.debug.core.DebugPlugin; | ||
import org.eclipse.debug.core.ILaunchConfigurationType; | ||
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; | ||
import org.eclipse.debug.core.ILaunchManager; | ||
import org.eclipse.debug.internal.ui.DebugUIPlugin; | ||
import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationPresentationManager; | ||
import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog; | ||
import org.eclipse.debug.tests.AbstractDebugTest; | ||
import org.eclipse.debug.tests.ui.launchconfigurations.tabs.SpyTab; | ||
import org.eclipse.debug.ui.IDebugUIConstants; | ||
import org.eclipse.debug.ui.ILaunchConfigurationDialog; | ||
import org.eclipse.debug.ui.ILaunchConfigurationTab; | ||
import org.eclipse.debug.ui.ILaunchConfigurationTabGroup; | ||
import org.eclipse.swt.widgets.Display; | ||
import org.junit.Before; | ||
import org.junit.Test; | ||
|
||
public class LaunchConfigurationTabGroupViewerTest extends AbstractDebugTest { | ||
|
||
private static interface ThrowingRunnable<T extends Exception> { | ||
void run() throws T; | ||
} | ||
|
||
private static final String LAUNCH_CONFIG_TYPE_ID = "spy.type"; | ||
private static final String LAUNCH_CONFIG_MODE = ILaunchManager.RUN_MODE; | ||
private ILaunchConfigurationType fLaunchConfigurationType; | ||
private LaunchConfigurationsDialog fLaunchConfigurationsDialog; | ||
|
||
@Before | ||
public void createDialog() throws CoreException { | ||
fLaunchConfigurationType = getLaunchManager().getLaunchConfigurationType(LAUNCH_CONFIG_TYPE_ID); | ||
ILaunchConfigurationTabGroup tabGroup = getLaunchConfigurationTabGroup(fLaunchConfigurationType); | ||
|
||
fLaunchConfigurationsDialog = (LaunchConfigurationsDialog) createLaunchConfigurationDialog(); | ||
tabGroup.createTabs(fLaunchConfigurationsDialog, ILaunchManager.RUN_MODE); | ||
} | ||
|
||
@Test | ||
public void tesAllTabsAreInitializedByDefault() { | ||
// Create a launch configuration with a unique name | ||
ThrowingRunnable<CoreException> createAndSelect1LaunchConfig = () -> { | ||
fLaunchConfigurationsDialog.getTabViewer().setInput(createLaunchConfigurationInstance()); | ||
}; | ||
|
||
final ILaunchConfigurationTab[] tabs = runOnDialog(createAndSelect1LaunchConfig); | ||
for (int i = 0; i < tabs.length; i++) { | ||
assertThat("Tab " + i + " was not initialized", ((SpyTab) tabs[i]).isInitialized()); | ||
} | ||
} | ||
|
||
@Test | ||
public void testFirstTabIsActivatedByDefault() { | ||
// Create a launch configuration with a unique name | ||
ThrowingRunnable<CoreException> createAndSelect1LaunchConfig = () -> { | ||
fLaunchConfigurationsDialog.getTabViewer().setInput(createLaunchConfigurationInstance()); | ||
}; | ||
|
||
final ILaunchConfigurationTab[] tabs = runOnDialog(createAndSelect1LaunchConfig); | ||
assertThat("The 1st tab was not activated", ((SpyTab) tabs[0]).isActivated()); | ||
} | ||
|
||
@Test | ||
public void testOtherTabInOtherConfigIsActivated() { | ||
int secondTabIndex = 1; | ||
|
||
ThrowingRunnable<CoreException> setActiveTab = () -> { | ||
// Create and select launch config | ||
fLaunchConfigurationsDialog.getTabViewer().setInput(createLaunchConfigurationInstance()); | ||
|
||
// Select another tab | ||
fLaunchConfigurationsDialog.getTabViewer().setActiveTab(secondTabIndex); | ||
|
||
// Create a new launch config. This one should activate the same tab | ||
// by default. | ||
fLaunchConfigurationsDialog.getTabViewer().setInput(createLaunchConfigurationInstance()); | ||
}; | ||
|
||
final ILaunchConfigurationTab[] tabs = runOnDialog(setActiveTab); | ||
|
||
assertThat("The 1st tab of the other launch configuration shouldn't have been activated", not(((SpyTab) tabs[0]).isActivated())); | ||
assertThat("The tab was not activated", ((SpyTab) tabs[secondTabIndex]).isActivated()); | ||
} | ||
|
||
@Test | ||
public void testOtherTabIsActivated() { | ||
int secondTabIndex = 1; | ||
|
||
ThrowingRunnable<CoreException> setActiveTab = () -> { | ||
// Create and select launch config | ||
fLaunchConfigurationsDialog.getTabViewer().setInput(createLaunchConfigurationInstance()); | ||
|
||
// Select another tab | ||
fLaunchConfigurationsDialog.getTabViewer().setActiveTab(secondTabIndex); | ||
}; | ||
|
||
final ILaunchConfigurationTab[] tabs = runOnDialog(setActiveTab); | ||
|
||
assertThat("The tab was not activated", ((SpyTab) tabs[secondTabIndex]).isActivated()); | ||
} | ||
|
||
private ILaunchConfigurationWorkingCopy createLaunchConfigurationInstance() throws CoreException { | ||
return fLaunchConfigurationType.newInstance(null, "MyLaunchConfiguration_" + System.currentTimeMillis()); | ||
} | ||
|
||
private <T extends Exception> ILaunchConfigurationTab[] runOnDialog(ThrowingRunnable<T> runnable) { | ||
AtomicReference<ILaunchConfigurationTab[]> tabsRef = new AtomicReference<>(); | ||
AtomicReference<Throwable> throwableRef = new AtomicReference<>(); | ||
|
||
Display.getCurrent().asyncExec(() -> { | ||
try { | ||
|
||
runnable.run(); | ||
|
||
// I need to store the tabs here because the tab viewer (and all | ||
// its tabs) are | ||
// gone as soon as the dialog is closed | ||
tabsRef.set(fLaunchConfigurationsDialog.getTabs()); | ||
|
||
} catch (Throwable e) { | ||
// neither calling "fail" not throwing an exception will let the | ||
// test fail so I | ||
// need to store this and check it outside of the runnable | ||
throwableRef.set(e); | ||
DebugPlugin.log(e); | ||
} finally { | ||
fLaunchConfigurationsDialog.close(); | ||
} | ||
}); | ||
|
||
fLaunchConfigurationsDialog.open(); | ||
|
||
if (throwableRef.get() != null) { | ||
throw new AssertionError("An exception occurred while executing the runnable.", throwableRef.get()); | ||
} | ||
|
||
return tabsRef.get(); | ||
} | ||
|
||
protected ILaunchConfigurationTabGroup getLaunchConfigurationTabGroup(ILaunchConfigurationType launchConfigurationType) throws CoreException { | ||
return LaunchConfigurationPresentationManager.getDefault().getTabGroup(launchConfigurationType, LAUNCH_CONFIG_MODE); | ||
} | ||
|
||
protected ILaunchConfigurationDialog createLaunchConfigurationDialog() { | ||
return new LaunchConfigurationsDialog(null, DebugUIPlugin.getDefault().getLaunchConfigurationManager().getLaunchGroup(IDebugUIConstants.ID_DEBUG_LAUNCH_GROUP)); | ||
} | ||
|
||
protected ILaunchManager getLaunchManager() { | ||
return DebugPlugin.getDefault().getLaunchManager(); | ||
} | ||
} |
62 changes: 62 additions & 0 deletions
62
....eclipse.debug.tests/src/org/eclipse/debug/tests/ui/launchconfigurations/tabs/SpyTab.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
package org.eclipse.debug.tests.ui.launchconfigurations.tabs; | ||
|
||
import org.eclipse.debug.core.ILaunchConfiguration; | ||
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; | ||
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; | ||
import org.eclipse.swt.widgets.Composite; | ||
|
||
/** | ||
* A Tab whose sole purpose is to say if it was initialized and activated | ||
* properly | ||
*/ | ||
public abstract class SpyTab extends AbstractLaunchConfigurationTab { | ||
|
||
private boolean initialized; | ||
private boolean activated; | ||
|
||
@Override | ||
public void createControl(Composite parent) { | ||
} | ||
|
||
@Override | ||
public String getName() { | ||
return getClass().getSimpleName(); | ||
} | ||
|
||
@Override | ||
public void initializeFrom(ILaunchConfiguration configuration) { | ||
initialized = true; | ||
} | ||
|
||
@Override | ||
public void activated(ILaunchConfigurationWorkingCopy workingCopy) { | ||
activated = true; | ||
} | ||
|
||
@Override | ||
public void performApply(ILaunchConfigurationWorkingCopy configuration) { | ||
} | ||
|
||
@Override | ||
public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { | ||
} | ||
|
||
public boolean isInitialized() { | ||
return initialized; | ||
} | ||
|
||
public boolean isActivated() { | ||
return activated; | ||
} | ||
|
||
// These 3 are necessary because I need 3 tabs in the launch config and using | ||
// always the same kind of tab produces incorrect results | ||
public static class SpyTabA extends SpyTab { | ||
} | ||
|
||
public static class SpyTabB extends SpyTab { | ||
} | ||
|
||
public static class SpyTabC extends SpyTab { | ||
} | ||
} |
17 changes: 17 additions & 0 deletions
17
...pse.debug.tests/src/org/eclipse/debug/tests/ui/launchconfigurations/tabs/SpyTabGroup.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package org.eclipse.debug.tests.ui.launchconfigurations.tabs; | ||
|
||
import org.eclipse.debug.tests.ui.launchconfigurations.tabs.SpyTab.SpyTabA; | ||
import org.eclipse.debug.tests.ui.launchconfigurations.tabs.SpyTab.SpyTabB; | ||
import org.eclipse.debug.tests.ui.launchconfigurations.tabs.SpyTab.SpyTabC; | ||
import org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup; | ||
import org.eclipse.debug.ui.ILaunchConfigurationDialog; | ||
import org.eclipse.debug.ui.ILaunchConfigurationTab; | ||
|
||
public class SpyTabGroup extends AbstractLaunchConfigurationTabGroup { | ||
|
||
@Override | ||
public void createTabs(ILaunchConfigurationDialog dialog, String mode) { | ||
setTabs(new ILaunchConfigurationTab[] { new SpyTabA(), new SpyTabB(), new SpyTabC() }); | ||
} | ||
|
||
} |
Oops, something went wrong.