From e4a223cae37a373e20e05b09736064ea8c306ff7 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 79f140f714b2369676df79e97c33a0a995f59a98 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: