From 5ca94dfc72a890711850407c72a6d61860219109 Mon Sep 17 00:00:00 2001 From: Lars Vogel Date: Mon, 16 Mar 2026 11:45:36 +0100 Subject: [PATCH 1/2] Fix flaky AsyncContentAssistTest.testCompleteActivationChar Replace Display.post() with control.notifyListeners() for reliable event delivery in headless CI environments. Display.post() sends native OS events that may not be processed, causing the content assist popup to never appear. Also fix race condition by capturing beforeShells before posting key events, process events after shell.open(), and increase findNewShell timeout from 1s to 5s for slower CI environments. Fixes https://github.com/eclipse-platform/eclipse.platform.ui/issues/890 --- .../AbstractContentAssistTest.java | 2 +- .../contentassist/AsyncContentAssistTest.java | 19 +++++++++---------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/tests/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/contentassist/AbstractContentAssistTest.java b/tests/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/contentassist/AbstractContentAssistTest.java index e618cb9eb16..96cc97f7f4e 100644 --- a/tests/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/contentassist/AbstractContentAssistTest.java +++ b/tests/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/contentassist/AbstractContentAssistTest.java @@ -229,7 +229,7 @@ protected static List findNewShells(Collection beforeShells) { protected static Shell findNewShell(Collection beforeShells) { List afterShells= findNewShells(beforeShells); - for (int attempt= 0; afterShells.size() != 1 && attempt < 10; attempt++) { + for (int attempt= 0; afterShells.size() != 1 && attempt < 50; attempt++) { DisplayHelper.sleep(getDisplay(), 100); afterShells= findNewShells(beforeShells); } diff --git a/tests/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/contentassist/AsyncContentAssistTest.java b/tests/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/contentassist/AsyncContentAssistTest.java index 0526cb3aa51..c09a25e1858 100644 --- a/tests/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/contentassist/AsyncContentAssistTest.java +++ b/tests/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/contentassist/AsyncContentAssistTest.java @@ -17,7 +17,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assumptions.assumeFalse; import java.util.Arrays; import java.util.Collection; @@ -41,8 +40,6 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; -import org.eclipse.jface.util.Util; - import org.eclipse.jface.text.Document; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.contentassist.ContentAssistant; @@ -134,7 +131,6 @@ protected boolean condition() { @Test public void testCompleteActivationChar() { - assumeFalse(Util.isWindows(), "test fails on Windows, see https://github.com/eclipse-platform/eclipse.platform.ui/issues/890"); shell.setLayout(new FillLayout()); shell.setSize(500, 300); SourceViewer viewer= new SourceViewer(shell, null, SWT.NONE); @@ -151,17 +147,20 @@ public void testCompleteActivationChar() { contentAssistant.install(viewer); shell.open(); Display display= shell.getDisplay(); - Event keyEvent= new Event(); + DisplayHelper.runEventLoop(display, 0); Control control= viewer.getTextWidget(); + control.forceFocus(); + DisplayHelper.runEventLoop(display, 0); + final Collection beforeShells= AbstractContentAssistTest.getCurrentShells(); + // Use notifyListeners instead of Display.post() for reliable event delivery + // Display.post() sends native OS events that may not be processed reliably + // in headless CI environments + Event keyEvent= new Event(); keyEvent.widget= control; keyEvent.type= SWT.KeyDown; keyEvent.character= 'b'; keyEvent.keyCode= 'b'; - control.getShell().forceActive(); - control.getDisplay().post(keyEvent); - keyEvent.type= SWT.KeyUp; - control.getDisplay().post(keyEvent); - final Collection beforeShells= AbstractContentAssistTest.getCurrentShells(); + control.notifyListeners(SWT.KeyDown, keyEvent); AbstractContentAssistTest.processEvents(); Shell newShell= AbstractContentAssistTest.findNewShell(beforeShells); assertTrue(new DisplayHelper() { From 162a98a9b16ef62cd4df361733b025539616f9af Mon Sep 17 00:00:00 2001 From: Eclipse Platform Bot Date: Mon, 16 Mar 2026 10:51:19 +0000 Subject: [PATCH 2/2] Version bump(s) for 4.40 stream --- tests/org.eclipse.jface.text.tests/META-INF/MANIFEST.MF | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/org.eclipse.jface.text.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.jface.text.tests/META-INF/MANIFEST.MF index 7cc57c18bfb..0c0524f3ebc 100644 --- a/tests/org.eclipse.jface.text.tests/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.jface.text.tests/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %Plugin.name Bundle-SymbolicName: org.eclipse.jface.text.tests -Bundle-Version: 3.14.0.qualifier +Bundle-Version: 3.14.100.qualifier Bundle-Vendor: %Plugin.providerName Bundle-Localization: plugin Export-Package: