Skip to content

Commit 217d22a

Browse files
committed
ImportExistingProjectsWizardTest: fix leaked Shells #2379
#2379
1 parent 7d29a59 commit 217d22a

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

tests/org.eclipse.ui.tests.harness/src/org/eclipse/ui/tests/harness/util/UITestCase.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.io.PrintStream;
2222
import java.util.ArrayList;
2323
import java.util.List;
24+
import java.util.Set;
2425
import java.util.concurrent.atomic.AtomicBoolean;
2526

2627
import org.eclipse.core.resources.ResourcesPlugin;
@@ -30,7 +31,6 @@
3031
import org.eclipse.core.runtime.jobs.Job;
3132
import org.eclipse.jface.preference.IPreferenceStore;
3233
import org.eclipse.jface.preference.PreferenceMemento;
33-
import org.eclipse.swt.SWT;
3434
import org.eclipse.swt.events.ShellEvent;
3535
import org.eclipse.swt.events.ShellListener;
3636
import org.eclipse.swt.widgets.Display;
@@ -75,6 +75,7 @@ public static IAdaptable getPageInput() {
7575
private final CloseTestWindowsRule closeTestWindows = new CloseTestWindowsRule();
7676

7777
protected IWorkbench fWorkbench;
78+
private Set<Shell> preExistingShells;
7879

7980
/** Preference helper to restore changed preference values after test run. */
8081
private final PreferenceMemento prefMemento = new PreferenceMemento();
@@ -180,6 +181,7 @@ public final void setUp() throws Exception {
180181
super.setUp();
181182
closeTestWindows.before();
182183
fWorkbench = PlatformUI.getWorkbench();
184+
this.preExistingShells = Set.of(fWorkbench.getDisplay().getShells());
183185
String name = runningTest != null ? runningTest : this.getName();
184186
trace(TestRunLogUtil.formatTestStartMessage(name));
185187
doSetUp();
@@ -212,18 +214,17 @@ public final void tearDown() throws Exception {
212214
trace(TestRunLogUtil.formatTestFinishedMessage(name));
213215
prefMemento.resetPreferences();
214216
doTearDown();
215-
fWorkbench = null;
216217

217-
// Check for modal shell leak.
218+
// Check for shell leak.
218219
List<String> leakedModalShellTitles = new ArrayList<>();
219-
Shell[] shells = PlatformUI.getWorkbench().getDisplay().getShells();
220+
Shell[] shells = fWorkbench.getDisplay().getShells();
220221
for (Shell shell : shells) {
221-
if (!shell.isDisposed() && shell.isVisible()
222-
&& (shell.getStyle() & (SWT.APPLICATION_MODAL | SWT.PRIMARY_MODAL | SWT.SYSTEM_MODAL)) != 0) {
222+
if (!shell.isDisposed() && !preExistingShells.contains(shell)) {
223223
leakedModalShellTitles.add(shell.getText());
224224
shell.close();
225225
}
226226
}
227+
fWorkbench = null;
227228
assertEquals("Test leaked modal shell: [" + String.join(", ", leakedModalShellTitles) + "]", 0,
228229
leakedModalShellTitles.size());
229230
}

tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/datatransfer/ImportExistingProjectsWizardTest.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@
5656
import org.eclipse.ui.internal.wizards.datatransfer.WizardProjectsImportPage.ProjectRecord;
5757
import org.eclipse.ui.tests.TestPlugin;
5858
import org.eclipse.ui.tests.datatransfer.ImportTestUtils.TestBuilder;
59-
import org.eclipse.ui.tests.harness.util.DialogCheck;
6059
import org.eclipse.ui.tests.harness.util.FileUtil;
6160
import org.eclipse.ui.tests.harness.util.UITestCase;
6261
import org.eclipse.ui.wizards.datatransfer.ExternalProjectImportWizard;
@@ -86,14 +85,16 @@ public class ImportExistingProjectsWizardTest extends UITestCase {
8685

8786
private String zipLocation = null;
8887

88+
private WizardDialog dialog;
89+
8990
private boolean originalRefreshSetting;
9091

9192
public ImportExistingProjectsWizardTest() {
9293
super(ImportExistingProjectsWizardTest.class.getName());
9394
}
9495

9596
private Shell getShell() {
96-
return DialogCheck.getShell();
97+
return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
9798
}
9899

99100
@Override
@@ -109,6 +110,11 @@ protected void doSetUp() throws Exception {
109110

110111
@Override
111112
protected void doTearDown() throws Exception {
113+
if (dialog != null) {
114+
dialog.close();
115+
dialog = null;
116+
}
117+
112118
IWorkspaceRoot wsRoot = ResourcesPlugin.getWorkspace().getRoot();
113119
IProject[] projects = wsRoot.getProjects();
114120
for (int i = projects.length - 1; i >= 0; i--) {
@@ -799,8 +805,6 @@ public void test14InitialValue() throws IOException, CoreException {
799805
wpip = getExternalImportWizard(null);
800806
selectedProjects = wpip.getProjectRecords();
801807
assertEquals(0, selectedProjects.length);
802-
803-
804808
}
805809

806810
@Test
@@ -900,7 +904,6 @@ private String copyZipLocation(String zipLocation) throws IOException {
900904
return ImportTestUtils.copyZipLocation(zipLocation, ARCHIVE_HELLOWORLD);
901905
}
902906

903-
904907
private WizardProjectsImportPage getNewWizard() {
905908
ImportExportWizard wizard = new ImportExportWizard(
906909
ImportExportWizard.IMPORT);
@@ -920,7 +923,10 @@ private WizardProjectsImportPage getNewWizard() {
920923

921924
Shell shell = getShell();
922925

923-
WizardDialog dialog = new WizardDialog(shell, wizard);
926+
if (dialog != null) {
927+
dialog.close();
928+
}
929+
dialog = new WizardDialog(shell, wizard);
924930
dialog.create();
925931
dialog.getShell().setSize(Math.max(100, dialog.getShell().getSize().x),
926932
100);
@@ -1176,7 +1182,10 @@ private WizardProjectsImportPage getExternalImportWizard(String initialPath) {
11761182
ExternalProjectImportWizard wizard = new ExternalProjectImportWizard(
11771183
initialPath);
11781184
wizard.init(getWorkbench(), null);
1179-
WizardDialog dialog = new WizardDialog(getShell(), wizard);
1185+
if (dialog != null) {
1186+
dialog.close();
1187+
}
1188+
dialog = new WizardDialog(getShell(), wizard);
11801189
dialog.create();
11811190

11821191
dialog.getShell().setSize(Math.max(100, dialog.getShell().getSize().x),

0 commit comments

Comments
 (0)