Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Tasse2015-09-23 14:58:59 +0000
committerPatrick Tasse2015-09-23 21:38:18 +0000
commit1fc201634f1282dc30114bf6dc0deb38172f380d (patch)
treefe0025b975a304784e39b16a00190a28bc47cbf3
parent47f2f5538654377f31c6d5ace5fb42c19f8f2b42 (diff)
downloadorg.eclipse.swtbot-1fc201634f1282dc30114bf6dc0deb38172f380d.tar.gz
org.eclipse.swtbot-1fc201634f1282dc30114bf6dc0deb38172f380d.tar.xz
org.eclipse.swtbot-1fc201634f1282dc30114bf6dc0deb38172f380d.zip
Test dynamic menus in SWTBotPopupMenuTest
Each unit test is now run twice, once with static menus and once with dynamic menus. The MenuTab example is updated to hook listeners on the shell. It is updated to use a new Push action instance every time the dynamic menu is populated (this allows testing that a new MenuItem is created and the old MenuItem is disposed). It is also fixed so that sub-menus properly support the Dynamic option, and to replace the use of recent method MenuManager.setImageDescriptor() which is not available for all targets. The targets are updated to use JUnit 4.12 for the parameterized test. Change-Id: I36547154c8e7fad5fcbfbd3221f11f89c4f84261 Signed-off-by: Patrick Tasse <patrick.tasse@gmail.com>
-rw-r--r--devtools/target-platforms/indigo/indigo.target10
-rw-r--r--devtools/target-platforms/juno/juno.target10
-rw-r--r--devtools/target-platforms/kepler/kepler.target10
-rw-r--r--devtools/target-platforms/luna/luna.target10
-rw-r--r--org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/MenuTab.java45
-rw-r--r--org.eclipse.swtbot.swt.finder.test/src/org/eclipse/swtbot/swt/finder/widgets/SWTBotPopupMenuTest.java95
6 files changed, 114 insertions, 66 deletions
diff --git a/devtools/target-platforms/indigo/indigo.target b/devtools/target-platforms/indigo/indigo.target
index 98bc7f73..00da3749 100644
--- a/devtools/target-platforms/indigo/indigo.target
+++ b/devtools/target-platforms/indigo/indigo.target
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target name="Eclipse Indigo via p2" sequenceNumber="59">
+<?pde version="3.8"?><target name="Eclipse Indigo via p2" sequenceNumber="60">
<locations>
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
<unit id="org.eclipse.jdt.feature.group" version="3.7.2.v20120120-1414-7z8gFcuFMP7BW5XTz0jLTnz0l9B1"/>
@@ -12,14 +12,14 @@
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
<unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
<unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-<unit id="org.junit" version="4.11.0.v201303080030"/>
+<unit id="org.junit" version="4.12.0.v201504281640"/>
<unit id="com.thoughtworks.qdox" version="1.6.3.v20081201-1400"/>
<unit id="javax.inject" version="1.0.0.v20091030"/>
-<unit id="org.hamcrest.library" version="1.3.0.v201305281000"/>
-<unit id="org.hamcrest.library.source" version="1.3.0.v201305281000"/>
+<unit id="org.hamcrest.library" version="1.3.0.v201505072020"/>
+<unit id="org.hamcrest.library.source" version="1.3.0.v201505072020"/>
<unit id="org.hamcrest.core" version="1.3.0.v201303031735"/>
<unit id="org.hamcrest.core.source" version="1.3.0.v201303031735"/>
-<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20140525021250/repository/"/>
+<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20150821153341/repository/"/>
</location>
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
<unit id="org.eclipse.license.feature.group" version="1.0.1.v20140414-1359"/>
diff --git a/devtools/target-platforms/juno/juno.target b/devtools/target-platforms/juno/juno.target
index ee7f1961..ad15a93f 100644
--- a/devtools/target-platforms/juno/juno.target
+++ b/devtools/target-platforms/juno/juno.target
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target name="Eclipse via p2" sequenceNumber="51">
+<?pde version="3.8"?><target name="Eclipse via p2" sequenceNumber="52">
<locations>
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
<unit id="org.eclipse.platform.ide" version="4.2.1.M20120914-1800"/>
@@ -13,14 +13,14 @@
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
<unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
<unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-<unit id="org.junit" version="4.11.0.v201303080030"/>
+<unit id="org.junit" version="4.12.0.v201504281640"/>
<unit id="com.thoughtworks.qdox" version="1.6.3.v20081201-1400"/>
<unit id="javax.inject" version="1.0.0.v20091030"/>
-<unit id="org.hamcrest.library" version="1.3.0.v201305281000"/>
-<unit id="org.hamcrest.library.source" version="1.3.0.v201305281000"/>
+<unit id="org.hamcrest.library" version="1.3.0.v201505072020"/>
+<unit id="org.hamcrest.library.source" version="1.3.0.v201505072020"/>
<unit id="org.hamcrest.core" version="1.3.0.v201303031735"/>
<unit id="org.hamcrest.core.source" version="1.3.0.v201303031735"/>
-<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20140525021250/repository/"/>
+<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20150821153341/repository/"/>
</location>
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
<unit id="org.eclipse.license.feature.group" version="1.0.1.v20140414-1359"/>
diff --git a/devtools/target-platforms/kepler/kepler.target b/devtools/target-platforms/kepler/kepler.target
index a07ea380..cfb45ab5 100644
--- a/devtools/target-platforms/kepler/kepler.target
+++ b/devtools/target-platforms/kepler/kepler.target
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target name="Eclipse via p2" sequenceNumber="51">
+<?pde version="3.8"?><target name="Eclipse via p2" sequenceNumber="52">
<locations>
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
<unit id="org.eclipse.platform.ide" version="0.0.0"/>
@@ -13,14 +13,14 @@
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
<unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
<unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-<unit id="org.junit" version="4.11.0.v201303080030"/>
+<unit id="org.junit" version="4.12.0.v201504281640"/>
<unit id="com.thoughtworks.qdox" version="1.6.3.v20081201-1400"/>
<unit id="javax.inject" version="1.0.0.v20091030"/>
-<unit id="org.hamcrest.library" version="1.3.0.v201305281000"/>
-<unit id="org.hamcrest.library.source" version="1.3.0.v201305281000"/>
+<unit id="org.hamcrest.library" version="1.3.0.v201505072020"/>
+<unit id="org.hamcrest.library.source" version="1.3.0.v201505072020"/>
<unit id="org.hamcrest.core" version="1.3.0.v201303031735"/>
<unit id="org.hamcrest.core.source" version="1.3.0.v201303031735"/>
-<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20140525021250/repository/"/>
+<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20150821153341/repository/"/>
</location>
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
<unit id="org.eclipse.license.feature.group" version="1.0.1.v20140414-1359"/>
diff --git a/devtools/target-platforms/luna/luna.target b/devtools/target-platforms/luna/luna.target
index f9d1249c..ef2c98d2 100644
--- a/devtools/target-platforms/luna/luna.target
+++ b/devtools/target-platforms/luna/luna.target
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target name="Eclipse via p2" sequenceNumber="1">
+<?pde version="3.8"?><target name="Eclipse via p2" sequenceNumber="2">
<locations>
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
<unit id="org.eclipse.platform.ide" version="0.0.0"/>
@@ -13,14 +13,14 @@
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
<unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
<unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-<unit id="org.junit" version="4.11.0.v201303080030"/>
+<unit id="org.junit" version="4.12.0.v201504281640"/>
<unit id="com.thoughtworks.qdox" version="1.6.3.v20081201-1400"/>
<unit id="javax.inject" version="1.0.0.v20091030"/>
-<unit id="org.hamcrest.library" version="1.3.0.v201305281000"/>
-<unit id="org.hamcrest.library.source" version="1.3.0.v201305281000"/>
+<unit id="org.hamcrest.library" version="1.3.0.v201505072020"/>
+<unit id="org.hamcrest.library.source" version="1.3.0.v201505072020"/>
<unit id="org.hamcrest.core" version="1.3.0.v201303031735"/>
<unit id="org.hamcrest.core.source" version="1.3.0.v201303031735"/>
-<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20140525021250/repository/"/>
+<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20150821153341/repository/"/>
</location>
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
<unit id="org.eclipse.license.feature.group" version="1.0.1.v20140414-1359"/>
diff --git a/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/MenuTab.java b/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/MenuTab.java
index 4e0842b2..849fb360 100644
--- a/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/MenuTab.java
+++ b/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/MenuTab.java
@@ -31,6 +31,7 @@ import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
@@ -94,6 +95,7 @@ class MenuTab extends Tab {
/* Create the shell and menu(s) */
Shell shell = new Shell(SWT.SHELL_TRIM | orientation);
+ hookListeners(shell);
shells[shellCount] = shell;
if (barButton.getSelection()) {
if (!menuManagerButton.getSelection()) {
@@ -291,12 +293,9 @@ class MenuTab extends Tab {
if (dropDownButton.getSelection() && cascadeButton.getSelection()) {
/* Create cascade button and drop-down menu in menu bar. */
- MenuManager dropDownMenuManager = new HookedMenuManager(getMenuItemText("Cascade"));
+ MenuManager dropDownMenuManager = new HookedMenuManager(getMenuItemText("Cascade"), instance.images[ControlExample.ciOpenFolder]);
dropDownMenuManager.setRemoveAllWhenShown(dynamicButton.getSelection());
menuManager.add(dropDownMenuManager);
- if (imagesButton.getSelection()) {
- dropDownMenuManager.setImageDescriptor(ImageDescriptor.createFromImage(instance.images[ControlExample.ciOpenFolder]));
- }
if (dynamicButton.getSelection()) {
dropDownMenuManager.addMenuListener(new IMenuListener() {
@@ -404,10 +403,16 @@ class MenuTab extends Tab {
}
/* Create various menu manager contribution items, depending on selections. */
- void createMenuContributionItems(IMenuManager menu, Menu rootMenu, int depth, boolean createSubMenu, boolean createSubSubMenu) {
+ void createMenuContributionItems(IMenuManager menu, final Menu rootMenu, final int depth, final boolean createSubMenu, final boolean createSubSubMenu) {
if (pushButton.getSelection()) {
- IAction action = getAction(rootMenu, depth, getMenuItemText("Push"), IAction.AS_PUSH_BUTTON, false,
- SWT.MOD1 + SWT.MOD2 + 'P', ImageDescriptor.createFromImage(instance.images[ControlExample.ciClosedFolder]));
+ /* Creating a new action instance will force the old MenuItem to be disposed */
+ Action action = new Action(getMenuItemText("Push"), IAction.AS_PUSH_BUTTON) {};
+ if (acceleratorsButton.getSelection()) {
+ action.setAccelerator(SWT.MOD1 + SWT.MOD2 + 'P');
+ }
+ if (imagesButton.getSelection()) {
+ action.setImageDescriptor(ImageDescriptor.createFromImage(instance.images[ControlExample.ciClosedFolder]));
+ }
menu.add(action);
}
@@ -432,12 +437,20 @@ class MenuTab extends Tab {
if (createSubMenu && cascadeButton.getSelection()) {
/* Create cascade button and drop-down menu for the sub-menu. */
- MenuManager subMenuManager = new HookedMenuManager(getMenuItemText("Cascade"));
+ MenuManager subMenuManager = new HookedMenuManager(getMenuItemText("Cascade"), instance.images[ControlExample.ciOpenFolder]);
+ subMenuManager.setRemoveAllWhenShown(dynamicButton.getSelection());
menu.add(subMenuManager);
- if (imagesButton.getSelection())
- subMenuManager.setImageDescriptor(ImageDescriptor.createFromImage(instance.images[ControlExample.ciOpenFolder]));
- createMenuContributionItems(subMenuManager, rootMenu, depth + 1, createSubSubMenu, false);
+ if (dynamicButton.getSelection()) {
+ subMenuManager.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ /* Create various menu items, depending on selections. */
+ createMenuContributionItems(manager, rootMenu, depth + 1, createSubSubMenu, false);
+ }
+ });
+ } else {
+ createMenuContributionItems(subMenuManager, rootMenu, depth + 1, createSubSubMenu, false);
+ }
}
}
@@ -501,18 +514,24 @@ class MenuTab extends Tab {
/* Menu manager that hooks listeners to its widgets as they are created */
private class HookedMenuManager extends MenuManager {
+ private Image image;
+
public HookedMenuManager() {
- this(null);
+ this(null, null);
}
- public HookedMenuManager(String text) {
+ public HookedMenuManager(String text, Image image) {
super(text);
+ this.image = image;
}
@Override
protected void doItemFill(IContributionItem ci, int index) {
super.doItemFill(ci, index);
Item item = getMenuItem(index);
+ if (imagesButton.getSelection() && ci instanceof HookedMenuManager) {
+ item.setImage(((HookedMenuManager) ci).image);
+ }
hookListeners(item);
if (item instanceof MenuItem) {
MenuItem menuItem = (MenuItem) item;
diff --git a/org.eclipse.swtbot.swt.finder.test/src/org/eclipse/swtbot/swt/finder/widgets/SWTBotPopupMenuTest.java b/org.eclipse.swtbot.swt.finder.test/src/org/eclipse/swtbot/swt/finder/widgets/SWTBotPopupMenuTest.java
index bf6c4eac..88ea5952 100644
--- a/org.eclipse.swtbot.swt.finder.test/src/org/eclipse/swtbot/swt/finder/widgets/SWTBotPopupMenuTest.java
+++ b/org.eclipse.swtbot.swt.finder.test/src/org/eclipse/swtbot/swt/finder/widgets/SWTBotPopupMenuTest.java
@@ -7,7 +7,8 @@
*
* Contributors:
* Ketan Padegaonkar - initial API and implementation
- * Patrick Tasse - Fix radio menu item click behavior (Bug 451126 & Bug 397649)
+ * Patrick Tasse - Fix radio menu item click behavior (Bug 451126 & Bug 397649),
+ * test dynamic menus
*******************************************************************************/
package org.eclipse.swtbot.swt.finder.widgets;
@@ -19,46 +20,83 @@ import static org.hamcrest.Matchers.containsString;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import java.util.Arrays;
+import java.util.Collection;
+
import org.eclipse.swtbot.swt.finder.SWTBot;
import org.eclipse.swtbot.swt.finder.test.AbstractControlExampleTest;
import org.hamcrest.core.AnyOf;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
/**
* @author Ketan Padegaonkar &lt;KetanPadegaonkar [at] gmail [dot] com&gt;
* @version $Id$
*/
+@RunWith(Parameterized.class)
public class SWTBotPopupMenuTest extends AbstractControlExampleTest {
private SWTBotShell popupShell;
- private SWTBotShell activeShell;
+ private MenuType menuType;
+
+ private enum MenuType {
+ StaticMenu, DynamicMenu
+ }
+
+ @Parameters(name = "{0}")
+ public static Collection<MenuType> parameters() {
+ return Arrays.asList(MenuType.values());
+ }
+
+ public SWTBotPopupMenuTest(MenuType menuType) {
+ this.menuType = menuType;
+ }
@Test
public void findsMenus() throws Exception {
assertNotNull(popupShell.contextMenu("Push").widget);
- assertSameWidget(popupShell.contextMenu("Push").widget, popupShell.contextMenu("Push").widget);
+ if (menuType == MenuType.StaticMenu) {
+ assertSameWidget(popupShell.contextMenu("Push").widget, popupShell.contextMenu("Push").widget);
+ } else {
+ /* Dynamic menu manager disposes the old MenuItem */
+ assertNotSameWidget(popupShell.contextMenu("Push").widget, popupShell.contextMenu("Push").widget);
+ }
}
@Test
public void findsSubMenus() throws Exception {
- SWTBotMenu cascade = popupShell.contextMenu("Cascade");
- assertNotSameWidget(cascade.menu("Push").widget, popupShell.contextMenu("Push").widget);
- assertNotSameWidget(cascade.menu("Cascade").menu("Push").widget, popupShell.contextMenu("Push").widget);
+ SWTBotMenu push1 = popupShell.contextMenu("Push");
+ SWTBotMenu cascade1 = popupShell.contextMenu("Cascade");
+ SWTBotMenu push2 = cascade1.menu("Push");
+ SWTBotMenu cascade2 = cascade1.menu("Cascade");
+ SWTBotMenu push3 = cascade2.menu("Push");
+ assertNotNull(push1.widget);
+ assertNotNull(push2.widget);
+ assertNotNull(push3.widget);
+ assertNotSameWidget(push2.widget, push1.widget);
+ assertNotSameWidget(push3.widget, push1.widget);
+ assertNotSameWidget(push3.widget, push2.widget);
+ if (menuType == MenuType.StaticMenu) {
+ assertSameWidget(push3.widget, cascade2.menu("Push").widget);
+ assertSameWidget(push3.widget, cascade1.menu("Cascade").menu("Push").widget);
+ assertSameWidget(push3.widget, popupShell.contextMenu("Cascade").menu("Cascade").menu("Push").widget);
+ } else {
+ /* Dynamic menu manager disposes the old MenuItem */
+ assertNotSameWidget(push3.widget, cascade2.menu("Push").widget);
+ assertNotSameWidget(push3.widget, cascade1.menu("Cascade").menu("Push").widget);
+ assertNotSameWidget(push3.widget, popupShell.contextMenu("Cascade").menu("Cascade").menu("Push").widget);
+ }
}
@Test
public void clicksMenu() throws Exception {
- tearDown();
- activeShell.activate();
- bot.checkBox("Listen").select();
- setUp();
+ bot.button("Clear").click();
popupShell.contextMenu("Push").click();
- activeShell.activate();
String text = bot.textInGroup("Listeners").getText();
- // FIXME https://bugs.eclipse.org/bugs/show_bug.cgi?id=209752
- // FIXED > 071114
String expectedLinux = "Show [22]: MenuEvent{Menu {Push, , Check, Radio1, Radio2, Cascade} time=";
String expectedWindows = "Show [22]: MenuEvent{Menu {Push, |, Check, Radio1, Radio2, Cascade} time=";
assertThat(text, AnyOf.anyOf(containsString(expectedWindows), containsString(expectedLinux)));
@@ -92,8 +130,7 @@ public class SWTBotPopupMenuTest extends AbstractControlExampleTest {
@Before
public void setUp() throws Exception {
- bot = new SWTBot();
- activeShell = bot.activeShell();
+ bot = new SWTBot().activeShell().bot();
bot.tabItem("Menu").activate();
bot.checkBox("Listen").select();
@@ -106,29 +143,21 @@ public class SWTBotPopupMenuTest extends AbstractControlExampleTest {
bot.checkBox("Sub-Menu").select();
bot.checkBox("Sub-Sub-Menu").select();
- bot.checkBox("SWT.BAR").select();
- bot.button("Create Shell").click();
- popupShell = bot.shell("Title:0");
- popupShell.activate();
+ if (menuType.equals(MenuType.StaticMenu)) {
+ bot.checkBox("Menu Manager").deselect();
+ bot.button("Create Shell").click();
+ popupShell = bot.shell("Title:0");
+ } else if (menuType.equals(MenuType.DynamicMenu)) {
+ bot.checkBox("Menu Manager").select();
+ bot.checkBox("Dynamic").select();
+ bot.button("Create Shell").click();
+ popupShell = bot.shell("Title:0");
+ }
}
@After
public void tearDown() throws Exception {
- popupShell.close();
bot.button("Close All Shells").click();
- bot.checkBox("Listen").deselect();
-
- bot.checkBox("Listen").deselect();
-
- bot.checkBox("SWT.CASCADE").deselect();
- bot.checkBox("SWT.CHECK").deselect();
- bot.checkBox("SWT.PUSH").deselect();
- bot.checkBox("SWT.RADIO").deselect();
- bot.checkBox("SWT.SEPARATOR").deselect();
-
- bot.checkBox("Sub-Sub-Menu").deselect();
- bot.checkBox("Sub-Menu").deselect();
- bot.checkBox("SWT.BAR").deselect();
}
}

Back to the top