tmf: Change TmfEventsTable to not use Display.getCursorLocation
authorMarc-Andre Laperle <marc-andre.laperle@ericsson.com>
Mon, 31 Aug 2015 19:31:42 +0000 (15:31 -0400)
committerMarc-Andre Laperle <marc-andre.laperle@ericsson.com>
Tue, 1 Sep 2015 18:42:08 +0000 (14:42 -0400)
This makes CallsiteEventsInTableTest (SWTBot) more stable because
Display.getCursorLocation is getting the cursor location straight
from the windowing system and therefore does not work properly with
SWTBot. Instead, we can use the last position of the MenuDetect
event to know the location.

Also update the targets sequence numbers to pick up required fix
from SWTBot, see SWTBot bug 474747.

Bug: 474435
Change-Id: I7e8f4377e93d78030ebe582e0b4a92666a81e966
Signed-off-by: Marc-Andre Laperle <marc-andre.laperle@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/53515
Reviewed-by: Hudson CI
Reviewed-by: Patrick Tasse <patrick.tasse@gmail.com>
Reviewed-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
Tested-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
releng/org.eclipse.tracecompass.target/tracecompass-e4.5.target
releng/org.eclipse.tracecompass.target/tracecompass-eStaging.target
tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/viewers/events/CallsiteEventsInTableTest.java
tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/viewers/events/FilterViewerTest.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/events/TmfEventsTable.java

index 0e0c2011b814c8bfe8becdf528d176b11ca7438a..fe2a8e5ef44cb431fc4b40172f82a08bff9f2c07 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target name="tracecompass-e4.5" sequenceNumber="53">
+<?pde version="3.8"?><target name="tracecompass-e4.5" sequenceNumber="54">
 <locations>
 <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
 <unit id="org.eclipse.cdt.gnu.dsf.feature.group" version="0.0.0"/>
index bc24834d3c6375039d5f0a0d198ab4265b3b65b5..c44bea611bdca0c6547cfab79284b1774954e07b 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target name="tracecompass-eStaging" sequenceNumber="47">
+<?pde version="3.8"?><target name="tracecompass-eStaging" sequenceNumber="48">
 <locations>
 <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
 <unit id="org.eclipse.cdt.gnu.dsf.feature.group" version="0.0.0"/>
index 90bb2601dfa246c0b7d96b78969ec4d204ff3b30..45c52eadd5f6f17631479f60e1b64b32cd778da1 100644 (file)
@@ -36,6 +36,7 @@ import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
 import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotMenu;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTable;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotTableItem;
 import org.eclipse.tracecompass.internal.tmf.core.Activator;
 import org.eclipse.tracecompass.tmf.core.tests.TmfCoreTestPlugin;
 import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimePreferencesConstants;
@@ -157,10 +158,10 @@ public class CallsiteEventsInTableTest {
 
         // Maximize editor area
         SWTBotUtils.maximizeTable(tableBot);
-        tableBot.click(1, 0);
+        SWTBotTableItem tableItem = tableBot.getTableItem(1);
 
         // Open source code location
-        SWTBotMenu menuBot = tableBot.contextMenu("Open Source Code");
+        SWTBotMenu menuBot = tableItem.contextMenu("Open Source Code");
         menuBot.click();
 
         // Verify that source code was actually opened
index b2527c0a0e4aa553918da1bab0a71daa4292ab71..636dcd33a54fd3d693069aa2f4f7fe973697c123 100644 (file)
@@ -20,19 +20,13 @@ import java.io.IOException;
 import org.apache.log4j.ConsoleAppender;
 import org.apache.log4j.Logger;
 import org.apache.log4j.SimpleLayout;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
 import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
 import org.eclipse.swtbot.swt.finder.SWTBot;
-import org.eclipse.swtbot.swt.finder.finders.ContextMenuFinder;
-import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable;
-import org.eclipse.swtbot.swt.finder.results.VoidResult;
 import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotCombo;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTable;
+import org.eclipse.swtbot.swt.finder.widgets.SWTBotTableItem;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotText;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
@@ -40,8 +34,6 @@ import org.eclipse.tracecompass.tmf.core.io.BufferedRandomAccessFile;
 import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.ConditionHelpers;
 import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils;
 import org.eclipse.tracecompass.tmf.ui.views.filter.FilterView;
-import org.hamcrest.BaseMatcher;
-import org.hamcrest.Description;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -316,55 +308,9 @@ public class FilterViewerTest {
     private static String applyFilter(SWTWorkbenchBot bot, final String filterName) {
         SWTBotUtils.waitForJobs();
         final SWTBotTable eventsEditor = bot.activeEditor().bot().table();
-        eventsEditor.select(2);
-        UIThreadRunnable.syncExec(new VoidResult() {
-
-            @Override
-            public void run() {
-                ContextMenuFinder cmf = new ContextMenuFinder(eventsEditor.widget);
-                ContextMenuListeners matcher = new ContextMenuListeners(filterName);
-                cmf.findMenus(matcher);
-            }
-        });
+        SWTBotTableItem tableItem = eventsEditor.getTableItem(2);
+        tableItem.contextMenu(filterName).click();
         fBot.waitUntil(ConditionHelpers.isTableCellFilled(eventsEditor, "/100", 1, 1));
         return eventsEditor.cell(1, 1);
     }
-
-    /**
-     * FIXME: This is a big hack until SWTBot supports context menus better (bug 458975)
-     */
-    private static final class ContextMenuListeners extends BaseMatcher<MenuItem> {
-        private final String filterName;
-
-        private boolean found = false;
-
-        private ContextMenuListeners(String filterName) {
-            this.filterName = filterName;
-        }
-
-        @Override
-        public void describeTo(Description description) {
-        }
-
-        @Override
-        public boolean matches(Object item) {
-            if (item instanceof MenuItem) {
-                MenuItem menuItem = (MenuItem) item;
-                if (menuItem.getText().equals(filterName)) {
-                    for (Listener listener : menuItem.getListeners(SWT.Selection)) {
-                        if (!found) {
-                            Event event = new Event();
-                            event.type = SWT.Selection;
-                            event.widget = menuItem;
-                            event.button = 1;
-                            listener.handleEvent(event);
-                            found = true;
-                        }
-                        return true;
-                    }
-                }
-            }
-            return false;
-        }
-    }
 }
index 70ea4ee767f1c3f868a83098f48a1bd7b8c76c0d..dd7e3177f40ea8223ee8e5511224689a95df1edc 100644 (file)
@@ -352,6 +352,7 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS
 
     private Menu fRawTablePopup;
 
+    private Point fLastMenuCursorLocation;
     private MenuManager fRawViewerPopupMenuManager;
     private MenuManager fTablePopupMenuManager;
     private MenuManager fHeaderPopupMenuManager;
@@ -591,7 +592,8 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS
         fTable.addListener(SWT.MenuDetect, new Listener() {
             @Override
             public void handleEvent(Event event) {
-                Point pt = fTable.getDisplay().map(null, fTable, new Point(event.x, event.y));
+                fLastMenuCursorLocation = new Point(event.x, event.y);
+                Point pt = fTable.getDisplay().map(null, fTable, fLastMenuCursorLocation);
                 Rectangle clientArea = fTable.getClientArea();
                 boolean header = clientArea.y <= pt.y && pt.y < (clientArea.y + fTable.getHeaderHeight());
                 fTable.setMenu(header ? fHeaderMenu : fTablePopup);
@@ -1225,7 +1227,7 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker, IColorS
                     }
                     return;
                 }
-                final Point point = fTable.toControl(Display.getDefault().getCursorLocation());
+                final Point point = fTable.toControl(fLastMenuCursorLocation);
                 final TableItem item = fTable.getSelection().length > 0 ? fTable.getSelection()[0] : null;
                 if (item != null) {
                     final Rectangle imageBounds = item.getImageBounds(0);
This page took 0.028675 seconds and 5 git commands to generate.