/*******************************************************************************
* Copyright (c) 2010 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
*******************************************************************************/
package org.eclipse.linuxtools.changelog.ui.tests.utils;
import static org.junit.Assert.assertNotNull;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
import org.eclipse.linuxtools.changelog.ui.tests.swtbot.PrepareChangelogSWTBotTest;
import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
import org.eclipse.swtbot.swt.finder.waits.Conditions;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
/**
* Subversion project abstraction for SWTBot tests. See
* {@link PrepareChangelogSWTBotTest#setUp()} for a usage example.
*
*/
public class SVNProject {
private SWTWorkbenchBot bot;
private String repoURL;
private String projectName;
private IProject project; // available after checkout
public SVNProject(SWTWorkbenchBot bot) {
this.bot = bot;
}
/**
* @return the repoURL
*/
public String getRepoURL() {
return repoURL;
}
/**
* @param repoURL the repoURL to set
*/
public SVNProject setRepoURL(String repoURL) {
this.repoURL = repoURL;
return this;
}
/**
* @return the projectName
*/
public String getProjectName() {
return projectName;
}
/**
* @param projectName the projectName to set
*/
public SVNProject setProjectName(String projectName) {
this.projectName = projectName;
return this;
}
/**
* @return the project
*/
public IProject getProject() {
return project;
}
/**
* @param project the project to set
*/
public SVNProject setProject(IProject project) {
this.project = project;
return this;
}
/**
* Use File => Import => SVN to create a svn-backed project.
*/
public IProject checkoutProject() throws IllegalStateException {
if (repoURL == null || projectName == null) {
// need to have url and project set
throw new IllegalStateException();
}
bot.menu("File").menu("Import...").click();
SWTBotShell shell = bot.shell("Import");
shell.activate();
bot.tree().expandNode("SVN").select("Checkout Projects from SVN");
bot.button("Next >").click();
// create new repo
shell = bot.shell("Checkout from SVN");
shell.activate();
bot.button("Next >").click();
shell = bot.shell("Checkout from SVN");
shell.activate();
// Enter url
bot.comboBoxWithLabelInGroup("Url:", "Location").setText(repoURL);
bot.button("Next >").click();
// the next few operation can take quite a while, adjust
// timout accordingly.
long oldTimeout = SWTBotPreferences.TIMEOUT;
SWTBotPreferences.TIMEOUT = 3 * 5000;
shell = bot.shell("Progress Information").activate();
bot.waitUntil(Conditions.shellCloses(shell));
shell = bot.shell("Checkout from SVN").activate();
bot.waitUntil(new TreeItemAppearsCondition(repoURL, projectName));
SWTBotTreeItem projectTree = bot.tree().expandNode(repoURL);
projectTree.expandNode(projectName).select();
bot.button("Finish").click();
// Wait for import operation to finish
bot.waitUntil(Conditions.shellCloses(shell));
SWTBotShell svnCheckoutPopup = bot.shell("SVN Checkout").activate();
bot.waitUntil(Conditions.shellCloses(svnCheckoutPopup));
// need a little delay
bot.waitUntil(new SVNProjectCreatedCondition(projectName));
// Set timout back what it was.
SWTBotPreferences.TIMEOUT = oldTimeout;
// A quick sanity check
IWorkspaceRoot wsRoot = ResourcesPlugin.getWorkspace().getRoot();
IProject changelogTestsProject = (IProject)wsRoot.findMember(new Path(projectName));
assertNotNull(changelogTestsProject);
try {
changelogTestsProject.refreshLocal(IResource.DEPTH_INFINITE, null);
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
IResource manifest = changelogTestsProject.findMember(new Path("/META-INF/MANIFEST.MF"));
assertNotNull(manifest);
return changelogTestsProject;
}
/**
* Discard the automatically created SVN repo URL from the list.
*/
public void discardRepositoryLocation() throws Exception {
if (repoURL == null) { // need to have repoURL set
throw new IllegalStateException();
}
new SVNReporsitoriesView(bot).open().discardRepository(repoURL);
}
}