Skip to content

Commit af2cde7

Browse files
vogellaakurtakov
authored andcommitted
Migrate tests using JUnit 4 SwtLeakTestWatcher rule to JUni5
Create SwtLeakExtension JUnit 5 extension and migrated all 10 identified test classes,
1 parent 8032c04 commit af2cde7

10 files changed

Lines changed: 95 additions & 113 deletions

File tree

tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/SwtLeakTestWatcher.java renamed to tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/SwtLeakExtension.java

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2000, 2023 IBM Corporation and others.
2+
* Copyright (c) 2026 IBM Corporation and others.
33
*
44
* This program and the accompanying materials
55
* are made available under the terms of the Eclipse Public License 2.0
@@ -20,39 +20,36 @@
2020
import org.eclipse.swt.widgets.Shell;
2121
import org.eclipse.ui.IWorkbench;
2222
import org.eclipse.ui.PlatformUI;
23-
import org.junit.Assert;
24-
import org.junit.rules.TestWatcher;
25-
import org.junit.runner.Description;
23+
import org.junit.jupiter.api.Assertions;
24+
import org.junit.jupiter.api.extension.AfterEachCallback;
25+
import org.junit.jupiter.api.extension.BeforeEachCallback;
26+
import org.junit.jupiter.api.extension.ExtensionContext;
2627

27-
public class SwtLeakTestWatcher extends TestWatcher {
28+
public class SwtLeakExtension implements BeforeEachCallback, AfterEachCallback {
2829

29-
IWorkbench workbench;
30-
Set<Shell> preExistingShells;
30+
private Set<Shell> preExistingShells;
3131

3232
@Override
33-
protected void starting(Description description) {
34-
workbench = PlatformUI.getWorkbench();
33+
public void beforeEach(ExtensionContext context) throws Exception {
34+
IWorkbench workbench = PlatformUI.getWorkbench();
3535
preExistingShells = Set.of(workbench.getDisplay().getShells());
36-
super.starting(description);
3736
}
3837

3938
@Override
40-
protected void finished(Description description) {
39+
public void afterEach(ExtensionContext context) throws Exception {
40+
IWorkbench workbench = PlatformUI.getWorkbench();
4141
// Check for shell leak.
4242
List<String> leakedModalShellTitles = new ArrayList<>();
4343
Shell[] shells = workbench.getDisplay().getShells();
4444
for (Shell shell : shells) {
4545
if (!shell.isDisposed() && !preExistingShells.contains(shell)) {
4646
leakedModalShellTitles.add(shell.getText());
47-
// closing shell may introduce "not disposed" errors in next tests :
48-
// shell.close();
4947
}
5048
}
5149
if (!leakedModalShellTitles.isEmpty()) {
52-
Assert.fail(description.getClassName() + "." + description.getDisplayName()
50+
Assertions.fail(context.getRequiredTestClass().getName() + "." + context.getDisplayName()
5351
+ " Test leaked modal shell(s): [" + String.join(", ", leakedModalShellTitles) + "]");
5452
}
55-
super.finished(description);
5653
}
5754

58-
}
55+
}

tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/concurrency/NestedSyncExecDeadlockTest.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
**********************************************************************/
1515
package org.eclipse.ui.tests.concurrency;
1616

17-
import static org.junit.Assert.assertFalse;
17+
import static org.junit.jupiter.api.Assertions.assertFalse;
1818

1919
import org.eclipse.core.resources.IProject;
2020
import org.eclipse.core.resources.IResource;
@@ -29,21 +29,20 @@
2929
import org.eclipse.swt.widgets.Display;
3030
import org.eclipse.swt.widgets.Shell;
3131
import org.eclipse.ui.actions.WorkspaceModifyOperation;
32-
import org.eclipse.ui.tests.SwtLeakTestWatcher;
33-
import org.junit.After;
34-
import org.junit.Before;
35-
import org.junit.Rule;
36-
import org.junit.Test;
37-
import org.junit.rules.TestWatcher;
32+
import org.eclipse.ui.tests.SwtLeakExtension;
33+
import org.junit.jupiter.api.AfterEach;
34+
import org.junit.jupiter.api.BeforeEach;
35+
import org.junit.jupiter.api.Test;
36+
import org.junit.jupiter.api.extension.RegisterExtension;
3837

3938
/**
4039
* This is a regression test for a case where a recursive attempt to syncExec
4140
* from within code that owns a lock would cause deadlock. See bug 76378 for details.
4241
*/
4342
public class NestedSyncExecDeadlockTest {
4443

45-
@Rule
46-
public TestWatcher swtLeakTestWatcher = new SwtLeakTestWatcher();
44+
@RegisterExtension
45+
public SwtLeakExtension swtLeakExtension = new SwtLeakExtension();
4746

4847
private static class ResourceListener implements IResourceChangeListener {
4948
@Override
@@ -87,7 +86,7 @@ public void execute(final IProgressMonitor pm) {
8786
shell.close();
8887
}
8988

90-
@Before
89+
@BeforeEach
9190
public void setUp() throws Exception {
9291
project = workspace.getRoot().getProject("test-deadlock");
9392

@@ -100,7 +99,7 @@ public void setUp() throws Exception {
10099
workspace.addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE);
101100
}
102101

103-
@After
102+
@AfterEach
104103
public void tearDown() throws Exception {
105104
if (listener != null) {
106105
workspace.removeResourceChangeListener(listener);

tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/concurrency/TestBug108162.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*******************************************************************************/
1414
package org.eclipse.ui.tests.concurrency;
1515

16-
import static org.junit.Assert.fail;
16+
import static org.junit.jupiter.api.Assertions.fail;
1717

1818
import java.lang.reflect.InvocationTargetException;
1919

@@ -26,10 +26,9 @@
2626
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
2727
import org.eclipse.swt.widgets.Shell;
2828
import org.eclipse.ui.actions.WorkspaceModifyOperation;
29-
import org.eclipse.ui.tests.SwtLeakTestWatcher;
30-
import org.junit.Rule;
31-
import org.junit.Test;
32-
import org.junit.rules.TestWatcher;
29+
import org.eclipse.ui.tests.SwtLeakExtension;
30+
import org.junit.jupiter.api.Test;
31+
import org.junit.jupiter.api.extension.RegisterExtension;
3332

3433
/**
3534
* Tests the following sequence of events:
@@ -42,8 +41,8 @@
4241
*/
4342
public class TestBug108162 {
4443

45-
@Rule
46-
public TestWatcher swtLeakTestWatcher = new SwtLeakTestWatcher();
44+
@RegisterExtension
45+
public SwtLeakExtension swtLeakExtension = new SwtLeakExtension();
4746

4847
static class LockAcquiringOperation extends WorkspaceModifyOperation {
4948
@Override

tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/concurrency/TestBug269121.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
******************************************************************************/
1414
package org.eclipse.ui.tests.concurrency;
1515

16-
import static org.junit.Assert.assertTrue;
16+
import static org.junit.jupiter.api.Assertions.assertTrue;
1717

1818
import java.lang.reflect.InvocationTargetException;
1919
import java.util.concurrent.atomic.AtomicIntegerArray;
@@ -29,10 +29,9 @@
2929
import org.eclipse.swt.widgets.Shell;
3030
import org.eclipse.ui.actions.WorkspaceModifyOperation;
3131
import org.eclipse.ui.progress.UIJob;
32-
import org.eclipse.ui.tests.SwtLeakTestWatcher;
33-
import org.junit.Rule;
34-
import org.junit.Test;
35-
import org.junit.rules.TestWatcher;
32+
import org.eclipse.ui.tests.SwtLeakExtension;
33+
import org.junit.jupiter.api.Test;
34+
import org.junit.jupiter.api.extension.RegisterExtension;
3635

3736
import junit.framework.AssertionFailedError;
3837

@@ -59,8 +58,8 @@
5958
*/
6059
public class TestBug269121 {
6160

62-
@Rule
63-
public TestWatcher swtLeakTestWatcher = new SwtLeakTestWatcher();
61+
@RegisterExtension
62+
public SwtLeakExtension swtLeakExtension = new SwtLeakExtension();
6463

6564
@Test
6665
public void testBug() throws InterruptedException,
@@ -110,7 +109,7 @@ protected IStatus run(IProgressMonitor monitor) {
110109
Display.getCurrent().readAndDispatch();
111110
}
112111
job.join();
113-
assertTrue("Timeout occurred - possible Deadlock. See logging!", statusJob.getResult().isOK());
112+
assertTrue(statusJob.getResult().isOK(), "Timeout occurred - possible Deadlock. See logging!");
114113
shell.close();
115114
}
116115
}

tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/concurrency/TestBug98621.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*******************************************************************************/
1414
package org.eclipse.ui.tests.concurrency;
1515

16-
import static org.junit.Assert.fail;
16+
import static org.junit.jupiter.api.Assertions.fail;
1717

1818
import java.lang.reflect.InvocationTargetException;
1919

@@ -28,10 +28,9 @@
2828
import org.eclipse.swt.widgets.Display;
2929
import org.eclipse.swt.widgets.Shell;
3030
import org.eclipse.ui.actions.WorkspaceModifyOperation;
31-
import org.eclipse.ui.tests.SwtLeakTestWatcher;
32-
import org.junit.Rule;
33-
import org.junit.Test;
34-
import org.junit.rules.TestWatcher;
31+
import org.eclipse.ui.tests.SwtLeakExtension;
32+
import org.junit.jupiter.api.Test;
33+
import org.junit.jupiter.api.extension.RegisterExtension;
3534

3635
/**
3736
* Tests the following sequence of events:
@@ -51,8 +50,8 @@
5150
*/
5251
public class TestBug98621 {
5352

54-
@Rule
55-
public TestWatcher swtLeakTestWatcher = new SwtLeakTestWatcher();
53+
@RegisterExtension
54+
public SwtLeakExtension swtLeakExtension = new SwtLeakExtension();
5655

5756
class TransferTestOperation extends WorkspaceModifyOperation {
5857
@Override

tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/DeprecatedUIPreferencesAuto.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*******************************************************************************/
1414
package org.eclipse.ui.tests.dialogs;
1515

16-
import static org.junit.Assume.assumeNotNull;
16+
import static org.junit.jupiter.api.Assumptions.assumeTrue;
1717

1818
import org.eclipse.jface.dialogs.Dialog;
1919
import org.eclipse.jface.preference.IPreferenceNode;
@@ -23,16 +23,15 @@
2323
import org.eclipse.ui.PlatformUI;
2424
import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
2525
import org.eclipse.ui.internal.WorkbenchPlugin;
26-
import org.eclipse.ui.tests.SwtLeakTestWatcher;
26+
import org.eclipse.ui.tests.SwtLeakExtension;
2727
import org.eclipse.ui.tests.harness.util.DialogCheck;
28-
import org.junit.Rule;
29-
import org.junit.Test;
30-
import org.junit.rules.TestWatcher;
28+
import org.junit.jupiter.api.Test;
29+
import org.junit.jupiter.api.extension.RegisterExtension;
3130

3231
public class DeprecatedUIPreferencesAuto {
3332

34-
@Rule
35-
public TestWatcher swtLeakTestWatcher = new SwtLeakTestWatcher();
33+
@RegisterExtension
34+
public SwtLeakExtension swtLeakExtension = new SwtLeakExtension();
3635

3736
protected Shell getShell() {
3837
return DialogCheck.getShell();
@@ -131,7 +130,7 @@ public void testProjectReferencesProp() {
131130
public void testFieldEditorEnablePref() {
132131

133132
PreferenceManager manager = WorkbenchPlugin.getDefault().getPreferenceManager();
134-
assumeNotNull(manager);
133+
assumeTrue(manager != null);
135134
PreferenceDialogWrapper dialog = new PreferenceDialogWrapper(
136135
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), manager);
137136
dialog.create();

tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/UIPreferencesAuto.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*******************************************************************************/
1414
package org.eclipse.ui.tests.dialogs;
1515

16-
import static org.junit.Assume.assumeNotNull;
16+
import static org.junit.jupiter.api.Assumptions.assumeTrue;
1717

1818
import org.eclipse.jface.dialogs.Dialog;
1919
import org.eclipse.jface.preference.IPreferenceNode;
@@ -23,16 +23,15 @@
2323
import org.eclipse.ui.PlatformUI;
2424
import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
2525
import org.eclipse.ui.internal.WorkbenchPlugin;
26-
import org.eclipse.ui.tests.SwtLeakTestWatcher;
26+
import org.eclipse.ui.tests.SwtLeakExtension;
2727
import org.eclipse.ui.tests.harness.util.DialogCheck;
28-
import org.junit.Rule;
29-
import org.junit.Test;
30-
import org.junit.rules.TestWatcher;
28+
import org.junit.jupiter.api.Test;
29+
import org.junit.jupiter.api.extension.RegisterExtension;
3130

3231
public class UIPreferencesAuto {
3332

34-
@Rule
35-
public TestWatcher swtLeakTestWatcher = new SwtLeakTestWatcher();
33+
@RegisterExtension
34+
public SwtLeakExtension swtLeakExtension = new SwtLeakExtension();
3635
protected Shell getShell() {
3736
return DialogCheck.getShell();
3837
}
@@ -133,7 +132,7 @@ public void testProjectReferencesProp() {
133132
public void testFieldEditorEnablePref() {
134133
PreferenceManager manager = WorkbenchPlugin.getDefault()
135134
.getPreferenceManager();
136-
assumeNotNull(manager);
135+
assumeTrue(manager != null);
137136
PreferenceDialogWrapper dialog = new PreferenceDialogWrapper(
138137
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), manager);
139138
dialog.create();

0 commit comments

Comments
 (0)