BugĀ 529122 - New rules for Selection, Check and Doubleclick on Table
Also adds a new rule for Check on Tree.
Change-Id: I19926842a6f51abbfa558ff9e2a077d403f70281
Signed-off-by: Aparna Argade <aprsac@yahoo.com>
diff --git a/org.eclipse.swtbot.generator.test/src/org/eclipse/swtbot/generator/test/RecordTableItemDoubleclickTest.java b/org.eclipse.swtbot.generator.test/src/org/eclipse/swtbot/generator/test/RecordTableItemDoubleclickTest.java
new file mode 100644
index 0000000..7bef76c
--- /dev/null
+++ b/org.eclipse.swtbot.generator.test/src/org/eclipse/swtbot/generator/test/RecordTableItemDoubleclickTest.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * 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.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class RecordTableItemDoubleclickTest extends AbstractGeneratorTest {
+
+ @Override
+ protected void contributeToDialog(Composite container) {
+ Table table = new Table(container, SWT.MULTI | SWT.CHECK);
+ for (int i = 1; i <= 4; i++) {
+ TableItem item = new TableItem(table, SWT.NONE);
+ if (i != 4)
+ item.setText(0, "item" + Integer.toString(i)); //$NON-NLS-1$
+ else
+ item.setText(0, "item" + Integer.toString(i - 1)); //$NON-NLS-1$
+ }
+ }
+
+ @Test
+ public void testTableDoubleClick() {
+ this.bot.table().getTableItem("item1").doubleClick(); //$NON-NLS-1$
+ flushEvents();
+ Assert.assertEquals("bot.table().select(\"item1\");\nbot.table().getTableItem(\"item1\").doubleClick();", //$NON-NLS-1$
+ recorderShellBot().text().getText().trim());
+ }
+
+ @Test
+ public void testTableDoubleClickSameItem() {
+ this.bot.table().getTableItem("item3").doubleClick(); //$NON-NLS-1$
+ flushEvents();
+ Assert.assertEquals("bot.table().select(2);\nbot.table().getTableItem(2).doubleClick();", //$NON-NLS-1$
+ recorderShellBot().text().getText().trim());
+ }
+
+ @Test
+ public void testTableDoubleClickSameItem2() {
+ this.bot.table().getTableItem(3).doubleClick(); //$NON-NLS-1$
+ flushEvents();
+ Assert.assertEquals("bot.table().select(3);\nbot.table().getTableItem(3).doubleClick();", //$NON-NLS-1$
+ recorderShellBot().text().getText().trim());
+ }
+
+}
diff --git a/org.eclipse.swtbot.generator.test/src/org/eclipse/swtbot/generator/test/RecordTableItemSelectionCheckTest.java b/org.eclipse.swtbot.generator.test/src/org/eclipse/swtbot/generator/test/RecordTableItemSelectionCheckTest.java
new file mode 100644
index 0000000..1e707ee
--- /dev/null
+++ b/org.eclipse.swtbot.generator.test/src/org/eclipse/swtbot/generator/test/RecordTableItemSelectionCheckTest.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * 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.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class RecordTableItemSelectionCheckTest extends AbstractGeneratorTest {
+
+ @Override
+ protected void contributeToDialog(Composite container) {
+ Table table = new Table(container, SWT.MULTI | SWT.CHECK);
+ for (int i = 1; i <= 4; i++) {
+ TableItem item = new TableItem(table, SWT.NONE);
+ if (i != 4)
+ item.setText(0, "item" + Integer.toString(i)); //$NON-NLS-1$
+ else
+ item.setText(0, "item" + Integer.toString(i - 1)); //$NON-NLS-1$
+ }
+ }
+
+ @Test
+ public void testSingleTableSelection() {
+ this.bot.table().select("item2"); //$NON-NLS-1$
+ flushEvents();
+ Assert.assertEquals("bot.table().select(\"item2\");", //$NON-NLS-1$
+ recorderShellBot().text().getText().trim());
+ }
+
+ @Test
+ public void testMultipleTableSelectionDifferentItems() {
+ this.bot.table().select("item1", "item2"); //$NON-NLS-1$ //$NON-NLS-2$
+ flushEvents();
+ Assert.assertEquals("bot.table().select(\"item1\");\nbot.table().select(\"item1\", \"item2\");", //$NON-NLS-1$
+ recorderShellBot().text().getText().trim());
+ }
+
+ @Test
+ public void testMultipleTableSelectionSameItem() {
+ this.bot.table().select(2, 3);
+ flushEvents();
+ Assert.assertEquals("bot.table().select(2);\nbot.table().select(2, 3);", //$NON-NLS-1$
+ recorderShellBot().text().getText().trim());
+ }
+
+ @Test
+ public void testMultipleTableSelectionSameItem2() {
+ this.bot.table().select("item1", "item3"); //$NON-NLS-1$ //$NON-NLS-2$
+ flushEvents();
+ Assert.assertEquals("bot.table().select(\"item1\");\nbot.table().select(0, 2);", //$NON-NLS-1$
+ recorderShellBot().text().getText().trim());
+ }
+
+ @Test
+ public void testTableCheck() {
+ this.bot.table().getTableItem("item2").toggleCheck(); //$NON-NLS-1$
+ flushEvents();
+ Assert.assertEquals("bot.table().getTableItem(\"item2\").toggleCheck();", //$NON-NLS-1$
+ recorderShellBot().text().getText().trim());
+ }
+
+ @Test
+ public void testTableCheckSameItem() {
+ this.bot.table().getTableItem(3).toggleCheck(); //$NON-NLS-1$
+ flushEvents();
+ Assert.assertEquals(
+ "bot.table().getTableItem(3).toggleCheck();", //$NON-NLS-1$
+ recorderShellBot().text().getText().trim());
+ }
+
+ @Test
+ public void testTableCheckSameItem2() {
+ this.bot.table().getTableItem("item3").toggleCheck(); //$NON-NLS-1$
+ flushEvents();
+ Assert.assertEquals(
+ "bot.table().getTableItem(2).toggleCheck();", //$NON-NLS-1$
+ recorderShellBot().text().getText().trim());
+ }
+
+}
diff --git a/org.eclipse.swtbot.generator.test/src/org/eclipse/swtbot/generator/test/RecordTreeItemCheckTest.java b/org.eclipse.swtbot.generator.test/src/org/eclipse/swtbot/generator/test/RecordTreeItemCheckTest.java
new file mode 100644
index 0000000..4f6b312
--- /dev/null
+++ b/org.eclipse.swtbot.generator.test/src/org/eclipse/swtbot/generator/test/RecordTreeItemCheckTest.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2017 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 RecordTreeItemCheckTest 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 testTreeCheck() {
+ this.bot.tree().getTreeItem("item0").toggleCheck(); //$NON-NLS-1$
+ flushEvents();
+ Assert.assertEquals("bot.tree().getTreeItem(\"item0\").toggleCheck();", //$NON-NLS-1$
+ recorderShellBot().text().getText().trim());
+ }
+
+}
diff --git a/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/SWTBotGeneratorRules.java b/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/SWTBotGeneratorRules.java
index 410b898..4361763 100644
--- a/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/SWTBotGeneratorRules.java
+++ b/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/SWTBotGeneratorRules.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2014 Red Hat Inc..
+ * Copyright (c) 2014 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
@@ -32,10 +32,13 @@
import org.eclipse.swtbot.generator.framework.rules.complex.ToolBarMenuComplexRule;
import org.eclipse.swtbot.generator.framework.rules.simple.CComboSelectionRule;
import org.eclipse.swtbot.generator.framework.rules.simple.CTabItemActivateRule;
+import org.eclipse.swtbot.generator.framework.rules.simple.CheckTableItemRule;
+import org.eclipse.swtbot.generator.framework.rules.simple.CheckTreeItemRule;
import org.eclipse.swtbot.generator.framework.rules.simple.CheckboxClickedRule;
import org.eclipse.swtbot.generator.framework.rules.simple.ComboSelectionRule;
import org.eclipse.swtbot.generator.framework.rules.simple.ComboTextModifyRule;
import org.eclipse.swtbot.generator.framework.rules.simple.ContextMenuRule;
+import org.eclipse.swtbot.generator.framework.rules.simple.DoubleClickTableItemRule;
import org.eclipse.swtbot.generator.framework.rules.simple.DoubleClickTreeItemRule;
import org.eclipse.swtbot.generator.framework.rules.simple.ExpandTreeItemRule;
import org.eclipse.swtbot.generator.framework.rules.simple.ModifyStyledTextRule;
@@ -44,6 +47,7 @@
import org.eclipse.swtbot.generator.framework.rules.simple.PushButtonClickedRule;
import org.eclipse.swtbot.generator.framework.rules.simple.RadioButtonClickedRule;
import org.eclipse.swtbot.generator.framework.rules.simple.SelectListItemRule;
+import org.eclipse.swtbot.generator.framework.rules.simple.SelectTableItemRule;
import org.eclipse.swtbot.generator.framework.rules.simple.SelectTreeItemRule;
import org.eclipse.swtbot.generator.framework.rules.simple.ShellMenuClickedRule;
import org.eclipse.swtbot.generator.framework.rules.simple.TabItemActivateRule;
@@ -53,7 +57,7 @@
public class SWTBotGeneratorRules implements Generator {
private static final String RULES_EXTENSION_POINT = "org.eclipse.swtbot.generator.rules.additions"; //$NON-NLS-1$
-
+
@Override
public List<GenerationSimpleRule> createSimpleRules() {
List<GenerationSimpleRule> res = new ArrayList<GenerationSimpleRule>();
@@ -76,9 +80,12 @@
res.add(new SelectListItemRule());
res.add(new CTabItemActivateRule());
res.add(new TabItemActivateRule());
-
res.add(new PressShortCutRule());
-
+ res.add(new SelectTableItemRule());
+ res.add(new CheckTableItemRule());
+ res.add(new CheckTreeItemRule());
+ res.add(new DoubleClickTableItemRule());
+
IExtensionRegistry registry = RegistryFactory.getRegistry();
if (registry != null) {
for (IConfigurationElement element : registry.getConfigurationElementsFor(RULES_EXTENSION_POINT)) {
@@ -88,11 +95,11 @@
res.add(rule);
} catch (CoreException ex) {
SWTBotGeneratorPlugin.getDefault().getLog().log(
- new Status(
- IStatus.ERROR,
- element.getContributor().getName(),
- ex.getMessage(),
- ex));
+ new Status(
+ IStatus.ERROR,
+ element.getContributor().getName(),
+ ex.getMessage(),
+ ex));
}
}
}
@@ -114,7 +121,7 @@
cres.add(new ModifyTextComplexRule());
cres.add(new ModifyStyledTextComplexRule());
cres.add(new ModifyComboComplexRule());
-
+
IExtensionRegistry registry = RegistryFactory.getRegistry();
if (registry != null) {
for (IConfigurationElement element : registry.getConfigurationElementsFor(RULES_EXTENSION_POINT)) {
@@ -124,11 +131,11 @@
cres.add(rule);
} catch (CoreException ex) {
SWTBotGeneratorPlugin.getDefault().getLog().log(
- new Status(
- IStatus.ERROR,
- element.getContributor().getName(),
- ex.getMessage(),
- ex));
+ new Status(
+ IStatus.ERROR,
+ element.getContributor().getName(),
+ ex.getMessage(),
+ ex));
}
}
}
diff --git a/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/AbstractTableGenerationRule.java b/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/AbstractTableGenerationRule.java
new file mode 100644
index 0000000..3898677
--- /dev/null
+++ b/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/AbstractTableGenerationRule.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * 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.framework.rules.simple;
+
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swtbot.generator.framework.GenerationSimpleRule;
+import org.eclipse.swtbot.generator.framework.WidgetUtils;
+
+public abstract class AbstractTableGenerationRule extends GenerationSimpleRule {
+
+ private int index;
+ private Table table;
+ private TableItem currentItem;
+ boolean useIndex = false;
+
+ /**
+ * Subclasses should call super.appliesTo first, and then
+ * verify their conditions
+ * @param event
+ * @return
+ */
+ @Override
+ public boolean appliesTo(Event event) {
+ return event.widget instanceof Table && event.item instanceof TableItem;
+ }
+
+ @Override
+ public void initializeForEvent(Event event) {
+ this.table = (Table)event.widget;
+ index = WidgetUtils.getIndex(table);
+ this.currentItem = (TableItem) event.item;
+ int nbOccurrences = 0;
+ for (TableItem item : this.table.getItems()) {
+ if (item.getText().equals(((TableItem) event.item).getText())) {
+ nbOccurrences++;
+ if (nbOccurrences > 1) {
+ this.useIndex = true;
+ break;
+ }
+ }
+ }
+ }
+
+ public String getWidgetAccessor() {
+ StringBuilder res = new StringBuilder();
+ res.append("bot.table(");
+ if (index != 0) {
+ res.append(index);
+ }
+ res.append(")");
+ res.append(".getTableItem(");
+ if (this.useIndex) {
+ res.append(table.indexOf(currentItem));
+ } else {
+ res.append("\"" + currentItem.getText() + "\"");
+ }
+ res.append(")");
+ return res.toString();
+ }
+
+ @Override
+ public Table getWidget() {
+ return this.table;
+ }
+
+}
\ No newline at end of file
diff --git a/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/CheckTableItemRule.java b/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/CheckTableItemRule.java
new file mode 100644
index 0000000..f2194d8
--- /dev/null
+++ b/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/CheckTableItemRule.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2017 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.framework.rules.simple;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Event;
+
+public class CheckTableItemRule extends AbstractTableGenerationRule {
+
+ @Override
+ public boolean appliesTo(Event e) {
+ return super.appliesTo(e) && e.type == SWT.Selection && e.detail == SWT.CHECK;
+ }
+
+ @Override
+ public List<String> getActions() {
+ List<String> actions = new ArrayList<String>();
+ StringBuilder code = new StringBuilder();
+ code.append(getWidgetAccessor());
+ code.append(".toggleCheck()");
+ actions.add(code.toString());
+ return actions;
+
+ }
+
+ @Override
+ public List<String> getImports() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff --git a/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/CheckTreeItemRule.java b/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/CheckTreeItemRule.java
new file mode 100644
index 0000000..94a56f2
--- /dev/null
+++ b/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/CheckTreeItemRule.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2017 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.framework.rules.simple;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Event;
+
+public class CheckTreeItemRule extends AbstractTreeGenerationRule {
+ @Override
+ public boolean appliesTo(Event e) {
+ return super.appliesTo(e) && e.type == SWT.Selection && e.detail == SWT.CHECK;
+ }
+
+ @Override
+ public List<String> getActions() {
+ List<String> actions = new ArrayList<String>();
+ StringBuilder code = new StringBuilder();
+ code.append(getWidgetAccessor());
+ code.append(".toggleCheck()");
+ actions.add(code.toString());
+ return actions;
+
+ }
+
+ @Override
+ public List<String> getImports() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff --git a/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/DoubleClickTableItemRule.java b/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/DoubleClickTableItemRule.java
new file mode 100644
index 0000000..9f8874b
--- /dev/null
+++ b/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/DoubleClickTableItemRule.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * 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.framework.rules.simple;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swtbot.generator.framework.GenerationSimpleRule;
+import org.eclipse.swtbot.generator.framework.WidgetUtils;
+
+public class DoubleClickTableItemRule extends GenerationSimpleRule {
+
+ private int index;
+ private Table table;
+ private TableItem currentItem;
+ boolean useIndex = false;
+
+ /**
+ * 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 event.widget instanceof Table && event.type == SWT.MouseDoubleClick
+ && ((Table) event.widget).getSelectionCount() == 1;
+ }
+
+ @Override
+ public void initializeForEvent(Event event) {
+ this.table = (Table) event.widget;
+ this.currentItem = (TableItem) event.item;
+ this.index = WidgetUtils.getIndex(this.table);
+ currentItem = table.getSelection()[0];
+ int nbOccurrences = 0;
+ TableItem[] tableitems = this.table.getItems();
+ for (TableItem item : tableitems) {
+ if (item.getText().equals(currentItem.getText())) {
+ nbOccurrences++;
+ if (nbOccurrences > 1) {
+ this.useIndex = true;
+ break;
+ }
+ }
+ }
+ }
+
+ public String getWidgetAccessor() {
+ StringBuilder res = new StringBuilder();
+ res.append("bot.table(");
+ if (index != 0) {
+ res.append(index);
+ }
+ res.append(")");
+ res.append(".getTableItem(");
+ if (this.useIndex) {
+ res.append(table.indexOf(currentItem));
+ } else {
+ res.append("\"" + currentItem.getText() + "\"");
+ }
+ res.append(")");
+ return res.toString();
+ }
+
+ @Override
+ public Table getWidget() {
+ return this.table;
+ }
+
+ @Override
+ public List<String> getActions() {
+ List<String> actions = new ArrayList<String>();
+ StringBuilder code = new StringBuilder();
+ code.append(getWidgetAccessor());
+ code.append(".doubleClick()");
+ actions.add(code.toString());
+ return actions;
+
+ }
+
+ @Override
+ public List<String> getImports() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff --git a/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/SelectTableItemRule.java b/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/SelectTableItemRule.java
new file mode 100644
index 0000000..5634bb8
--- /dev/null
+++ b/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/SelectTableItemRule.java
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright (c) 2017 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.framework.rules.simple;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swtbot.generator.framework.GenerationSimpleRule;
+import org.eclipse.swtbot.generator.framework.WidgetUtils;
+
+public class SelectTableItemRule extends GenerationSimpleRule {
+
+ private int index;
+ boolean useIndices = false;
+ private TableItem[] selectedItems;
+ private int[] selectedIndices;
+ private Table table;
+
+ @Override
+ public boolean appliesTo(Event event) {
+ return event.widget instanceof Table && event.type == SWT.Selection && event.detail != SWT.CHECK;
+ }
+
+ @Override
+ public void initializeForEvent(Event event) {
+ this.table = (Table) event.widget;
+ this.index = WidgetUtils.getIndex(this.table);
+ this.selectedIndices = this.table.getSelectionIndices();
+ this.selectedItems = this.table.getSelection();
+ for (TableItem selectedItem : selectedItems) {
+ int nbOccurrences = 0;
+ for (TableItem item : this.table.getItems()) {
+ if (item.getText().equals(selectedItem.getText())) {
+ nbOccurrences++;
+ }
+ }
+ if (nbOccurrences > 1) {
+ this.useIndices = true;
+ }
+ }
+ }
+
+ @Override
+ public List<String> getActions() {
+ List<String> actions = new ArrayList<String>();
+ StringBuilder code = new StringBuilder();
+
+ code.append("bot.table("); //$NON-NLS-1$
+ if (this.index != 0) {
+ code.append(this.index);
+ }
+ code.append(")"); //$NON-NLS-1$
+
+ code.append(".select("); //$NON-NLS-1$
+ if (this.useIndices) {
+ for (int i = 0; i < this.selectedIndices.length; i++) {
+ code.append(this.selectedIndices[i]);
+ if (i < this.selectedIndices.length - 1) {
+ code.append(", "); //$NON-NLS-1$
+ }
+ }
+ } else {
+ for (int i = 0; i < this.selectedItems.length; i++) {
+ code.append('"');
+ code.append(this.selectedItems[i].getText());
+ code.append('"');
+ if (i < this.selectedIndices.length - 1) {
+ code.append(", "); //$NON-NLS-1$
+ }
+ }
+ }
+ code.append(')');
+
+ actions.add(code.toString());
+ return actions;
+ }
+
+ @Override
+ public List<String> getImports() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Table getWidget() {
+ return this.table;
+ }
+
+}
diff --git a/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/SelectTreeItemRule.java b/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/SelectTreeItemRule.java
index d71fb8c..3bd6915 100644
--- a/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/SelectTreeItemRule.java
+++ b/org.eclipse.swtbot.generator/src/org/eclipse/swtbot/generator/framework/rules/simple/SelectTreeItemRule.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012 Red Hat Inc..
+ * Copyright (c) 2012 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
@@ -20,7 +20,7 @@
@Override
public boolean appliesTo(Event e) {
- return super.appliesTo(e) && e.type == SWT.Selection;
+ return super.appliesTo(e) && e.type == SWT.Selection && e.detail != SWT.CHECK;
}
@Override
diff --git a/org.eclipse.swtbot.swt.finder/src/org/eclipse/swtbot/swt/finder/widgets/SWTBotTableItem.java b/org.eclipse.swtbot.swt.finder/src/org/eclipse/swtbot/swt/finder/widgets/SWTBotTableItem.java
index 939d42c..ffd6a3a 100644
--- a/org.eclipse.swtbot.swt.finder/src/org/eclipse/swtbot/swt/finder/widgets/SWTBotTableItem.java
+++ b/org.eclipse.swtbot.swt.finder/src/org/eclipse/swtbot/swt/finder/widgets/SWTBotTableItem.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008, 2017 http://www.inria.fr/ and others.
+ * Copyright (c) 2008, 2018 http://www.inria.fr/ 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
@@ -176,7 +176,6 @@
notifyTable(SWT.Selection);
notifyTable(SWT.MouseUp, createMouseEvent(1, SWT.BUTTON1, 1));
notifyTable(SWT.MouseDown, createMouseEvent(1, SWT.NONE, 2));
- notifyTable(SWT.Selection);
notifyTable(SWT.MouseDoubleClick, createMouseEvent(1, SWT.NONE, 2));
notifyTable(SWT.DefaultSelection);
notifyTable(SWT.MouseUp, createMouseEvent(1, SWT.BUTTON1, 2));