blob: 914c6fe961ba648a818603c80487573b759dd2ce [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008 Chase Technology Ltd - http://www.chasetechnology.co.uk
* 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:
* Doug Satchwell (Chase Technology Ltd) - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.xsl.ui.tests;
import static org.junit.Assert.*;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Enumeration;
import junit.framework.TestCase;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.junit.After;
import org.junit.Before;
import org.osgi.framework.Bundle;
/*
* Made abstract, so won't be automatically picked up as test (since intended to be subclassed).
*/
public abstract class AbstractXSLUITest {
protected static IProject fTestProject;
protected static boolean fTestProjectInitialized;
protected static final String PROJECT_FILES = "projectfiles";
protected static final String TEST_PROJECT_NAME = "xsltestfiles";
@Before
public void setUp() throws Exception {
getWorkspace().getRoot().delete(true, true, new NullProgressMonitor());
setupTestProjectFiles(XSLUITestsPlugin.PLUGIN_ID);
fTestProject.refreshLocal(IResource.DEPTH_INFINITE, null);
}
protected void setupTestProjectFiles(String bundleId) throws CoreException,
IOException, URISyntaxException {
getAndCreateProject();
Bundle coreBundle = Platform.getBundle(bundleId);
Enumeration<String> e = coreBundle.getEntryPaths("/projectfiles");
while (e.hasMoreElements()) {
String path = e.nextElement();
URL url = coreBundle.getEntry(path);
if (!url.getFile().endsWith("/")) {
String relativePath = path;
url = FileLocator.resolve(url);
path = path.substring("projectfiles".length());
IFile destFile = fTestProject.getFile(path);
if (url.toExternalForm().startsWith("jar:file")) {
InputStream source = FileLocator.openStream(coreBundle,
new Path(relativePath), false);
if (destFile.exists()) {
destFile.delete(true, new NullProgressMonitor());
}
destFile.create(source, true, new NullProgressMonitor());
source.close();
} else {
// if resource is not compressed, link
destFile.createLink(url.toURI(), IResource.REPLACE,
new NullProgressMonitor());
}
}
}
}
protected static void getAndCreateProject() throws CoreException {
IWorkspace workspace = getWorkspace();
IWorkspaceRoot root = workspace.getRoot();
fTestProject = root.getProject(TEST_PROJECT_NAME);
createProject(fTestProject, null, null);
fTestProject.refreshLocal(IResource.DEPTH_INFINITE, null);
assertTrue(fTestProject.exists());
}
private static void createProject(IProject project, IPath locationPath,
IProgressMonitor monitor) throws CoreException {
if (monitor == null) {
monitor = new NullProgressMonitor();
}
monitor.beginTask("creating test project", 10);
// create the project
try {
if (!project.exists()) {
IProjectDescription desc = project.getWorkspace()
.newProjectDescription(project.getName());
if (Platform.getLocation().equals(locationPath)) {
locationPath = null;
}
desc.setLocation(locationPath);
project.create(desc, monitor);
monitor = null;
}
if (!project.isOpen()) {
project.open(monitor);
monitor = null;
}
} finally {
if (monitor != null) {
monitor.done();
}
}
}
@After
public void tearDown() throws Exception {
String projName = TEST_PROJECT_NAME;
IProject project = ResourcesPlugin.getWorkspace().getRoot()
.getProject(projName);
if (project.isAccessible()) {
project.delete(true, true, new NullProgressMonitor());
}
getWorkspace().getRoot().refreshLocal(2, new NullProgressMonitor());
}
/**
* Returns the workspace instance.
*/
public static IWorkspace getWorkspace() {
return ResourcesPlugin.getWorkspace();
}
}