package org.eclipselabs.spray.examples.one.tests;
import java.util.Arrays;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
import org.eclipse.swtbot.eclipse.gef.finder.SWTBotGefTestCase;
import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable;
import org.eclipse.swtbot.swt.finder.results.VoidResult;
import org.eclipse.swtbot.swt.finder.waits.Conditions;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.WorkbenchException;
import org.junit.After;
import org.junit.Before;
public abstract class AbstractUITest extends SWTBotGefTestCase {
@Before
public void setUp() throws Exception {
SWTBotView view = bot.activeView();
if (view != null && view.getTitle().equals("Welcome")) {
view.close();
}
}
protected void createNewProject(String projectName) {
bot.viewByTitle("Package Explorer").menu("New").click();
SWTBotShell shell = bot.shell("New");
shell.activate();
SWTBotTreeItem treeItem = bot.tree().expandNode("Spray");
treeItem.select("Spray Project");
// press "Next >"
bot.button(1).click();
// enter project name
bot.text(0).setText(projectName);
bot.button("Finish").click();
bot.waitUntil(Conditions.shellCloses(shell), 20000);
}
protected SWTBotTreeItem selectFolderNode(String... folder) {
SWTBotView packageExplorer = bot.viewByTitle("Package Explorer");
SWTBotTree treeViewer = packageExplorer.bot().tree();
return openNodePathFromTree(treeViewer, folder).select();
}
protected SWTBotTreeItem openNodePathFromTree(SWTBotTree treeViewer, String... path) {
int length = path.length;
SWTBotTreeItem item = null;
if (length > 0) {
SWTBotTreeItem rootItem = getNodeUnderTree(treeViewer, path[0]);
String[] childPath = Arrays.copyOfRange(path, 1, length);
item = openNodePathFromNode(rootItem, childPath);
}
return item;
}
protected SWTBotTreeItem openNodePathFromNode(SWTBotTreeItem startItem, String... path) {
return openNode(startItem, path, 0, path.length);
}
private SWTBotTreeItem openNode(SWTBotTreeItem item, String[] path, int i, int max) {
if (i < max) {
SWTBotTreeItem childItem = expandParentNodeAndGetChildNode(item, path[i]);
item = openNode(childItem, path, i + 1, max);
}
return item;
}
protected SWTBotTreeItem getNodeUnderTree(SWTBotTree tree, String childNodeName) {
return tree.getTreeItem(childNodeName);
}
protected SWTBotTreeItem expandParentNodeAndGetChildNode(SWTBotTreeItem parentNode, String childNodeName) {
expandNode(parentNode);
return parentNode.getNode(childNodeName);
}
protected void expandNode(SWTBotTreeItem item) {
item.expand();
bot.sleep(1000);
}
public void destroy() {
UIThreadRunnable.syncExec(new VoidResult() {
public void run() {
resetWorkbench();
}
});
}
private void resetWorkbench() {
try {
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
IWorkbenchPage page = workbenchWindow.getActivePage();
Shell activeShell = Display.getCurrent().getActiveShell();
if (activeShell != null && activeShell != workbenchWindow.getShell()) {
activeShell.close();
}
page.closeAllEditors(false);
String defaultPerspectiveId = workbench.getPerspectiveRegistry().getDefaultPerspective();
workbench.showPerspective(defaultPerspectiveId, workbenchWindow);
page.resetPerspective();
} catch (WorkbenchException e) {
throw new RuntimeException(e);
}
}
@After
public void tearDown() throws Exception {
// SWTBotTreeItem projectNode = selectFolderNode(getProjectName());
// projectNode.contextMenu("Delete");
// try {
// bot.checkBox().select();
// bot.button("OK").click();
// } catch(WidgetNotFoundException e) {
// e.printStackTrace();
// }
destroy();
}
protected abstract String getProjectName();
}