Skip to content

Commit 2e78e5c

Browse files
committed
Move leaked shell check to CloseTestWindowsRule
The UITestCase contains a leaked shell check that would be better places in a test rule and fits to the already existing CloseTestWindowsRule. This change integrates the leaked shell check into the CloseTestWindowsRule.
1 parent 1d2149c commit 2e78e5c

File tree

3 files changed

+30
-36
lines changed

3 files changed

+30
-36
lines changed

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

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,41 @@
1616
package org.eclipse.ui.tests.harness.util;
1717

1818
import static org.eclipse.ui.tests.harness.util.UITestUtil.processEvents;
19+
import static org.junit.Assert.assertEquals;
1920

2021
import java.util.ArrayList;
2122
import java.util.List;
23+
import java.util.Set;
2224

25+
import org.eclipse.swt.widgets.Shell;
2326
import org.eclipse.ui.IWindowListener;
2427
import org.eclipse.ui.IWorkbenchWindow;
2528
import org.eclipse.ui.PlatformUI;
2629
import org.junit.rules.ExternalResource;
2730

2831
public class CloseTestWindowsRule extends ExternalResource {
2932

30-
private boolean enabled = true;
31-
3233
private final List<IWorkbenchWindow> testWindows;
3334

3435
private TestWindowListener windowListener;
3536

37+
private Set<Shell> preExistingShells;
38+
39+
private final boolean checkForLeaks;
40+
3641
public CloseTestWindowsRule() {
42+
this(true);
43+
}
44+
45+
public CloseTestWindowsRule(boolean checkForLeaks) {
3746
testWindows = new ArrayList<>(3);
47+
this.checkForLeaks = checkForLeaks;
3848
}
3949

4050
@Override
4151
protected void before() throws Exception {
4252
addWindowListener();
53+
this.preExistingShells = Set.of(PlatformUI.getWorkbench().getDisplay().getShells());
4354
}
4455

4556
@Override
@@ -48,6 +59,19 @@ protected void after() {
4859
processEvents();
4960
closeAllTestWindows();
5061
processEvents();
62+
// Check for shell leak.
63+
List<String> leakedModalShellTitles = new ArrayList<>();
64+
Shell[] shells = PlatformUI.getWorkbench().getDisplay().getShells();
65+
for (Shell shell : shells) {
66+
if (!shell.isDisposed() && !preExistingShells.contains(shell)) {
67+
leakedModalShellTitles.add(shell.getText());
68+
shell.close();
69+
}
70+
}
71+
if (checkForLeaks) {
72+
assertEquals("Test leaked modal shell: [" + String.join(", ", leakedModalShellTitles) + "]", 0,
73+
leakedModalShellTitles.size());
74+
}
5175
}
5276

5377
/**
@@ -78,10 +102,6 @@ private void closeAllTestWindows() {
78102
testWindows.clear();
79103
}
80104

81-
public void setEnabled(boolean enabled) {
82-
this.enabled = enabled;
83-
}
84-
85105
class TestWindowListener implements IWindowListener {
86106
@Override
87107
public void windowActivated(IWorkbenchWindow window) {
@@ -95,16 +115,12 @@ public void windowDeactivated(IWorkbenchWindow window) {
95115

96116
@Override
97117
public void windowClosed(IWorkbenchWindow window) {
98-
if (enabled) {
99-
testWindows.remove(window);
100-
}
118+
testWindows.remove(window);
101119
}
102120

103121
@Override
104122
public void windowOpened(IWorkbenchWindow window) {
105-
if (enabled) {
106-
testWindows.add(window);
107-
}
123+
testWindows.add(window);
108124
}
109125
}
110126
}

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

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,6 @@
1616
*******************************************************************************/
1717
package org.eclipse.ui.tests.harness.util;
1818

19-
import java.util.ArrayList;
20-
import java.util.List;
21-
import java.util.Set;
22-
23-
import org.eclipse.swt.widgets.Shell;
24-
import org.eclipse.ui.PlatformUI;
2519
import org.junit.After;
2620
import org.junit.Before;
2721
import org.junit.Rule;
@@ -46,8 +40,6 @@ public abstract class UITestCase extends TestCase {
4640
*/
4741
private final CloseTestWindowsRule closeTestWindows = new CloseTestWindowsRule();
4842

49-
private Set<Shell> preExistingShells;
50-
5143
/**
5244
* Required to preserve the existing logging output when running tests with
5345
* {@link BlockJUnit4ClassRunner}.
@@ -97,11 +89,9 @@ protected void trace(String msg) {
9789
public final void setUp() throws Exception {
9890
super.setUp();
9991
closeTestWindows.before();
100-
this.preExistingShells = Set.of(PlatformUI.getWorkbench().getDisplay().getShells());
10192
String name = runningTest != null ? runningTest : this.getName();
10293
trace(TestRunLogUtil.formatTestStartMessage(name));
10394
doSetUp();
104-
10595
}
10696

10797
/**
@@ -129,18 +119,7 @@ public final void tearDown() throws Exception {
129119
String name = runningTest != null ? runningTest : this.getName();
130120
trace(TestRunLogUtil.formatTestFinishedMessage(name));
131121
doTearDown();
132-
133-
// Check for shell leak.
134-
List<String> leakedModalShellTitles = new ArrayList<>();
135-
Shell[] shells = PlatformUI.getWorkbench().getDisplay().getShells();
136-
for (Shell shell : shells) {
137-
if (!shell.isDisposed() && !preExistingShells.contains(shell)) {
138-
leakedModalShellTitles.add(shell.getText());
139-
shell.close();
140-
}
141-
}
142-
assertEquals("Test leaked modal shell: [" + String.join(", ", leakedModalShellTitles) + "]", 0,
143-
leakedModalShellTitles.size());
122+
closeTestWindows.after();
144123
}
145124

146125
/**
@@ -151,7 +130,6 @@ public final void tearDown() throws Exception {
151130
* Subclasses may extend.
152131
*/
153132
protected void doTearDown() throws Exception {
154-
closeTestWindows.after();
155133
}
156134

157135
}

tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/stress/OpenCloseTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public class OpenCloseTest {
5959
private IWorkbenchPage page;
6060

6161
@Rule
62-
public CloseTestWindowsRule closeTestWindows = new CloseTestWindowsRule();
62+
public CloseTestWindowsRule closeTestWindows = new CloseTestWindowsRule(false);
6363

6464
@Before
6565
public void setup() {

0 commit comments

Comments
 (0)