From c8e1aba67f7e174f4bedc25a013b754cb887d1a0 Mon Sep 17 00:00:00 2001 From: Lars Vogel Date: Mon, 10 Nov 2025 09:26:04 +0100 Subject: [PATCH] Fix flaky HoverTest.testEnabledWhenHover() race condition MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The testEnabledWhenHover test was failing randomly when trying to retrieve the hover shell for the second part of the test. Root cause: - The test has two parts: first with EnabledPropertyTester.setEnabled(true), then with setEnabled(false) - After the first hover is shown and checked, cleanFileAndEditor() is called - However, the hover shell from the first part may not be fully disposed when the second editor is opened and the second hover is triggered - This causes getHoverShell() to timeout waiting for the new hover shell Fix: - Capture a reference to the first hover shell before calling cleanFileAndEditor() - After cleanFileAndEditor(), explicitly wait for the first shell to be disposed using DisplayHelper.waitForCondition() with a 3000ms timeout - This ensures the hover state is fully reset before the second part begins This approach follows the pattern used in other recent flaky test fixes in this repository (e.g., ProgressContantsTest, ProgressViewTests) which use condition-based waiting to ensure proper cleanup between test phases. Fixes https://github.com/eclipse-platform/eclipse.platform.ui/issues/926 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../src/org/eclipse/ui/genericeditor/tests/HoverTest.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/org.eclipse.ui.genericeditor.tests/src/org/eclipse/ui/genericeditor/tests/HoverTest.java b/tests/org.eclipse.ui.genericeditor.tests/src/org/eclipse/ui/genericeditor/tests/HoverTest.java index 8bf2aa2fa41..a52be637056 100644 --- a/tests/org.eclipse.ui.genericeditor.tests/src/org/eclipse/ui/genericeditor/tests/HoverTest.java +++ b/tests/org.eclipse.ui.genericeditor.tests/src/org/eclipse/ui/genericeditor/tests/HoverTest.java @@ -33,6 +33,7 @@ import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; @@ -80,7 +81,13 @@ public void testEnabledWhenHover(TestInfo info) throws Exception { assertNotNull(findControl(shell, StyledText.class, AlrightyHoverProvider.LABEL)); assertNull(findControl(shell, StyledText.class, WorldHoverProvider.LABEL)); + // Capture the first shell and its display to wait for disposal + Shell firstShell = shell; + Display display = firstShell.getDisplay(); cleanFileAndEditor(); + // Wait for the hover shell to be disposed after editor cleanup + DisplayHelper.waitForCondition(display, 3000, () -> firstShell.isDisposed()); + EnabledPropertyTester.setEnabled(false); createAndOpenFile("enabledWhen.txt", "bar 'bar'"); shell= getHoverShell(info, triggerCompletionAndRetrieveInformationControlManager(), true);