From 5c7461925bbdc7eceac27202cd3f556d46fd02c8 Mon Sep 17 00:00:00 2001 From: Heiko Klare Date: Fri, 6 Sep 2024 18:16:13 +0200 Subject: [PATCH] Find/replace overlay: improve expressiveness of IFindReplaceUIAccess Improves the design/expressiveness of the IFindReplaceUIAccess to reduce dependency on implementation details (like using shells as the container for the dialog and the overlay). --- .../internal/findandreplace/FindReplaceUITest.java | 2 +- .../findandreplace/IFindReplaceUIAccess.java | 5 +++-- .../overlay/FindReplaceOverlayTest.java | 4 ++-- .../findandreplace/overlay/OverlayAccess.java | 13 +++++++++++-- .../ui/workbench/texteditor/tests/DialogAccess.java | 9 +++++++-- 5 files changed, 24 insertions(+), 9 deletions(-) diff --git a/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/FindReplaceUITest.java b/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/FindReplaceUITest.java index 30cfca379f6..a2f674af0ab 100644 --- a/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/FindReplaceUITest.java +++ b/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/FindReplaceUITest.java @@ -81,7 +81,7 @@ protected void reopenFindReplaceUIForTextViewer() { protected final void ensureHasFocusOnGTK() { if (Util.isGtk()) { runEventQueue(); - if (dialog.getActiveShell() == null) { + if (!dialog.hasFocus()) { String screenshotPath= ScreenshotTest.takeScreenshot(FindReplaceUITest.class, testName.getMethodName(), System.out); fail("this test does not work on GTK unless the runtime workbench has focus. Screenshot: " + screenshotPath); } diff --git a/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/IFindReplaceUIAccess.java b/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/IFindReplaceUIAccess.java index f7a1b503f9c..700bf25df04 100644 --- a/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/IFindReplaceUIAccess.java +++ b/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/IFindReplaceUIAccess.java @@ -10,7 +10,6 @@ *******************************************************************************/ package org.eclipse.ui.internal.findandreplace; -import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Widget; import org.eclipse.jface.text.IFindReplaceTarget; @@ -26,6 +25,8 @@ public interface IFindReplaceUIAccess { void close(); + boolean isShown(); + void unselect(SearchOptions option); void select(SearchOptions option); @@ -42,7 +43,7 @@ public interface IFindReplaceUIAccess { void setReplaceText(String text); - Shell getActiveShell(); + boolean hasFocus(); Widget getButtonForSearchOption(SearchOptions option); diff --git a/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/overlay/FindReplaceOverlayTest.java b/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/overlay/FindReplaceOverlayTest.java index 414a3b371e0..51beb527d4a 100644 --- a/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/overlay/FindReplaceOverlayTest.java +++ b/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/overlay/FindReplaceOverlayTest.java @@ -16,7 +16,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertFalse; import org.junit.Test; @@ -174,7 +174,7 @@ public void testDisableOverlayViaPreference() { boolean useOverlayPreference= preferences.getBoolean(USE_FIND_REPLACE_OVERLAY, true); try { preferences.putBoolean(USE_FIND_REPLACE_OVERLAY, false); - assertNull("dialog should be closed after changing preference", getDialog().getActiveShell()); + assertFalse("dialog should be closed after changing preference", getDialog().isShown()); } finally { preferences.putBoolean(USE_FIND_REPLACE_OVERLAY, useOverlayPreference); reopenFindReplaceUIForTextViewer(); diff --git a/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/overlay/OverlayAccess.java b/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/overlay/OverlayAccess.java index 634fb6a42cf..2d4896e9317 100644 --- a/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/overlay/OverlayAccess.java +++ b/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/internal/findandreplace/overlay/OverlayAccess.java @@ -26,6 +26,7 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolItem; @@ -321,8 +322,16 @@ public void assertEnabled(SearchOptions option) { } @Override - public Shell getActiveShell() { - return shellRetriever.get(); + public boolean isShown() { + return shellRetriever.get() != null && shellRetriever.get().isVisible(); + } + + @Override + public boolean hasFocus() { + Shell overlayShell= shellRetriever.get(); + Control focusControl= overlayShell.getDisplay().getFocusControl(); + Shell focusControlShell= focusControl != null ? focusControl.getShell() : null; + return focusControlShell == overlayShell; } } diff --git a/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/workbench/texteditor/tests/DialogAccess.java b/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/workbench/texteditor/tests/DialogAccess.java index 9e528504e73..bbbd0b507bc 100644 --- a/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/workbench/texteditor/tests/DialogAccess.java +++ b/tests/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/workbench/texteditor/tests/DialogAccess.java @@ -165,8 +165,8 @@ public void close() { } @Override - public Shell getActiveShell() { - return shellRetriever.get(); + public boolean hasFocus() { + return shellRetriever.get() != null; } @Override @@ -316,4 +316,9 @@ private Set getSelectedOptions() { .collect(Collectors.toSet()); } + @Override + public boolean isShown() { + return shellRetriever.get() != null; + } + }