/*******************************************************************************
* 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
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Neil Guzman - initial API and implementation
* Andrew Ferrazzutti - ongoing maintenance
*******************************************************************************/
package org.eclipse.linuxtools.internal.rpm.createrepo.form.tests;
import static org.eclipse.swtbot.swt.finder.waits.Conditions.waitForWidget;
import static org.eclipse.swtbot.swt.finder.waits.Conditions.widgetIsEnabled;
import static org.junit.Assert.assertEquals;
import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotMultiPageEditor;
import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
import org.eclipse.swtbot.swt.finder.exceptions.WidgetNotFoundException;
import org.eclipse.swtbot.swt.finder.matchers.WidgetMatcherFactory;
import org.eclipse.swtbot.swt.finder.waits.DefaultCondition;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotToolbarButton;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
public class TestUtils {
public static class NodeAvailableAndSelect extends DefaultCondition {
private SWTBotTree tree;
private String parent;
private String node;
/**
* Wait for a tree node (with a known parent) to become visible, and select it
* when it does. Note that this wait condition should only be used after having
* made an attempt to reveal the node.
* @param tree The SWTBotTree that contains the node to select.
* @param parent The text of the parent node that contains the node to select.
* @param node The text of the node to select.
*/
public NodeAvailableAndSelect(SWTBotTree tree, String parent, String node) {
this.tree = tree;
this.node = node;
this.parent = parent;
}
@Override
public boolean test() {
try {
SWTBotTreeItem parentNode = tree.getTreeItem(parent);
parentNode.getNode(node).select();
return true;
} catch (WidgetNotFoundException e) {
return false;
}
}
@Override
public String getFailureMessage() {
return "Timed out waiting for " + node; //$NON-NLS-1$
}
}
/**
* Open the resource perspective, if it's not already opened. Also, go into the project tree.
*/
public static void openResourcePerspective(SWTWorkbenchBot bot) {
try {
// Check if the required views are already opened
bot.viewByTitle(ICreaterepoTestConstants.NAVIGATOR);
} catch (WidgetNotFoundException e) {
// Not yet opened: turn on the resource perspective
bot.menu(ICreaterepoTestConstants.WINDOW).menu(ICreaterepoTestConstants.SHOW_VIEW)
.menu(ICreaterepoTestConstants.OTHER).click();
SWTBotShell shell = bot.shell(ICreaterepoTestConstants.SHOW_VIEW);
shell.activate();
bot.text().setText(ICreaterepoTestConstants.NAVIGATOR);
bot.waitUntil(new NodeAvailableAndSelect(bot.tree(),
ICreaterepoTestConstants.GENERAL_NODE, ICreaterepoTestConstants.NAVIGATOR));
bot.button(ICreaterepoTestConstants.OK_BUTTON).click();
}
}
/**
* Enter the project folder so as to avoid expanding trees later
*/
public static SWTBotView enterProjectFolder(SWTWorkbenchBot bot) {
SWTBotView navigator = bot.viewByTitle(ICreaterepoTestConstants.NAVIGATOR);
navigator.setFocus();
navigator.bot().tree().select(ICreaterepoTestConstants.PROJECT_NAME).
contextMenu(ICreaterepoTestConstants.GO_INTO).click();
bot.waitUntil(waitForWidget(WidgetMatcherFactory.withText(
ICreaterepoTestConstants.PROJECT_NAME), navigator.getWidget()));
return navigator;
}
/**
* Exit from the project tree.
*/
public static void exitProjectFolder(SWTWorkbenchBot bot, SWTBotView navigator) {
SWTBotToolbarButton forwardButton = navigator.toolbarPushButton(ICreaterepoTestConstants.GO_FORWARD);
navigator.toolbarPushButton(ICreaterepoTestConstants.GO_BACK).click();
bot.waitUntil(widgetIsEnabled(forwardButton));
}
/**
* Open the property page, and activate its shell.
*/
public static SWTBotShell openPropertyPage(SWTWorkbenchBot bot, SWTBotView navigator) {
navigator.show();
// select the .repo file from the package explorer and open its properties
SWTBotTree botTree = navigator.bot().tree();
botTree.select(ICreaterepoTestConstants.REPO_NAME)
.contextMenu(ICreaterepoTestConstants.PROPERTIES).click();
// get a handle of the property shell
SWTBotShell propertyShell = bot.shell(String.format(ICreaterepoTestConstants.PROPERTIES_SHELL,
ICreaterepoTestConstants.REPO_NAME));
propertyShell.activate();
return propertyShell;
}
public static SWTBotMultiPageEditor openRepoFile(SWTWorkbenchBot bot, SWTBotView navigator) {
// open the package explorer view
SWTBotTree botTree = navigator.bot().tree();
botTree.select(ICreaterepoTestConstants.REPO_NAME)
.contextMenu(ICreaterepoTestConstants.OPEN).click();
// get a handle on the multipage editor that was opened
SWTBotMultiPageEditor editor = bot.multipageEditorByTitle(ICreaterepoTestConstants.REPO_NAME);
editor.show();
// 3 = repository form page, metadata form page, repo file
assertEquals(3, editor.getPageCount());
return editor;
}
}