diff --git a/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/rules/WorkbenchContextExtension.java b/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/rules/WorkbenchContextExtension.java index 6a08dced2fe..cdbc5a9e887 100644 --- a/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/rules/WorkbenchContextExtension.java +++ b/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/rules/WorkbenchContextExtension.java @@ -30,6 +30,7 @@ import org.eclipse.e4.ui.workbench.modeling.EModelService; import org.eclipse.e4.ui.workbench.swt.DisplayUISynchronize; import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; import org.junit.jupiter.api.extension.AfterEachCallback; import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.ExtensionContext; @@ -90,6 +91,15 @@ protected void dispose() { wb.close(); } + // Dispose any remaining shells that were not cleaned up by wb.close(), + // such as PartRenderingEngine's limbo shell + Display display = Display.getDefault(); + for (Shell shell : display.getShells()) { + if (!shell.isDisposed()) { + shell.dispose(); + } + } + ContextInjectionFactory.setDefault(null); // Workaround, enforce uninjection on the UIEventTopic provider from context