/******************************************************************************* * Copyright (c) 2015 Ericsson and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package org.eclipse.swtbot.swt.finder.utils; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.swtbot.swt.finder.test.AbstractSWTShellTest; import org.eclipse.swtbot.swt.finder.widgets.SWTBotLabel; import org.eclipse.swtbot.swt.finder.widgets.SWTBotTableItem; import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem; import org.junit.Test; public class MenuDetectTest extends AbstractSWTShellTest { private static final String MENU_ITEM_TEXT = "item"; private static final String EXPECTED_TEXT = "menu detected"; @Override protected void createUI(Composite parent) { final Label label = new Label(shell, SWT.NONE); label.setText("Label"); Menu menu = new Menu(label); MenuItem menuItem = new MenuItem(menu, 0); menuItem.setText(MENU_ITEM_TEXT); label.setMenu(menu); label.addListener(SWT.MenuDetect, new Listener() { public void handleEvent(Event event) { checkInsideBounds(label.getParent().toControl(new Point(event.x, event.y)), label.getBounds()); label.setText(EXPECTED_TEXT); } }); createTestTable(false); createTestTable(true); createTestTree(false); createTestTree(true); } private void createTestTree(boolean useColumns) { final Tree tree = new Tree(shell, SWT.NONE); if (useColumns) { TreeColumn column = new TreeColumn(tree, SWT.NONE); column.setText("Column"); column.setWidth(100); column = new TreeColumn(tree, SWT.NONE); column.setText("Column 2"); column.setWidth(100); tree.setHeaderVisible(true); tree.setColumnOrder(new int[] { 1, 0 }); } final TreeItem treeItem = new TreeItem(tree, SWT.NONE); treeItem.setText("Test tree item"); Menu menu = new Menu(tree); MenuItem menuItem = new MenuItem(menu, 0); menuItem.setText(MENU_ITEM_TEXT); tree.setMenu(menu); tree.addListener(SWT.MenuDetect, new Listener() { public void handleEvent(Event event) { Point point = new Point(event.x, event.y); checkInsideBounds(tree.getParent().toControl(point), tree.getBounds()); treeItem.setText(EXPECTED_TEXT); } }); } private void createTestTable(boolean useColumns) { final Table table = new Table(shell, SWT.NONE); if (useColumns) { TableColumn column = new TableColumn(table, SWT.NONE); column.setText("Column"); column.setWidth(100); column = new TableColumn(table, SWT.NONE); column.setText("Column 2"); column.setWidth(100); table.setHeaderVisible(true); table.setColumnOrder(new int[] { 1, 0 }); } final TableItem tableItem = new TableItem(table, SWT.NONE); tableItem.setText("Test table item"); Menu menu = new Menu(table); MenuItem menuItem = new MenuItem(menu, 0); menuItem.setText(MENU_ITEM_TEXT); table.setMenu(menu); table.addListener(SWT.MenuDetect, new Listener() { public void handleEvent(Event event) { Point point = new Point(event.x, event.y); checkInsideBounds(table.getParent().toControl(point), table.getBounds()); tableItem.setText(EXPECTED_TEXT); } }); } /** * Make sure that widgets get the SWT.MenuDetect event and that the event * has reasonable X and Y values. */ @Test public void testMenuDetect() { SWTBotLabel label = bot.label(); label.contextMenu(MENU_ITEM_TEXT); assertEquals(EXPECTED_TEXT, label.getText()); SWTBotTableItem tableItem = bot.table(0).getTableItem(0); tableItem.contextMenu(MENU_ITEM_TEXT); assertEquals(EXPECTED_TEXT, tableItem.getText()); tableItem = bot.table(1).getTableItem(0); tableItem.contextMenu(MENU_ITEM_TEXT); assertEquals(EXPECTED_TEXT, tableItem.getText()); SWTBotTreeItem treeItem = bot.tree(0).getTreeItem("Test tree item"); treeItem.contextMenu(MENU_ITEM_TEXT); assertEquals(EXPECTED_TEXT, treeItem.getText()); treeItem = bot.tree(1).getTreeItem("Test tree item"); treeItem.contextMenu(MENU_ITEM_TEXT); assertEquals(EXPECTED_TEXT, treeItem.getText()); } private static void checkInsideBounds(Point position, Rectangle bounds) { assertTrue("SWT.MenuDetect not inside bounds. Position: " + position + " bounds: " + bounds, bounds.contains(position)); } }