Skip to content

Commit b8ac6a5

Browse files
committed
Ensure focus after each opening of a find/replace UI
1 parent ff27fc1 commit b8ac6a5

File tree

6 files changed

+35
-8
lines changed

6 files changed

+35
-8
lines changed

tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/FindReplaceTestUtil.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,16 @@
1313
*******************************************************************************/
1414
package org.eclipse.ui.internal.findandreplace;
1515

16+
import static org.junit.Assert.fail;
17+
18+
import java.util.function.Supplier;
19+
1620
import org.eclipse.swt.widgets.Display;
1721

1822
import org.eclipse.ui.PlatformUI;
1923

24+
import org.eclipse.ui.workbench.texteditor.tests.ScreenshotTest;
25+
2026
public final class FindReplaceTestUtil {
2127

2228
private FindReplaceTestUtil() {
@@ -36,4 +42,22 @@ public static void runEventQueue() {
3642
}
3743
}
3844

45+
public static void waitForFocus(Supplier<Boolean> hasFocusValidator, String testName) {
46+
int focusAttempts= 0;
47+
while (!hasFocusValidator.get() && focusAttempts < 10) {
48+
focusAttempts++;
49+
PlatformUI.getWorkbench().getDisplay().readAndDispatch();
50+
if (!hasFocusValidator.get()) {
51+
try {
52+
Thread.sleep(50);
53+
} catch (InterruptedException e) {
54+
}
55+
}
56+
}
57+
if (!hasFocusValidator.get()) {
58+
String screenshotPath= ScreenshotTest.takeScreenshot(FindReplaceUITest.class, testName, System.out);
59+
fail("this test does not work on GTK unless the runtime workbench has focus. Screenshot: " + screenshotPath);
60+
}
61+
}
62+
3963
}

tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/FindReplaceUITest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,6 @@ public void testShiftEnterReversesSearchDirection() {
159159

160160
dialog.select(SearchOptions.INCREMENTAL);
161161
dialog.setFindText("line");
162-
ensureHasFocusOnGTK();
163162
IFindReplaceTarget target= getFindReplaceTarget();
164163

165164
assertEquals(0, (target.getSelection()).x);
@@ -308,7 +307,6 @@ public void testSearchTextSelectedWhenOpeningDialog() {
308307

309308
fTextViewer.setSelection(new TextSelection(0, 4));
310309
initializeFindReplaceUIForTextViewer();
311-
ensureHasFocusOnGTK();
312310

313311
assertEquals("test", dialog.getFindText());
314312
assertEquals(dialog.getSelectedFindText(), dialog.getFindText());
@@ -321,7 +319,6 @@ public void testSearchTextSelectedWhenSwitchingFocusToDialog() {
321319

322320
dialog.setFindText("text");
323321
initializeFindReplaceUIForTextViewer();
324-
ensureHasFocusOnGTK();
325322

326323
assertEquals("text", dialog.getFindText());
327324
assertEquals(dialog.getSelectedFindText(), dialog.getFindText());

tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/overlay/FindReplaceOverlayTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public void disableFirstTimeUseNotification() {
5454
.getDialogSettingsProvider(FrameworkUtil.getBundle(FindReplaceOverlayFirstTimePopup.class))
5555
.getDialogSettings();
5656
settings.put(SETTING_POPUP_WAS_SHOWN_BEFORE, true);
57+
PlatformUI.getWorkbench().getWorkbenchWindows()[0].getShell().forceActive();
5758
}
5859

5960
@Override
@@ -63,7 +64,7 @@ public OverlayAccess openUIFromTextViewer(TextViewer viewer) {
6364
actionAccessor.invoke("showOverlayInEditor", null);
6465
FindReplaceOverlay overlay= (FindReplaceOverlay) actionAccessor.get("overlay");
6566
System.out.println("Focus test: " + overlay.getContainerControl().getDisplay().getFocusControl());
66-
return new OverlayAccess(getFindReplaceTarget(), overlay);
67+
return new OverlayAccess(getFindReplaceTarget(), overlay, testName.getMethodName());
6768
}
6869

6970
@Test

tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/overlay/OverlayAccess.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
package org.eclipse.ui.internal.findandreplace.overlay;
1515

1616
import static org.eclipse.ui.internal.findandreplace.FindReplaceTestUtil.runEventQueue;
17+
import static org.eclipse.ui.internal.findandreplace.FindReplaceTestUtil.waitForFocus;
1718
import static org.junit.Assert.assertFalse;
1819
import static org.junit.Assert.assertTrue;
1920

@@ -63,7 +64,7 @@ class OverlayAccess implements IFindReplaceUIAccess {
6364

6465
private final FindReplaceOverlay overlay;
6566

66-
OverlayAccess(IFindReplaceTarget findReplaceTarget, FindReplaceOverlay findReplaceOverlay) {
67+
OverlayAccess(IFindReplaceTarget findReplaceTarget, FindReplaceOverlay findReplaceOverlay, String testName) {
6768
this.findReplaceTarget= findReplaceTarget;
6869
overlay= findReplaceOverlay;
6970
WidgetExtractor widgetExtractor= new WidgetExtractor(FindReplaceOverlay.ID_DATA_KEY, findReplaceOverlay.getContainerControl());
@@ -76,6 +77,7 @@ class OverlayAccess implements IFindReplaceUIAccess {
7677
searchBackward= widgetExtractor.findToolItem("searchBackward");
7778
openReplaceDialog= widgetExtractor.findToolItem("replaceToggle");
7879
extractReplaceWidgets();
80+
waitForFocus(this::hasFocus, testName);
7981
}
8082

8183
private void extractReplaceWidgets() {
@@ -103,7 +105,7 @@ private void restoreInitialConfiguration() {
103105
public void closeAndRestore() {
104106
restoreInitialConfiguration();
105107
assertInitialConfiguration();
106-
overlay.close();
108+
close();
107109
}
108110

109111
@Override

tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/workbench/texteditor/tests/DialogAccess.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
package org.eclipse.ui.workbench.texteditor.tests;
1212

1313
import static org.eclipse.ui.internal.findandreplace.FindReplaceTestUtil.runEventQueue;
14+
import static org.eclipse.ui.internal.findandreplace.FindReplaceTestUtil.waitForFocus;
1415
import static org.hamcrest.MatcherAssert.assertThat;
1516
import static org.hamcrest.Matchers.hasItems;
1617
import static org.hamcrest.Matchers.not;
@@ -71,7 +72,7 @@ class DialogAccess implements IFindReplaceUIAccess {
7172

7273
private final Button replaceAllButton;
7374

74-
DialogAccess(IFindReplaceTarget findReplaceTarget, Dialog findReplaceDialog) {
75+
DialogAccess(IFindReplaceTarget findReplaceTarget, Dialog findReplaceDialog, String testName) {
7576
this.findReplaceTarget= findReplaceTarget;
7677
this.findReplaceDialog= findReplaceDialog;
7778
WidgetExtractor widgetExtractor= new WidgetExtractor(DATA_ID, findReplaceDialog.getShell());
@@ -89,6 +90,8 @@ class DialogAccess implements IFindReplaceUIAccess {
8990
replaceButton= widgetExtractor.findButton("replaceOne");
9091
replaceFindButton= widgetExtractor.findButton("replaceFindOne");
9192
replaceAllButton= widgetExtractor.findButton("replaceAll");
93+
94+
waitForFocus(this::hasFocus, testName);
9295
}
9396

9497
void restoreInitialConfiguration() {

tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/workbench/texteditor/tests/FindReplaceDialogTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public DialogAccess openUIFromTextViewer(TextViewer viewer) {
5252
Accessor fFindReplaceDialogStubAccessor= new Accessor(fFindReplaceDialogStub, "org.eclipse.ui.texteditor.FindReplaceAction$FindReplaceDialogStub", getClass().getClassLoader());
5353

5454
Dialog dialog= (Dialog) fFindReplaceDialogStubAccessor.invoke("getDialog", null);
55-
return new DialogAccess(getFindReplaceTarget(), dialog);
55+
return new DialogAccess(getFindReplaceTarget(), dialog, testName.getMethodName());
5656
}
5757

5858
@Test

0 commit comments

Comments
 (0)