package net.sf.eclipsefp.haskell.core.project.util;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.Reader;
import java.net.URI;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFileState;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IPathVariableManager;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResourceProxy;
import org.eclipse.core.resources.IResourceProxyVisitor;
import org.eclipse.core.resources.IResourceVisitor;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourceAttributes;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.core.runtime.content.IContentDescription;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
/**
* A mocked IFile.
*
* Verifies if the underlying inputstream is closed.
*
* @author Thiago Arrais - thiago.arrais@gmailcom
*/
public class MockFile implements IFile {
private final List<MockInputStream> fOpenStreams = new Vector<>();
private final String fContents;
private final String fFileName;
private IProject fProject;
public MockFile(final String contents) {
this("Mock.hs", contents);
}
public MockFile(final String filename, final String contents) {
fContents = contents;
fFileName = filename;
}
@Override
public void appendContents(final InputStream source, final boolean force,
final boolean keepHistory, final IProgressMonitor monitor) {
// unused
}
@Override
public void appendContents(final InputStream source, final int updateFlags,
final IProgressMonitor monitor) {
// unused
}
@Override
public void create(final InputStream source, final boolean force,
final IProgressMonitor monitor) {
// unused
}
@Override
public void create(final InputStream source, final int updateFlags,
final IProgressMonitor monitor) {
// unused
}
@Override
public void createLink(final IPath localLocation, final int updateFlags,
final IProgressMonitor monitor) {
// unused
}
@Override
public void delete(final boolean force, final boolean keepHistory,
final IProgressMonitor monitor) {
// unused
}
@Override
public String getCharset() {
return null;
}
@Override
public String getCharset(final boolean checkImplicit) {
return null;
}
@Override
public String getCharsetFor(final Reader reader) {
return null;
}
@Override
public IContentDescription getContentDescription() {
return null;
}
@Override
public InputStream getContents() {
MockInputStream stream = new MockInputStream(
new ByteArrayInputStream(fContents.getBytes()));
fOpenStreams.add(stream);
return stream;
}
@Override
public InputStream getContents(final boolean force) {
return getContents();
}
@Override
public boolean isDerived(final int options) {
return false;
}
@Override
public int getEncoding() {
return 0;
}
@Override
public IPath getFullPath() {
return null;
}
@Override
public boolean isHidden() {
return false;
}
@Override
public boolean isHidden(final int options) {
return false;
}
@Override
public IFileState[] getHistory(final IProgressMonitor monitor) {
return null;
}
@Override
public String getName() {
return fFileName;
}
@Override
public Map<QualifiedName, String> getPersistentProperties() throws CoreException {
return null;
}
@Override
public boolean isReadOnly() {
return false;
}
@Override
public Map<QualifiedName, Object> getSessionProperties() throws CoreException {
return null;
}
@Override
public boolean isTeamPrivateMember(final int options) {
return false;
}
@Override
public void move(final IPath destination, final boolean force, final boolean keepHistory,
final IProgressMonitor monitor) {
// unused
}
@Override
public void setCharset(final String newCharset) {
// unused
}
@Override
public void setCharset(final String newCharset, final IProgressMonitor monitor) {
// unused
}
@Override
public void setContents(final InputStream source, final boolean force,
final boolean keepHistory, final IProgressMonitor monitor) {
// unused
}
@Override
public void setContents(final IFileState source, final boolean force,
final boolean keepHistory, final IProgressMonitor monitor) {
// unused
}
@Override
public void setContents(final InputStream source, final int updateFlags,
final IProgressMonitor monitor) {
// unused
}
@Override
public void setContents(final IFileState source, final int updateFlags,
final IProgressMonitor monitor) {
// unused
}
@Override
public void setHidden(final boolean isHidden) throws CoreException {
// unused
}
@Override
public void accept(final IResourceProxyVisitor visitor, final int memberFlags) {
// unused
}
@Override
public void accept(final IResourceVisitor visitor) {
// unused
}
@Override
public void accept(final IResourceVisitor visitor, final int depth,
final boolean includePhantoms) {
// unused
}
@Override
public void accept(final IResourceVisitor visitor, final int depth, final int memberFlags) {
// unused
}
@Override
public void accept(final IResourceProxyVisitor visitor, final int depth, final int memberFlags) {
// unused
}
@Override
public void clearHistory(final IProgressMonitor monitor) {
// unused
}
@Override
public void copy(final IPath destination, final boolean force, final IProgressMonitor monitor) {
// unused
}
@Override
public void copy(final IPath destination, final int updateFlags,
final IProgressMonitor monitor) {
// unused
}
@Override
public void copy(final IProjectDescription description, final boolean force,
final IProgressMonitor monitor) {
// unused
}
@Override
public void copy(final IProjectDescription description, final int updateFlags,
final IProgressMonitor monitor) {
// unused
}
@Override
public IMarker createMarker(final String type) {
return null;
}
@Override
public void delete(final boolean force, final IProgressMonitor monitor) {
// unused
}
@Override
public void delete(final int updateFlags, final IProgressMonitor monitor) {
// unused
}
@Override
public void deleteMarkers(final String type, final boolean includeSubtypes, final int depth) {
// unused
}
@Override
public boolean exists() {
return false;
}
@Override
public IMarker findMarker(final long id) {
return null;
}
@Override
public IMarker[] findMarkers(final String type, final boolean includeSubtypes, final int depth) {
return null;
}
@Override
public String getFileExtension() {
return null;
}
@Override
public long getLocalTimeStamp() {
return 0;
}
@Override
public IPath getLocation() {
return null;
}
@Override
public IMarker getMarker(final long id) {
return null;
}
@Override
public long getModificationStamp() {
return 0;
}
@Override
public IContainer getParent() {
return null;
}
@Override
public String getPersistentProperty(final QualifiedName key) {
return null;
}
public void setProject(final IProject project) {
fProject = project;
}
@Override
public IProject getProject() {
return fProject;
}
@Override
public IPath getProjectRelativePath() {
return null;
}
@Override
public IPath getRawLocation() {
return null;
}
@Override
public ResourceAttributes getResourceAttributes() {
return null;
}
@Override
public Object getSessionProperty(final QualifiedName key) {
return null;
}
@Override
public int getType() {
return 0;
}
@Override
public IWorkspace getWorkspace() {
return null;
}
@Override
public boolean isAccessible() {
return false;
}
@Override
public boolean isDerived() {
return false;
}
@Override
public boolean isLocal(final int depth) {
return false;
}
@Override
public boolean isLinked() {
return false;
}
@Override
public boolean isPhantom() {
return false;
}
@Override
public boolean isSynchronized(final int depth) {
return false;
}
@Override
public boolean isTeamPrivateMember() {
return false;
}
@Override
public void move(final IPath destination, final boolean force, final IProgressMonitor monitor) {
// unused
}
@Override
public void move(final IPath destination, final int updateFlags,
final IProgressMonitor monitor) {
// unused
}
@Override
public void move(final IProjectDescription description, final boolean force,
final boolean keepHistory, final IProgressMonitor monitor) {
// unused
}
@Override
public void move(final IProjectDescription description, final int updateFlags,
final IProgressMonitor monitor) {
// unused
}
@Override
public void refreshLocal(final int depth, final IProgressMonitor monitor) {
// unused
}
@Override
public void revertModificationStamp(final long value) {
// unused
}
@Override
public void setDerived(final boolean isDerived) {
// unused
}
@Override
public void setLocal(final boolean flag, final int depth, final IProgressMonitor monitor) {
// unused
}
@Override
public long setLocalTimeStamp(final long value) {
return 0;
}
@Override
public void setPersistentProperty(final QualifiedName key, final String value) {
// unused
}
@Override
public void setReadOnly(final boolean readOnly) {
// unused
}
@Override
public void setResourceAttributes(final ResourceAttributes attributes) {
// unused
}
@Override
public void setSessionProperty(final QualifiedName key, final Object value) {
// unused
}
@Override
public void setTeamPrivateMember(final boolean isTeamPrivate) {
// unused
}
@Override
public void touch(final IProgressMonitor monitor) {
// unused
}
@Override
public Object getAdapter(
@SuppressWarnings("rawtypes") final Class adapter) {
return null;
}
@Override
public boolean contains(final ISchedulingRule rule) {
return false;
}
@Override
public boolean isConflicting(final ISchedulingRule rule) {
return false;
}
@Override
public void createLink(final URI location, final int updateFlags, final IProgressMonitor monitor) {
// unused
}
@Override
public URI getLocationURI() {
return null;
}
@Override
public URI getRawLocationURI() {
return null;
}
@Override
public boolean isLinked(final int options) {
return false;
}
public void verify() {
for (MockInputStream stream : fOpenStreams) {
stream.verify();
}
}
@Override
public IResourceProxy createProxy() {
return null;
}
@Override
public int findMaxProblemSeverity(final String type, final boolean includeSubtypes,
final int depth) {
return 0;
}
@Override
public IPathVariableManager getPathVariableManager() {
IPathVariableManager result = null;
IWorkspace workspace = ResourcesPlugin.getWorkspace();
if (workspace != null) {
result = workspace.getPathVariableManager();
}
return result;
}
@Override
public boolean isVirtual() {
// By default, do not assume that MockFile's are virtual resources
return false;
}
@Override
public void setDerived( final boolean isDerived, final IProgressMonitor monitor )
throws CoreException {
// unused.
}
}