blob: db84fdc49e4e547c4759867c8bde058894eee193 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 Chalmers | University of Gothenburg, rt-labs 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:
* Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.capra.handler.jdt;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
import org.eclipse.capra.core.helpers.ExtensionPointHelper;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.launching.StandardVMType;
import org.eclipse.jdt.launching.IVMInstall;
import org.eclipse.jdt.launching.IVMInstallType;
import org.eclipse.jdt.launching.JavaRuntime;
import org.eclipse.jdt.launching.LibraryLocation;
import org.eclipse.jdt.launching.VMStandin;
import org.junit.Before;
public class TestUtil {
private static final String SRC_FOLDER = "src";
public static IProject createTestProject(String name) throws CoreException {
// Create the test project
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IProject project = root.getProject(name);
project.create(null);
project.open(null);
// Add Java nature
IProjectDescription description = project.getDescription();
description.setNatureIds(new String[] { JavaCore.NATURE_ID });
project.setDescription(description, null);
// Create Java project
IJavaProject javaProject = JavaCore.create(project);
// Add output folder
IFolder binFolder = project.getFolder("bin");
javaProject.setOutputLocation(binFolder.getFullPath(), null);
// Manually set Java Runtime Environment to make sure it is not null
// even for Mac OS where the default is not set
@SuppressWarnings("restriction")
final IVMInstallType vmInstallType = JavaRuntime.getVMInstallType(StandardVMType.ID_STANDARD_VM_TYPE);
String id = UUID.randomUUID().toString();
VMStandin newVm = new VMStandin(vmInstallType, id);
newVm.setName("Default-VM");
String javaHome = System.getProperty("java.home");
File installLocation = new File(javaHome);
newVm.setInstallLocation(installLocation);
IVMInstall realVm = newVm.convertToRealVM();
JavaRuntime.setDefaultVMInstall(realVm, new NullProgressMonitor());
List<IClasspathEntry> entries = new ArrayList<IClasspathEntry>();
// add libs to project class path
IVMInstall vmInstall = JavaRuntime.getDefaultVMInstall();
LibraryLocation[] locations = JavaRuntime.getLibraryLocations(vmInstall);
for (LibraryLocation element : locations) {
entries.add(JavaCore.newLibraryEntry(element.getSystemLibraryPath(), null, null));
}
// Set classpath
javaProject.setRawClasspath(entries.toArray(new IClasspathEntry[entries.size()]), null);
// Create source folder
IFolder sourceFolder = project.getFolder(SRC_FOLDER);
sourceFolder.create(false, true, null);
// Add source folder to classpath entries
IPackageFragmentRoot srcRoot = javaProject.getPackageFragmentRoot(sourceFolder);
IClasspathEntry[] oldEntries = javaProject.getRawClasspath();
IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1];
System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
newEntries[oldEntries.length] = JavaCore.newSourceEntry(srcRoot.getPath());
javaProject.setRawClasspath(newEntries, null);
// Create default package
javaProject.getPackageFragmentRoot(sourceFolder).createPackageFragment(name, false, null);
return project;
}
public static void deleteTestProject(IProject project) throws CoreException {
project.delete(true, null);
}
@Before
public static EObject setupModel() {
TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
ResourceSet resourceSet = new ResourceSetImpl();
EObject artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
return artifactModel;
}
public static ICompilationUnit createCompilationUnit(IProject project, String name, String source)
throws JavaModelException {
IFolder sourceFolder = project.getFolder(SRC_FOLDER);
IJavaProject javaProject = JavaCore.create(project);
IPackageFragment pack = javaProject.getPackageFragmentRoot(sourceFolder).getPackageFragment(project.getName());
return pack.createCompilationUnit(name, source, false, null);
}
public static ICompilationUnit createCompilationUnit(IProject project, String name, StringBuffer source)
throws JavaModelException {
return createCompilationUnit(project, name, source.toString());
}
public static EObject createWrapper(EObject artifactModel, String uri, String name) {
ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
return adapter.createArtifact(artifactModel, "org.eclipse.capra.handler.jdt.JavaElementHandler", uri, name,uri);
}
}