package net.sf.eclipsefp.haskell.core.internal.util; import java.io.ByteArrayInputStream; import net.sf.eclipsefp.haskell.core.internal.project.ProjectCreationOperation; import net.sf.eclipsefp.haskell.core.preferences.ICorePreferenceNames; import net.sf.eclipsefp.haskell.core.project.HaskellProjectCreationOperation; import net.sf.eclipsefp.haskell.util.FileUtil; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.preferences.IEclipsePreferences; public class TestHaskellProject implements ICorePreferenceNames { private IProject fUnderlyingProject; private IFolder fSourceFolder; public TestHaskellProject(final String projectName, final IEclipsePreferences corePrefs) throws CoreException { setPreferences(corePrefs); ProjectCreationOperation op = new HaskellProjectCreationOperation(); op.setProjectName(projectName); try { op.run(new NullProgressMonitor()); fUnderlyingProject = ResourcesPlugin.getWorkspace().getRoot(). getProject(projectName); fSourceFolder = fUnderlyingProject.getFolder(FileUtil.DEFAULT_FOLDER_SRC); } catch (Exception e) { throw new CoreException(Status.OK_STATUS); } } private void setPreferences(final IEclipsePreferences corePrefs) { corePrefs.put( SELECTED_COMPILER, "null" ); corePrefs.put( FOLDERS_SRC, FileUtil.DEFAULT_FOLDER_SRC ); // corePrefs.put( FOLDERS_OUT, "out" ); // corePrefs.put( TARGET_BINARY, "bin/theResult" ); corePrefs.putBoolean( FOLDERS_IN_NEW_PROJECT, true ); } public IFile createSourceFile(final String fileName, final String contents) throws CoreException { IFile file = fSourceFolder.getFile(fileName); file.create(new ByteArrayInputStream(contents.getBytes()), true, null); return file; } public void destroy() throws CoreException { fUnderlyingProject.delete(true, null); } public IProject getPlatformProject() { return fUnderlyingProject; } }