BugĀ 529835 - Fix DoubleClickTreeItemRule (generator)
SWT.MouseDoubleClick event does not set event.item.
Rule's appliesTo should check event.widget and its selectionCount.
initializeForEvent can then refer to the tree's selected item.
Change-Id: I953ebbe390fa87028a675a4f60fb2f45eb492296
Signed-off-by: Aparna Argade <aprsac@yahoo.com>
diff --git a/org.eclipse.swtbot.generator.test/src/org/eclipse/swtbot/generator/test/RecordTreeItemDoubleclickTest.java b/org.eclipse.swtbot.generator.test/src/org/eclipse/swtbot/generator/test/RecordTreeItemDoubleclickTest.java
new file mode 100644
index 0000000..2327e20
--- /dev/null
+++ b/org.eclipse.swtbot.generator.test/src/org/eclipse/swtbot/generator/test/RecordTreeItemDoubleclickTest.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2018 Cadence Design Systems, Inc. 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
+ *
+ * Contributors:
+ * Aparna Argade - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swtbot.generator.test;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class RecordTreeItemDoubleclickTest extends AbstractGeneratorTest {
+
+ @Override
+ protected void contributeToDialog(Composite container) {
+ Tree tree = new Tree(container, SWT.MULTI | SWT.CHECK);
+ TreeItem item = new TreeItem(tree, SWT.NONE);
+ item.setText(0, "item0"); //$NON-NLS-1$
+ TreeItem itemchild = new TreeItem(item, SWT.NONE);
+ itemchild.setText(0, "subitem0"); //$NON-NLS-1$
+ }
+
+ @Test
+ public void testTreeDoubleClick() {
+ this.bot.tree().getTreeItem("item0").doubleClick(); //$NON-NLS-1$
+ flushEvents();
+ Assert.assertEquals(
+ "bot.tree().getTreeItem(\"item0\").select();\nbot.tree().getTreeItem(\"item0\").doubleClick();", //$NON-NLS-1$
+ recorderShellBot().text().getText().trim());
+ }
+
+ @Test
+ public void testTreeLevel2DoubleClick() {
+ this.bot.tree().getTreeItem("item0").getNode("subitem0").doubleClick(); //$NON-NLS-1$
+ flushEvents();
+ Assert.assertEquals(
+ "bot.tree().getTreeItem(\"item0\").expand();\nbot.tree().getTreeItem(\"item0\").getNode(\"subitem0\").select();\nbot.tree().getTreeItem(\"item0\").getNode(\"subitem0\").doubleClick();", //$NON-NLS-1$
+ recorderShellBot().text().getText().trim());
+ }
+
+}
diff --git a/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/DoubleClickTreeItemRule.java b/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/DoubleClickTreeItemRule.java
index 5af6c07..5ba0e60 100644
--- a/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/DoubleClickTreeItemRule.java
+++ b/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/DoubleClickTreeItemRule.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012 Red Hat Inc..
+ * Copyright (c) 2012, 2018 Red Hat Inc. 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
@@ -7,20 +7,71 @@
*
* Contributors:
* Mickael Istria (Red Hat) - initial API and implementation
+ * Aparna Argade - Bug 529835
*******************************************************************************/
package org.eclipse.swtbot.generator.framework.rules.simple;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.swtbot.generator.framework.GenerationSimpleRule;
+import org.eclipse.swtbot.generator.framework.WidgetUtils;
-public class DoubleClickTreeItemRule extends AbstractTreeGenerationRule {
+public class DoubleClickTreeItemRule extends GenerationSimpleRule {
+ private int index;
+ private List<String> path;
+ private Tree tree;
+
+ /**
+ * MouseDoubleClick event does not set event.item, so only event.widget should
+ * be checked. Also, single selection is necessary before MouseDoubleClick.
+ */
@Override
public boolean appliesTo(Event event) {
- return super.appliesTo(event) && event.type == SWT.MouseDoubleClick;
+ return event.widget instanceof Tree && event.type == SWT.MouseDoubleClick
+ && ((Tree) event.widget).getSelectionCount() == 1;
+ }
+
+ @Override
+ public void initializeForEvent(Event event) {
+ this.tree = (Tree) event.widget;
+ path = new ArrayList<String>();
+ index = WidgetUtils.getIndex(tree);
+ TreeItem currentItem = tree.getSelection()[0];
+ while (currentItem != null) {
+ if (currentItem.getText() != null) {
+ path.add(currentItem.getText());
+ }
+ currentItem = currentItem.getParentItem();
+ }
+ Collections.reverse(path);
+ }
+
+ public String getWidgetAccessor() {
+ StringBuilder res = new StringBuilder();
+ res.append("bot.tree(");
+ if (index != 0) {
+ res.append(index);
+ }
+ res.append(")");
+ boolean first = true;
+ for (String text : path) {
+ if (first) {
+ res.append(".getTreeItem(\"");
+ first = false;
+ } else {
+ res.append(".getNode(\"");
+ }
+ res.append(text);
+ res.append("\")");
+ }
+ return res.toString();
}
@Override
@@ -40,4 +91,9 @@
return null;
}
+ @Override
+ public Tree getWidget() {
+ return this.tree;
+ }
+
}
\ No newline at end of file
diff --git a/org.eclipse.swtbot.swt.finder/src/org/eclipse/swtbot/swt/finder/widgets/SWTBotTreeItem.java b/org.eclipse.swtbot.swt.finder/src/org/eclipse/swtbot/swt/finder/widgets/SWTBotTreeItem.java
index 60e5db2..2d89ff3 100644
--- a/org.eclipse.swtbot.swt.finder/src/org/eclipse/swtbot/swt/finder/widgets/SWTBotTreeItem.java
+++ b/org.eclipse.swtbot.swt.finder/src/org/eclipse/swtbot/swt/finder/widgets/SWTBotTreeItem.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008, 2017 Ketan Padegaonkar and others.
+ * Copyright (c) 2008, 2018 Ketan Padegaonkar 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
@@ -468,7 +468,6 @@
notifyTree(SWT.Selection);
notifyTree(SWT.MouseUp, createMouseEvent(1, SWT.BUTTON1, 1));
notifyTree(SWT.MouseDown, createMouseEvent(1, SWT.NONE, 2));
- notifyTree(SWT.Selection);
notifyTree(SWT.MouseDoubleClick, createMouseEvent(1, SWT.NONE, 2));
notifyTree(SWT.DefaultSelection);
notifyTree(SWT.MouseUp, createMouseEvent(1, SWT.BUTTON1, 2));