/******************************************************************************* * Copyright (c) 2007, 2011 David Green 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: * David Green - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.wikitext.tests; import java.io.File; import java.net.URI; import java.util.ArrayList; import java.util.List; import java.util.Random; 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.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.mylyn.internal.wikitext.ui.ScreenshotOnTimeoutRule; import org.eclipse.mylyn.wikitext.toolkit.StackDumpOnTimeoutRule; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.rules.TemporaryFolder; @HeadRequired public abstract class AbstractTestInWorkspace { @Rule public final StackDumpOnTimeoutRule stackDumpOnTimeoutRule = new StackDumpOnTimeoutRule(); @Rule public final ScreenshotOnTimeoutRule screenshotRule = new ScreenshotOnTimeoutRule(); @Rule public final TemporaryFolder temporaryFolder = new TemporaryFolder(); private final List<IProject> temporaryProjects = new ArrayList<IProject>(); @Before public void before() { refreshWorkspace(); } /** * Overriding classes should call super.tearDown() */ @After public void tearDown() throws Exception { if (!temporaryProjects.isEmpty()) { NullProgressMonitor monitor = new NullProgressMonitor(); monitor.beginTask("Removing " + temporaryProjects.size() + " temporary projects", 100 * temporaryProjects.size()); try { for (IProject project : temporaryProjects) { project.delete(true, true, SubMonitor.convert(monitor, 100)); } } finally { monitor.done(); temporaryProjects.clear(); } } } public IProject createSimpleProject() { long seed = System.currentTimeMillis(); String projectName = "test" + Long.toHexString(seed) + Long.toHexString(new Random().nextLong()); File folderParent = temporaryFolder.getRoot(); URI location = (new File(folderParent, projectName)).toURI(); IWorkspace workspace = ResourcesPlugin.getWorkspace(); final IProjectDescription description = workspace.newProjectDescription(projectName); description.setLocationURI(location); IProject project = workspace.getRoot().getProject(projectName); try { project.create(description, new NullProgressMonitor()); if (!project.isOpen()) { project.open(new NullProgressMonitor()); } } catch (CoreException e) { throw new RuntimeException(e); } temporaryProjects.add(project); return project; } private void refreshWorkspace() { try { ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); } catch (CoreException e) { throw new IllegalStateException(e); } } }