blob: 5018470ffab61a445cf7fcb3d2fc92a3c9aaeaee [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2011 Obeo.
* 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:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.emf.eef.modelingBot.swtbot;
import static org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable.syncExec;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.common.command.BasicCommandStack;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.edit.domain.IEditingDomainProvider;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
import org.eclipse.emf.eef.components.PropertiesEditionComponent;
import org.eclipse.emf.eef.components.PropertiesEditionElement;
import org.eclipse.emf.eef.extended.editor.ReferenceableObject;
import org.eclipse.emf.eef.modelingBot.Action;
import org.eclipse.emf.eef.modelingBot.IModelingBot;
import org.eclipse.emf.eef.modelingBot.Processing;
import org.eclipse.emf.eef.modelingBot.SequenceType;
import org.eclipse.emf.eef.modelingBot.Wizard;
import org.eclipse.emf.eef.modelingBot.EEFActions.EditAction;
import org.eclipse.emf.eef.modelingBot.helper.EEFModelHelper;
import org.eclipse.emf.eef.modelingBot.helper.EMFHelper;
import org.eclipse.emf.eef.modelingBot.helper.PropertiesEditionHelper;
import org.eclipse.emf.eef.modelingBot.helper.SWTBotHelper;
import org.eclipse.emf.eef.modelingBot.helper.SWTEEFBotHelper;
import org.eclipse.emf.eef.modelingBot.helper.StringHelper;
import org.eclipse.emf.eef.modelingBot.helper.UIConstants;
import org.eclipse.emf.eef.modelingBot.interpreter.EEFInterpreter;
import org.eclipse.emf.eef.modelingBot.interpreter.IModelingBotInterpreter;
import org.eclipse.emf.eef.modelingBot.uri.EEFURIConverter;
import org.eclipse.emf.eef.runtime.EEFRuntimePlugin;
import org.eclipse.emf.eef.views.ElementEditor;
import org.eclipse.emf.eef.views.View;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotEditor;
import org.eclipse.swtbot.swt.finder.SWTBot;
import org.eclipse.swtbot.swt.finder.keyboard.KeyboardFactory;
import org.eclipse.swtbot.swt.finder.results.IntResult;
import org.eclipse.swtbot.swt.finder.results.Result;
import org.eclipse.swtbot.swt.finder.waits.Conditions;
import org.eclipse.swtbot.swt.finder.waits.DefaultCondition;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotButton;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotCTabItem;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotMenu;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotRadio;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;
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;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
/**
* SWTBot bor for EEF editor.
*
* @author <a href="mailto:nathalie.lepine@obeo.fr">Nathalie Lepine</a>
*/
public class SWTEEFBot extends SWTWorkbenchBot implements IModelingBot {
/**
* The ResourceSet where to operate.
*/
protected EditingDomain editingDomain = new AdapterFactoryEditingDomain(EEFRuntimePlugin.getDefault()
.getAdapterFactory(), new BasicCommandStack());
/**
* EEF Interpreter.
*/
private EEFInterpreter interpreter;
/**
* The swtbot editor.
*/
private SWTBotEditor editor;
/**
* The test model resource.
*/
private Resource testModelResource;
/**
* Helper to edit feature.
*/
private PropertiesEditionHelper propertiesEdition;
/**
* Sequence type : wizard, detail page, properties view...
*/
private SequenceType sequenceType;
/**
* Bot Helper.
*/
private SWTEEFBotHelper helper;
/**
* Editor editing domain
*/
private EditingDomain editorEditingDomain;
/**
* Create a SWTEEFBot.
*/
public SWTEEFBot() {
super();
editingDomain.getResourceSet().setURIConverter(new EEFURIConverter());
interpreter = new EEFInterpreter(this, editingDomain);
propertiesEdition = new PropertiesEditionHelper(this);
helper = new SWTEEFBotHelper(this);
}
/**
* Open the properties view.
*/
public void openPropertiesView() {
menu(UIConstants.WINDOW_MENU).menu(UIConstants.SHOW_VIEW_MENU).menu(UIConstants.OTHER_MENU).click();
final SWTBotShell shell = shell(UIConstants.SHOW_VIEW_MENU);
activateShell(shell);
final SWTBotTree viewSelectionTree = tree();
viewSelectionTree.expandNode(UIConstants.GENERAL_MENU).select(UIConstants.PROPERTIES_VIEW_NAME);
button(UIConstants.OK_BUTTON).click();
waitUntil(Conditions.shellCloses(shell));
}
/**
* Open Java Perspective.
*/
public void openJavaPerspective() {
menu(UIConstants.WINDOW_MENU)
.menu(UIConstants.OPEN_PERSPECTIVE_MENU)
.menu(UIConstants.OTHER_MENU)
.click();
final SWTBotShell openPerspectiveShell = shell(UIConstants.OPEN_PERSPECTIVE_MENU);
activateShell(openPerspectiveShell);
try {
table().select(UIConstants.JAVA_LABEL);
} catch (IllegalArgumentException e) {
table().select(UIConstants.JAVA_DEFAULT_LABEL);
}
button(UIConstants.OK_BUTTON).click();
}
/**
* Activate the shell.
*
* @param shell
* SWTBotShell
*/
public void activateShell(SWTBotShell shell) {
shell.activate();
}
/**
* This method close the welcome page if we use the workspace of test for the first time.
*/
public void closeWelcomePage() {
closeAllEditors();
assertNotNull(activeView());
if (UIConstants.WELCOME_LABEL.equals(activeView().getTitle()))
viewByTitle(UIConstants.WELCOME_LABEL).close();
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#createProject(java.lang.String)
*/
public void createProject(String projectName) {
activateShell(shells()[0]);
menu(UIConstants.FILE_MENU).menu(UIConstants.PROJECT_MENU).click();
final SWTBotShell openProjectShell = shell(UIConstants.NEW_PROJECT_MENU);
activateShell(openProjectShell);
tree().expandNode(UIConstants.GENERAL_MENU).select(UIConstants.PROJECT_CREATION_MENU);
button(UIConstants.NEXT_BUTTON).click();
text().setText(projectName);
button(UIConstants.FINISH_BUTTON).click();
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#openProject(java.lang.String)
*/
public void openProject(String projectName) {
final SWTBotTreeItem treeItem = selectInProjectExplorer(projectName);
SWTBotHelper.clickContextMenu(treeItem, UIConstants.OPEN_PROJECT_MENU);
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#closeProject(java.lang.String)
*/
public void closeProject(String projectName) {
final SWTBotTreeItem treeItem = selectInProjectExplorer(projectName);
SWTBotHelper.clickContextMenu(treeItem, UIConstants.CLOSE_PROJECT_MENU);
editorEditingDomain = null;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#removeProject(java.lang.String)
*/
public void removeProject(String projectName) {
final SWTBotTreeItem treeItem = selectInProjectExplorer(projectName);
SWTBotHelper.clickContextMenu(treeItem, UIConstants.DELETE_MENU);
waitUntil(Conditions.shellIsActive(UIConstants.DELETE_RESOURCES_DIALOG));
final SWTBotShell deleteResourcesShell = shell(UIConstants.DELETE_RESOURCES_DIALOG);
SWTBot deleteResourcesBot = deleteResourcesShell.bot();
deleteResourcesBot.checkBox().select();
deleteResourcesBot.button(UIConstants.OK_BUTTON).click();
waitUntil(Conditions.shellCloses(deleteResourcesShell));
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#openPerspective(java.lang.String)
*/
public void openPerspective(String name) {
menu(UIConstants.WINDOW_MENU).menu(UIConstants.OPEN_PERSPECTIVE_MENU).menu(UIConstants.OTHER_MENU)
.click();
final SWTBotShell openPerspectiveShell = shell(UIConstants.OPEN_PERSPECTIVE_MENU);
activateShell(openPerspectiveShell);
try {
table().select(name);
} catch (IllegalArgumentException e) {
table().select(UIConstants.JAVA_DEFAULT_LABEL);
}
button(UIConstants.OK_BUTTON).click();
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#openEEFEditor(java.lang.String)
*/
public void openEEFEditor(String path) {
final SWTBotTreeItem treeItem = selectInProjectExplorer(path);
SWTBotHelper.clickContextMenu(treeItem, UIConstants.INTERACTIVE_EEF_EDITOR_MENU);
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#openEditor(java.lang.String)
*/
public EObject openEditor(String path) {
final SWTBotTreeItem treeItem = selectInProjectExplorer(path);
SWTBotHelper.clickContextMenu(treeItem, "Open");
String splittedPath[] = path.split("/");
editor = editorByTitle(splittedPath[1]);
getEditorEditingDomain();
return getRoot(splittedPath[0], splittedPath[1]);
}
private SWTBotTreeItem selectInProjectExplorer(String path) {
final SWTBotTree wizardTree = viewByTitle(UIConstants.PACKAGE_EXPLORER_VIEW_NAME).bot().tree();
final String[] split = path.split("/");
SWTBotTreeItem treeItem = wizardTree.expandNode(split[0]).select();
for (int i = 1; i < split.length; i++) {
treeItem = treeItem.expandNode(split[i]).select();
}
return treeItem;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#closeEditor(java.lang.String)
*/
public void closeEditor(String path) {
selectInProjectExplorer(path);
menu(UIConstants.FILE_MENU).menu(UIConstants.CLOSE_MENU).click();
editorEditingDomain = null;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#save()
*/
public void save() {
SWTBotHelper.waitAllUiEvents();
// sleep(1000);
// (UIConstants.FILE_MENU).menu(UIConstants.SAVE_MENU).click();
KeyboardFactory.getSWTKeyboard().pressShortcut(SWT.CTRL, 's');
SWTBotHelper.waitAllUiEvents();
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#add(org.eclipse.emf.eef.components.PropertiesEditionElement,
* org.eclipse.emf.eef.extended.editor.ReferenceableObject, org.eclipse.emf.ecore.EStructuralFeature,
* org.eclipse.emf.ecore.EClass)
*/
public EObject add(PropertiesEditionElement propertiesEditionElement,
ReferenceableObject referenceableObjectContainer, ReferenceableObject referenceableObject,
final EStructuralFeature eContainingFeature, EClass type) {
if (propertiesEditionElement != null) {
// work on table composition
return add(propertiesEditionElement, referenceableObjectContainer, referenceableObject);
} else {
// work on context menu
return add(referenceableObject, eContainingFeature, type);
}
}
/**
* Add PropertiesEditionElement.
*
* @param propertiesEditionElement
* @param referenceableObject
* @return
*/
private EObject add(PropertiesEditionElement propertiesEditionElement,
ReferenceableObject referenceableObjectContainer, ReferenceableObject referenceableObject) {
SWTBotHelper.waitAllUiEvents();
assertNotNull("The editor is not opened.", editor);
EObject container = null;
container = getEObjectFromReferenceableEObject(referenceableObjectContainer);
assertNotNull("No container is found to launch wizard.", container);
SWTBotHelper.waitAllUiEvents();
assertFalse("The set action must be define in a sequence.", sequenceType == null);
if (sequenceType.equals(SequenceType.PROPERTIES_VIEW)) {
final SWTBotTreeItem selectNode = selectNode(editor, container);
assertNotNull("No element is selected in the editor", selectNode);
initTab(propertiesEditionElement);
} else if (sequenceType.equals(SequenceType.WIZARD)) {
initTab(propertiesEditionElement);
}
propertiesEdition.addFeature(null, propertiesEditionElement, referenceableObject, sequenceType);
SWTBotHelper.waitAllUiEvents();
return (EObject)EEFModelHelper.eGet(container, propertiesEditionElement.getModel());
}
/**
* Add ReferenceableObject.
*
* @param referenceableObject
* @param eContainingFeature
* @return
*/
private EObject add(ReferenceableObject referenceableObject, final EStructuralFeature eContainingFeature,
EClass type) {
assertNotNull("The editeur is not opened.", editor);
final EObject container = getEObjectFromReferenceableEObject(referenceableObject);
assertNotNull("No container is found to launch add action.", container);
final SWTBotTreeItem selectNode = selectNode(editor, container);
assertNotNull("No element is selected in the editor", selectNode);
String text = EMFHelper.getCreateChildLabel(editingDomain, type, container);
SWTBotHelper.clickContextMenu(selectNode, text);
SWTBotHelper.waitAllUiEvents();
return (EObject)EEFModelHelper.eGet(container, eContainingFeature);
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#remove(org.eclipse.emf.eef.components.PropertiesEditionElement,
* org.eclipse.emf.eef.extended.editor.ReferenceableObject)
*/
public void remove(PropertiesEditionElement propertiesEditionElement,
ReferenceableObject referenceableObject) {
if (propertiesEditionElement != null) {
// work on table composition
removePropertiesEditionElement(propertiesEditionElement, referenceableObject);
} else {
// work on context menu
remove(referenceableObject);
}
}
/**
* Remove propertiesEditionElement.
*
* @param propertiesEditionElement
* @param referenceableObject
*/
private void removePropertiesEditionElement(PropertiesEditionElement propertiesEditionElement,
ReferenceableObject referenceableObject) {
SWTBotHelper.waitAllUiEvents();
assertNotNull("The editor is not opened.", editor);
final EObject remove = getEObjectFromReferenceableEObject(referenceableObject);
assertNotNull("Element to remove does not exist.", remove);
final EObject container = remove.eContainer();
assertNotNull("The container of the element to remove does not exist.", container);
SWTBotHelper.waitAllUiEvents();
final SWTBotTreeItem selectNode = selectNode(editor, container);
assertNotNull("No element is selected in the editor", selectNode);
initTab(propertiesEditionElement);
assertFalse("The set action must be define in a sequence.", sequenceType == null);
propertiesEdition.removeFeature(remove, propertiesEditionElement, sequenceType);
SWTBotHelper.waitAllUiEvents();
}
/**
* Remove referenceableObject.
*
* @param referenceableObject
*/
private void remove(ReferenceableObject referenceableObject) {
assertNotNull("The editor is not opened.", editor);
final EObject container = getEObjectFromReferenceableEObject(referenceableObject);
assertNotNull("No container is found to launch add action.", container);
final SWTBotTreeItem selectNode = selectNode(editor, container);
assertNotNull("No element is selected in the editor", selectNode);
SWTBotHelper.clickContextMenu(selectNode, UIConstants.DELETE_MENU);
SWTBotHelper.waitAllUiEvents();
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#setAttribute(org.eclipse.emf.eef.components.PropertiesEditionElement,
* org.eclipse.emf.eef.extended.editor.ReferenceableObject, org.eclipse.emf.ecore.EStructuralFeature,
* java.util.Collection)
*/
public void setAttribute(PropertiesEditionElement propertiesEditionElement,
ReferenceableObject referenceableObject, EStructuralFeature eContainingFeature,
Collection<String> values) {
SWTBotHelper.waitAllUiEvents();
assertNotNull("The properties edition element is not set.", propertiesEditionElement);
assertNotNull("The editor is not opened.", editor);
SWTBotHelper.waitAllUiEvents();
assertNotNull("The set action must be define in a sequence.", sequenceType);
if (sequenceType.equals(SequenceType.DETAILS_PAGE) || sequenceType.equals(SequenceType.PROPERTIES_VIEW)) {
final EObject container = getEObjectFromReferenceableEObject(referenceableObject);
assertNotNull("No container is found to launch add action.", container);
final SWTBotTreeItem selectNode = selectNode(editor, container);
assertNotNull("No element is selected in the editor", selectNode);
initTab(propertiesEditionElement);
propertiesEdition.updateAttribute(selectNode, propertiesEditionElement, referenceableObject,
container, values, sequenceType);
} else if (sequenceType.equals(SequenceType.WIZARD)) {
EObject containerOfcontainer = null;
if (((EditAction)referenceableObject).getComputedPropertiesEditionElement() != null) {
containerOfcontainer = getEObjectFromReferenceableEObject(((EditAction)referenceableObject)
.getReferenceableObject());
} else {
containerOfcontainer = getEObjectFromReferenceableEObject(referenceableObject);
}
assertNotNull("No container is found to launch add action.", containerOfcontainer);
initTab(propertiesEditionElement);
propertiesEdition.updateAttribute(null, propertiesEditionElement, referenceableObject,
containerOfcontainer, values, sequenceType);
}
}
/**
* Select the tab defined in the PEE.
*
* @param propertiesEditionElement
* PropertiesEditionElement
*/
protected void initTab(PropertiesEditionElement propertiesEditionElement) {
assertFalse(propertiesEditionElement.getViews().isEmpty());
if (EEFModelHelper.getComponent(propertiesEditionElement).getViews().size() > 1) {
final ElementEditor elementEditor = propertiesEditionElement.getViews().get(0);
final View view = EEFModelHelper.getView(elementEditor);
if (view != null) {
if (sequenceType.equals(SequenceType.DETAILS_PAGE) || sequenceType.equals(SequenceType.WIZARD)) {
if (view.getName() != null) {
SWTBotCTabItem cTabItem = cTabItem(view.getName());
cTabItem.activate();
cTabItem.setFocus();
}
} else if (sequenceType.equals(SequenceType.PROPERTIES_VIEW)) {
final PropertiesEditionComponent pec = EEFModelHelper.getComponent(propertiesEditionElement);
if (pec != null && view.getName() != null) {
if (view.getName().equals(pec.getName())) {
SWTBotHelper.selectPropertyTabItem("Base");
} else {
SWTBotHelper.selectPropertyTabItem(view.getName());
}
}
}
if (view.getName() != null) {
String tabToSearch = view.getName();
if (view.getName().equals(((PropertiesEditionComponent)propertiesEditionElement.eContainer()).getName())) {
tabToSearch = "Base";
}
SWTBotCTabItem cTabItem = cTabItem(tabToSearch);
cTabItem.activate();
cTabItem.setFocus();
}
}
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#setReference(org.eclipse.emf.eef.components.PropertiesEditionElement,
* org.eclipse.emf.eef.extended.editor.ReferenceableObject, org.eclipse.emf.ecore.EStructuralFeature,
* java.util.Collection)
*/
public void setReference(PropertiesEditionElement propertiesEditionElement,
ReferenceableObject referenceableObject, EStructuralFeature eContainingFeature,
Collection<ReferenceableObject> values) {
SWTBotHelper.waitAllUiEvents();
assertNotNull("The properties edition element is not set.", propertiesEditionElement);
assertNotNull("The editor is not opened.", editor);
SWTBotHelper.waitAllUiEvents();
assertFalse("The set action must be define in a sequence.", sequenceType == null);
if (sequenceType.equals(SequenceType.DETAILS_PAGE) || sequenceType.equals(SequenceType.PROPERTIES_VIEW)) {
final EObject container = getEObjectFromReferenceableEObject(referenceableObject);
assertNotNull("No container is found to launch set ref action.", container);
final SWTBotTreeItem selectNode = selectNode(editor, container);
assertNotNull("No element is selected in the editor", selectNode);
final Collection<EObject> objectsToSet = new ArrayList<EObject>();
for (ReferenceableObject value : values) {
objectsToSet.add(getEObjectFromReferenceableEObject(value));
}
initTab(propertiesEditionElement);
propertiesEdition.updateFeature(selectNode, propertiesEditionElement, referenceableObject,
objectsToSet, sequenceType);
} else if (sequenceType.equals(SequenceType.WIZARD)) {
final Collection<EObject> objectsToSet = new ArrayList<EObject>();
for (ReferenceableObject value : values) {
objectsToSet.add(getEObjectFromReferenceableEObject(value));
}
initTab(propertiesEditionElement);
propertiesEdition.updateFeature(null, propertiesEditionElement, referenceableObject,
objectsToSet, sequenceType);
}
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#unset(org.eclipse.emf.eef.components.PropertiesEditionElement,
* org.eclipse.emf.eef.extended.editor.ReferenceableObject, org.eclipse.emf.ecore.EStructuralFeature)
*/
public void unset(PropertiesEditionElement propertiesEditionElement,
ReferenceableObject referenceableObject, EStructuralFeature eContainingFeature) {
SWTBotHelper.waitAllUiEvents();
assertNotNull("The properties edition element is not set.", propertiesEditionElement);
assertNotNull("The editor is not opened.", editor);
assertFalse(propertiesEditionElement.getViews().isEmpty());
final ElementEditor elementEditor = propertiesEditionElement.getViews().get(0);
final String representationName = elementEditor.getRepresentation().getName();
if ("Text".equals(representationName) || "Textarea".equals(representationName)) {
setAttribute(propertiesEditionElement, referenceableObject, eContainingFeature,
Collections.singletonList(""));
} else if ("EObjectFlatComboViewer".equals(representationName)) {
propertiesEdition.unsetEObjectFlatComboViewer(elementEditor, Collections.<EObject> emptyList());
} else if ("MultiValuedEditor".equals(representationName)) {
propertiesEdition.unsetMultiValuedEditor(propertiesEditionElement, null, sequenceType);
} else if ("AdvancedEObjectFlatComboViewer".equals(representationName)) {
propertiesEdition.unsetAdvancedEObjectFlatComboViewer(elementEditor);
} else if ("ReferencesTable".equals(representationName)) {
propertiesEdition.unsetReferencesTable(elementEditor, null);
} else if ("AdvancedReferencesTable".equals(representationName)) {
unsetAdvancedReferencesTable(propertiesEditionElement, referenceableObject, eContainingFeature);
} else if ("FlatReferencesTable".equals(representationName)) {
propertiesEdition.unsetFlatReferencesTable(propertiesEditionElement, null);
} else if ("Combo".equals(representationName)) {
final EObject container = getEObjectFromReferenceableEObject((ReferenceableObject)referenceableObject);
assertNotNull("No container is found to launch add action.", container);
propertiesEdition.unsetCombo(propertiesEditionElement, referenceableObject, container,
sequenceType);
} else {
System.out.println("Case not managed in unset : " + representationName);
}
SWTBotHelper.waitAllUiEvents();
}
/**
* unsets AdvancedReferencesTable.
*
* @param propertiesEditionElement
* @param referenceableObject
* @param eContainingFeature
*/
public void unsetAdvancedReferencesTable(PropertiesEditionElement propertiesEditionElement,
ReferenceableObject referenceableObject, EStructuralFeature eContainingFeature) {
final ElementEditor elementEditor = propertiesEditionElement.getViews().get(0);
if (sequenceType.equals(SequenceType.DETAILS_PAGE) || sequenceType.equals(SequenceType.PROPERTIES_VIEW)) {
propertiesEdition.unsetAdvancedReferencesTable(elementEditor, null);
} else if (sequenceType.equals(SequenceType.WIZARD)) {
initTab(propertiesEditionElement);
propertiesEdition.unsetAdvancedReferencesTable(elementEditor, null);
}
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#unsetAttribute(org.eclipse.emf.eef.components.PropertiesEditionElement,
* org.eclipse.emf.eef.extended.editor.ReferenceableObject, org.eclipse.emf.ecore.EStructuralFeature,
* java.util.Collection)
*/
public void unsetAttribute(PropertiesEditionElement propertiesEditionElement,
ReferenceableObject referenceableObject, EStructuralFeature eContainingFeature,
Collection<String> values) {
SWTBotHelper.waitAllUiEvents();
assertNotNull("The properties edition element is not set.", propertiesEditionElement);
assertNotNull("The editor is not opened.", editor);
assertFalse(propertiesEditionElement.getViews().isEmpty());
if (sequenceType.equals(SequenceType.DETAILS_PAGE) || sequenceType.equals(SequenceType.PROPERTIES_VIEW)) {
final EObject container = getEObjectFromReferenceableEObject(referenceableObject);
assertNotNull("No container is found to launch add action.", container);
final SWTBotTreeItem selectNode = selectNode(editor, container);
assertNotNull("No element is selected in the editor", selectNode);
initTab(propertiesEditionElement);
propertiesEdition.unsetAttribute(propertiesEditionElement, referenceableObject, container,
values, sequenceType);
} else if (sequenceType.equals(SequenceType.WIZARD)) {
EObject containerOfcontainer = null;
if (((EditAction)referenceableObject).getComputedPropertiesEditionElement() != null) {
containerOfcontainer = getEObjectFromReferenceableEObject(((EditAction)referenceableObject)
.getReferenceableObject());
} else {
containerOfcontainer = getEObjectFromReferenceableEObject(referenceableObject);
}
assertNotNull("No container is found to launch unset attribute action.", containerOfcontainer);
initTab(propertiesEditionElement);
propertiesEdition.unsetAttribute(propertiesEditionElement, referenceableObject,
containerOfcontainer, values, sequenceType);
}
SWTBotHelper.waitAllUiEvents();
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#unsetReference(org.eclipse.emf.eef.components.PropertiesEditionElement,
* org.eclipse.emf.eef.extended.editor.ReferenceableObject, org.eclipse.emf.ecore.EStructuralFeature,
* java.util.Collection)
*/
public void unsetReference(PropertiesEditionElement propertiesEditionElement,
ReferenceableObject referenceableObject, EStructuralFeature eContainingFeature,
Collection<ReferenceableObject> values) {
SWTBotHelper.waitAllUiEvents();
assertNotNull("The properties edition element is not set.", propertiesEditionElement);
assertNotNull("The editor is not opened.", editor);
assertFalse(propertiesEditionElement.getViews().isEmpty());
if (sequenceType.equals(SequenceType.DETAILS_PAGE) || sequenceType.equals(SequenceType.PROPERTIES_VIEW)) {
final Collection<EObject> objectsToUnset = new ArrayList<EObject>();
for (ReferenceableObject value : values) {
objectsToUnset.add(getEObjectFromReferenceableEObject(value));
}
initTab(propertiesEditionElement);
propertiesEdition.unsetReference(propertiesEditionElement, referenceableObject, objectsToUnset,
sequenceType);
} else if (sequenceType.equals(SequenceType.WIZARD)) {
Collection<EObject> objectsToUnset = new ArrayList<EObject>();
for (ReferenceableObject value : values) {
objectsToUnset.add(getEObjectFromReferenceableEObject(value));
}
initTab(propertiesEditionElement);
propertiesEdition.unsetReference(propertiesEditionElement, referenceableObject, objectsToUnset,
sequenceType);
}
SWTBotHelper.waitAllUiEvents();
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#runModelingBot(java.lang.String)
*/
public void runModelingBot(String path) throws CoreException, IOException {
interpreter.runModelingBot(path);
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#createModel(java.lang.String, java.lang.String,
* org.eclipse.emf.ecore.EClass)
*/
public EObject createModel(String path, String modelName, EClass root) {
final String[] split = modelName.split("\\.");
final String extension = split[split.length - 1];
selectInProjectExplorer(path);
menu(UIConstants.FILE_MENU).menu(UIConstants.OTHER_MENU).click();
final SWTBotShell newFileShell = shell(UIConstants.NEW);
activateShell(newFileShell);
createModel(modelName, root, extension);
// close the default editor
menu(UIConstants.FILE_MENU).menu(UIConstants.CLOSE_MENU).click();
// open with EEF Editor
openWithEEFEditor(path, modelName);
editor = editorByTitle(modelName);
getEditorEditingDomain();
return getRoot(path, modelName);
}
protected EditingDomain getEditorEditingDomain() {
if (editor != null) {
IEditorPart editorPart = editor.getReference().getEditor(true);
if (editorPart instanceof IEditingDomainProvider) {
editorEditingDomain = ((IEditingDomainProvider) editorPart).getEditingDomain();
}
}
return editorEditingDomain;
}
/**
* @param path
* @param modelName
* @return the root of the new resource
*/
private EObject getRoot(String path, String modelName) {
final URI fileURI = URI.createPlatformResourceURI(path + "/" + modelName, true);
Resource resource = editingDomain.getResourceSet().getResource(fileURI, true);
setTestModelResource(resource);
final SWTBotTreeItem modelTreeItem = editor.bot().tree()
.getTreeItem(testModelResource.getURI().toString());
resource = (Resource)syncExec(new Result<Object>() {
public Object run() {
return modelTreeItem.widget.getData();
}
});
setTestModelResource(resource);
assertFalse("The model is empty.", resource.getContents().isEmpty());
return resource.getContents().get(0);
}
/**
* Open eef editor.
*
* @param path
* @param modelName
*/
private void openWithEEFEditor(String path, String modelName) {
final SWTBotTree wizardTree = viewByTitle(UIConstants.PACKAGE_EXPLORER_VIEW_NAME).bot().tree();
final SWTBotTreeItem treeItem = wizardTree.expandNode(path).expandNode(modelName).select();
SWTBotHelper.clickContextMenu(treeItem, UIConstants.OPEN_WITH_INTERACTIVE_EEF_EDITOR_MENU);
}
/**
* Create the new model.
*
* @param modelName
* @param root
* @param extension
*/
private void createModel(String modelName, EClass root, final String extension) {
final String modelType = StringHelper.toU1Case(extension) + " Model";
final SWTBotTreeItem item = tree().expandNode("EMF Editing Framework").expandNode("EMF Model")
.select();
assertNotNull("The model " + modelType + " can not be created.", item);
button(UIConstants.NEXT_BUTTON).click();
button("Browse Registered Packages...").click();
final String nsURI = root.getEPackage().getNsURI();
table().getTableItem(nsURI).select();
button(UIConstants.OK_BUTTON).click();
button(UIConstants.NEXT_BUTTON).click();
textWithLabel(IDEWorkbenchMessages.WizardNewFileCreationPage_fileLabel).setText(modelName);
button(UIConstants.NEXT_BUTTON).click();
assertNotNull("The class " + root.toString() + " can not be loaded", root.getName());
comboBox().setSelection(root.getName());
button(UIConstants.FINISH_BUTTON).click();
}
/**
* @param ref
* ReferenceableObject
* @return the object corresponding to the ReferenceableObject
*/
public EObject getEObjectFromReferenceableEObject(ReferenceableObject ref) {
return interpreter.getEObjectFromReferenceableEObject(ref);
}
/**
* Select the given element in the given editor.
*
* @param editor
* the editor where the bot must process
* @param element
* the element to select
* @return the selected node
*/
public SWTBotTreeItem selectNode(SWTBotEditor editor, EObject element) {
assertNotNull("The model has not been initialized.", testModelResource);
final List<Object> expansionPath = EEFModelHelper.getExpansionPath(element);
final Iterator<Object> iterator = expansionPath.iterator();
Object next = null;
SWTBotTreeItem node2 = editor.bot().tree().getTreeItem(testModelResource.getURI().toString());
while (iterator.hasNext()) {
SWTBotHelper.waitAllUiEvents();
sleep(1000);
node2.expand();
next = iterator.next();
node2 = selectSubNode(node2, next);
}
return node2;
}
/**
* Select the given element in the given editor.
*
* @param editor
* the editor where the bot must process
* @param element
* the element to select
* @return the selected node
*/
public SWTBotTreeItem selectNode(SWTBotTree tree, EObject element) {
assertNotNull("The model has not been initialized.", testModelResource);
final List<Object> expansionPath = EEFModelHelper.getExpansionPath(element);
final Iterator<Object> iterator = expansionPath.iterator();
Object next = null;
SWTBotTreeItem node2 = tree.getTreeItem(testModelResource.getURI().toString());
while (iterator.hasNext()) {
node2.expand();
next = iterator.next();
node2 = selectSubNode(node2, next);
}
return node2;
}
/**
* Select the object <code>next</code> as a subnode of the <code>currentNode</code>.
*
* @param currentNode
* the currentNode
* @param next
* the subnode to select
* @return the selected node
*/
private SWTBotTreeItem selectSubNode(SWTBotTreeItem currentNode, Object next) {
final AdapterFactory adapterFactory = EEFRuntimePlugin.getDefault().getAdapterFactory();
final IItemLabelProvider labelProvider = (IItemLabelProvider)adapterFactory.adapt(next,
IItemLabelProvider.class);
final String text = labelProvider.getText(next);
final SWTBotTreeItem node2 = currentNode.getNode(text);
node2.select();
return node2;
}
/**
* Set the test model resource.
*
* @param resource
* Resource
*/
public void setTestModelResource(Resource resource) {
this.testModelResource = resource;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#getActiveResource()
*/
public Resource getActiveResource() {
return testModelResource;
}
/**
* @param viewID
* the edited Radio ID
* @param mnemonicText
* the mnemonicText
* @return a {@link SWTBotRadio} with the specified <code>viewID and mnemonicText</code>.
*/
public SWTBotRadio radioWithIdAndMnemonic(String viewID, String mnemonicText) {
return helper.radioWithIdAndMnemonic(viewID, mnemonicText);
}
/**
* @param viewID
* the edited MultiValuedEditor
* @return the browse button of the given MultiValuedEditor
*/
public SWTBotButton browseButtonMultiValuedEditor(String viewID) {
return helper.browseButtonMultiValuedEditor(viewID);
}
/**
* @param viewID
* the edited AdvancedTableComposition
* @return the add button of the given AdvancedTableComposition
*/
public SWTBotButton addButtonAdvancedTableComposition(String viewID) {
return helper.addButtonAdvancedTableComposition(viewID);
}
/**
* @param viewID
* the edited TableComposition
* @return the add button of the given TableComposition
*/
public SWTBotButton addButtonTableComposition(String viewID) {
return helper.addButtonTableComposition(viewID);
}
/**
* @param viewID
* the edited AdvancedEOFCV
* @return the browse button of the given AdvancedEOFCV
*/
public SWTBotButton browseButtonAdvancedEObjectFlatComboViewer(String viewID) {
return helper.browseButtonAdvancedEObjectFlatComboViewer(viewID);
}
/**
* @param viewID
* the edited EOFCV
* @return the edit button of the given EOFCV
*/
public SWTBotButton editButtonEObjectFlatComboViewer(String viewID) {
return helper.editButtonEObjectFlatComboViewer(viewID);
}
/**
* @param viewID
* the edited AdvancedReferencesTable
* @return the add button of the given AdvancedReferencesTable
*/
public SWTBotButton addButtonAdvancedReferencesTable(String viewID) {
return helper.addButtonAdvancedReferencesTable(viewID);
}
/**
* @param viewID
* the edited ReferencesTable
* @return the add button of the given ReferencesTable
*/
public SWTBotButton addButtonReferencesTable(String viewID) {
return helper.addButtonReferencesTable(viewID);
}
/**
* @param viewID
* the edited FlatReferencesTable
* @return the browse button of the given FlatReferencesTable
*/
public SWTBotButton browseButtonFlatReferencesTable(String viewID) {
return helper.browseButtonFlatReferencesTable(viewID);
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#cancel()
*/
public void cancel(Processing processing) {
button(UIConstants.CANCEL_BUTTON).click();
}
/**
* Dispose the interpreter.
*/
public void dispose() {
interpreter.dispose();
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#validateBatchEditing()
*/
public void validateBatchEditing() {
button(UIConstants.FINISH_BUTTON).click();
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#setSequenceType(org.eclipse.emf.eef.modelingBot.SequenceType)
*/
public void setSequenceType(SequenceType sequenceType) {
this.sequenceType = sequenceType;
}
/**
* @param viewID
* the edited AdvancedTableComposition
* @return the remove button of the given AdvancedTableComposition
*/
public SWTBotButton removeButtonAdvancedTableComposition(String viewID) {
return helper.removeButtonAdvancedTableComposition(viewID);
}
/**
* @param viewID
* the edited TableComposition
* @return the remove button of the given TableComposition
*/
public SWTBotButton removeButtonTableComposition(String viewID) {
return helper.removeButtonTableComposition(viewID);
}
/**
* @param viewID
* the edited AdvancedReferencesTable
* @return the remove button of the given AdvancedReferencesTable
*/
public SWTBotButton removeButtonAdvancedReferencesTable(String viewID) {
return helper.removeButtonAdvancedReferencesTable(viewID);
}
/**
* @param viewID
* the edited ReferencesTable
* @return the remove button of the given ReferencesTable
*/
public SWTBotButton removeButtonReferencesTable(String viewID) {
return helper.removeButtonReferencesTable(viewID);
}
/**
* @param viewID
* the edited AdvancedEObjectFlatComboViewer
* @return the remove button of the given AdvancedEObjectFlatComboViewer
*/
public SWTBotButton removeButtonAdvancedEObjectFlatComboViewer(String viewID) {
return helper.removeButtonAdvancedEObjectFlatComboViewer(viewID);
}
/**
* Select the object in the advanced table composition.
*
* @param eefWidgetIdKey
* widget key
* @param qualifiedIdentifier
* identifier of the PEE
* @param selected
* object to select
*/
public void selectInTableWithId(String eefWidgetIdKey, String qualifiedIdentifier, EObject selected) {
final SWTBotTable table = tableWithId(eefWidgetIdKey, qualifiedIdentifier);
final SWTBotTableItem tableItem = getTableItem(table, selected);
assertNotNull("No table item is found.", tableItem);
tableItem.select();
}
/**
* Select the objects in the (advanced) references table.
*
* @param eefWidgetIdKey
* widget key
* @param qualifiedIdentifier
* identifier of the PEE
* @param selected
* objects to select or null if you want to select all objects in the table
*/
public void selectInTableWithId(String eefWidgetIdKey, String qualifiedIdentifier,
Collection<EObject> selected) {
final SWTBotTable table = tableWithId(eefWidgetIdKey, qualifiedIdentifier);
Collection<String> items = new ArrayList<String>();
if (selected == null || selected.isEmpty()) {
int rowCount = table.rowCount();
for (int i = 0; i < rowCount; i++) {
final SWTBotTableItem tableItem = table.getTableItem(i);
assertNotNull("No table item is found.", tableItem);
items.add(tableItem.getText());
}
} else {
for (EObject eObject : selected) {
final SWTBotTableItem tableItem = getTableItem(table, eObject);
assertNotNull("No table item is found.", tableItem);
items.add(tableItem.getText());
}
}
table.select(items.toArray(new String[0]));
}
/**
* Select the object in the tree.
*
* @param selected
* object to select
*/
public void selectInActiveTree(EObject selected) {
final SWTBotTree tree = tree(0);
final SWTBotTreeItem treeItem = getTreeItem(tree, selected);
assertNotNull("No tree item is found.", treeItem);
treeItem.select();
}
/**
* Select the objects in the tree.
*
* @param selected
* objects to select
*/
public void selectInActiveTree(Collection<EObject> selected) {
// TODO manage this case when EEF will allowed to select multiple
// elements in a tree
final SWTBotTree tree = tree(0);
final SWTBotTreeItem treeItem = getTreeItem(tree, selected.iterator().next());
assertNotNull("No tree item is found.", treeItem);
treeItem.select();
}
/**
* Select the object in the table.
*
* @param selected
* object to select
*/
public void selectInActiveTable(Object selected) {
final SWTBotTable table = table(0);
final SWTBotTableItem tableItem = getTableItem(table, selected);
assertNotNull("No table item is found.", tableItem);
tableItem.select();
}
/**
* Select the objects in the table.
*
* @param selected
* objects to select
*/
public void selectInActiveTable(Collection<EObject> selected) {
final SWTBotTable table = table(0);
int[] indices = new int[selected.size()];
Iterator<EObject> it = selected.iterator();
for (int i = 0; i < selected.size(); i++) {
EObject eObject = it.next();
final SWTBotTableItem tableItem = getTableItem(table, eObject);
assertNotNull("No table item is found.", tableItem);
indices[i] = indexOf(table, tableItem);
}
table.select(indices);
}
/**
* Select the object in the flat references table.
*
* @param selected
* object to select
*/
public void selectInRightTableOfActiveEditor(Object selected) {
final SWTBotTable table = table(1);
final SWTBotTableItem tableItem = getTableItem(table, selected);
assertNotNull("No table item is found.", tableItem);
tableItem.select();
}
/**
* @param table
* @param object
* @return the table item corresponding to the object
*/
private int indexOf(final SWTBotTable table, final SWTBotTableItem tableItem) {
return syncExec(new IntResult() {
public Integer run() {
Table widgetTable = table.widget;
TableItem widgetItem = tableItem.widget;
return widgetTable.indexOf(widgetItem);
}
});
}
/**
* @param table
* @param object
* @return the table item corresponding to the object
*/
private SWTBotTableItem getTableItem(SWTBotTable table, Object object) {
for (int i = 0; i < table.rowCount(); i++) {
final SWTBotTableItem tableItem = table.getTableItem(i);
final Object data = syncExec(new Result<Object>() {
public Object run() {
return tableItem.widget.getData();
}
});
if (data.equals(object)) {
return table.getTableItem(i);
}
}
return null;
}
/**
* @param tree
* @param object
* @return the tree item corresponding to the object
*/
private SWTBotTreeItem getTreeItem(SWTBotTree tree, EObject object) {
SWTBotTreeItem[] rootItems = tree.getAllItems();
for (final SWTBotTreeItem rootSwtBotTreeItem : rootItems) {
SWTBotTreeItem found = getTreeItem(rootSwtBotTreeItem, object);
if (found != null) {
return found;
}
}
return null;
}
private SWTBotTreeItem getTreeItem(SWTBotTreeItem treeItem, EObject object) {
treeItem.select();
treeItem.expand();
SWTBotTreeItem[] items = treeItem.getItems();
for (final SWTBotTreeItem swtBotTreeItem : items) {
final Object data = syncExec(new Result<Object>() {
public Object run() {
return swtBotTreeItem.widget.getData();
}
});
if (data != null && data.equals(object)) {
return swtBotTreeItem;
} else {
SWTBotTreeItem found = getTreeItem(swtBotTreeItem, object);
if (found != null) {
return found;
}
}
}
return null;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#check()
*/
public void check() {
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#getModelingBotInterpreter()
*/
public IModelingBotInterpreter getModelingBotInterpreter() {
return interpreter;
}
/**
* Add the given values to the text field of the MVE and click on Add button.
*
* @param value
* the given String value to add in the MVE.
*/
public void addValuesInMultiValuedEditor(Collection<String> values) {
SWTBotText text = text(0);
for (String val : values) {
text.setText(val);
SWTBotButton buttonAdd = button(0);
buttonAdd.click();
}
}
/**
* Add the given values to the text field of the MVE and click on Add button.
*
* @param value
* the given String value to add in the MVE.
*/
public void removeValuesInMultiValuedEditor(Collection<String> values) {
final SWTBotTable table = table(0);
for (String val : values) {
final SWTBotTableItem tableItem = getTableItem(table, val);
assertNotNull("No table item is found.", tableItem);
tableItem.select();
SWTBotButton buttonRemove = button(1);
buttonRemove.click();
SWTBotHelper.waitAllUiEvents();
}
}
/**
* Remove all values of the MVE by clicking on Remove button each time necessary.
*/
public void removeAllValuesInMultiValuedEditor() {
final SWTBotTable table = table(0);
int rowCount = table.rowCount();
for (int i = 0; i < rowCount; i++) {
SWTBotButton buttonRemove = button(1);
buttonRemove.click();
SWTBotHelper.waitAllUiEvents();
}
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#undo()
*/
public void undo(Action action) {
SWTBotHelper.waitAllUiEvents();
if (editorEditingDomain != null && editorEditingDomain.getCommandStack().getUndoCommand() != null) {
final String cmdName = editorEditingDomain.getCommandStack().getUndoCommand().getLabel();
EditMenuWaiterCondition condition = new EditMenuWaiterCondition(editor, "Undo " + cmdName );
waitUntil(condition);
condition.getResultMenu().click();
} else {
editor.setFocus();
KeyboardFactory.getSWTKeyboard().pressShortcut(SWT.CTRL, 'z');
}
SWTBotHelper.waitAllUiEvents();
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.modelingBot.IModelingBot#redo()
*/
public void redo(Action action) {
SWTBotHelper.waitAllUiEvents();
if (editorEditingDomain != null && editorEditingDomain.getCommandStack().getRedoCommand() != null) {
final String cmdName = editorEditingDomain.getCommandStack().getRedoCommand().getLabel();
EditMenuWaiterCondition condition = new EditMenuWaiterCondition(editor, "Redo " + cmdName );
waitUntil(condition);
condition.getResultMenu().click();
} else {
editor.setFocus();
KeyboardFactory.getSWTKeyboard().pressShortcut(SWT.CTRL, 'y');
}
SWTBotHelper.waitAllUiEvents();
}
public void initWizard(Wizard wizard) {
if (wizard.getReferenceableObject() != null) {
assertNotNull("The editeur is not opened.", editor);
final EObject container = getEObjectFromReferenceableEObject(wizard.getReferenceableObject());
assertNotNull("No container is found to launch add action.", container);
final SWTBotTreeItem selectNode = selectNode(editor, container);
assertNotNull("No element is selected in the editor", selectNode);
SWTBotHelper.doubleClickContextMenu(selectNode, selectNode.getText());
}
}
public void closeWizard(Wizard wizard) {
if (wizard.getReferenceableObject() != null) {
button(UIConstants.FINISH_BUTTON).click();
}
}
public void moveUp(PropertiesEditionElement propertiesEditionElement,
ReferenceableObject referenceableObject) {
assertNotNull(referenceableObject);
EObject eObject = getEObjectFromReferenceableEObject(referenceableObject);
assertNotNull(eObject);
SWTBotHelper.waitAllUiEvents();
String label = ((ElementEditor) propertiesEditionElement.getViews()
.get(0)).getQualifiedIdentifier();
selectInTableWithId(org.eclipse.emf.eef.runtime.ui.UIConstants.EEF_WIDGET_ID_KEY, label, eObject);
button(UIConstants.UP_BUTTON).click();
}
public void moveDown(PropertiesEditionElement propertiesEditionElement,
ReferenceableObject referenceableObject) {
assertNotNull(referenceableObject);
EObject eObject = getEObjectFromReferenceableEObject(referenceableObject);
assertNotNull(eObject);
String label = ((ElementEditor) propertiesEditionElement.getViews()
.get(0)).getQualifiedIdentifier();
selectInTableWithId(org.eclipse.emf.eef.runtime.ui.UIConstants.EEF_WIDGET_ID_KEY, label, eObject);
button(UIConstants.DOWN_BUTTON).click();
}
private static class EditMenuWaiterCondition extends DefaultCondition {
private SWTBotEditor editor;
private String menuName;
private SWTBotMenu resultMenu;
/**
* @param editor
* @param menuName
*/
public EditMenuWaiterCondition(SWTBotEditor editor, String menuName) {
this.editor = editor;
this.menuName = menuName;
}
/**
* @return the resultMenu
*/
public SWTBotMenu getResultMenu() {
return resultMenu;
}
/**
* {@inheritDoc}
* @see org.eclipse.swtbot.swt.finder.waits.ICondition#test()
*/
public boolean test() throws Exception {
editor.bot().sleep(150);
resultMenu = editor.bot().menu("Edit").menu(menuName);
return resultMenu != null;
}
/**
* {@inheritDoc}
* @see org.eclipse.swtbot.swt.finder.waits.ICondition#getFailureMessage()
*/
public String getFailureMessage() {
return "The menu 'Edit > " + menuName + "' never appears.";
}
}
}