blob: 65e2144bea7e2bd132b9206dd6b96bf40b8abc25 [file] [log] [blame]
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Eclipse Public License, Version 1.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.eclipse.org/org/documents/epl-v10.php
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.ide.eclipse.mock;
import static org.easymock.EasyMock.capture;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.eq;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
import static org.easymock.EasyMock.isA;
import static org.easymock.EasyMock.replay;
import com.android.io.IAbstractFolder;
import com.android.io.IAbstractResource;
import org.easymock.Capture;
import org.easymock.EasyMock;
import org.easymock.IAnswer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import java.util.Map;
public class Mocks {
public static IJavaProject createProject(IClasspathEntry[] entries, IPath outputLocation)
throws Exception {
IJavaProject javaProject = createMock(IJavaProject.class);
final Capture<IClasspathEntry[]> capturedEntries = new Capture<IClasspathEntry[]>();
Capture<IPath> capturedOutput = new Capture<IPath>();
capturedEntries.setValue(entries);
capturedOutput.setValue(outputLocation);
IProject project = createProject();
expect(javaProject.getProject()).andReturn(project).anyTimes();
expect(javaProject.getOutputLocation()).andReturn(capturedOutput.getValue()).anyTimes();
expect(javaProject.getRawClasspath()).andAnswer(new IAnswer<IClasspathEntry[]>() {
@Override
public IClasspathEntry[] answer() throws Throwable {
return capturedEntries.getValue();
}
}).anyTimes();
javaProject.setRawClasspath(capture(capturedEntries), isA(IProgressMonitor.class));
expectLastCall().anyTimes();
javaProject.setRawClasspath(capture(capturedEntries), capture(capturedOutput),
isA(IProgressMonitor.class));
expectLastCall().anyTimes();
final Capture<String> capturedCompliance = new Capture<String>();
capturedCompliance.setValue("1.4");
final Capture<String> capturedSource = new Capture<String>();
capturedSource.setValue("1.4");
final Capture<String> capturedTarget = new Capture<String>();
capturedTarget.setValue("1.4");
expect(javaProject.getOption(JavaCore.COMPILER_COMPLIANCE, true)).andAnswer(
new IAnswer<String>() {
@Override
public String answer() throws Throwable {
return capturedCompliance.getValue();
}
});
expect(javaProject.getOption(JavaCore.COMPILER_SOURCE, true)).andAnswer(
new IAnswer<String>() {
@Override
public String answer() throws Throwable {
return capturedSource.getValue();
}
});
expect(javaProject.getOption(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, true)).andAnswer(
new IAnswer<String>() {
@Override
public String answer() throws Throwable {
return capturedTarget.getValue();
}
});
javaProject.setOption(eq(JavaCore.COMPILER_COMPLIANCE), capture(capturedCompliance));
expectLastCall().anyTimes();
javaProject.setOption(eq(JavaCore.COMPILER_SOURCE), capture(capturedSource));
expectLastCall().anyTimes();
javaProject.setOption(eq(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM),
capture(capturedTarget));
expectLastCall().anyTimes();
replay(javaProject);
return javaProject;
}
/**
* Creates a mock implementation of {@link IFile}.
* <p/>
* Supported methods:
* <ul>
* <li>IFile#getName()</li>
* <li>IFile#getLocation()</li>
* </ul>
*/
public static IFile createFile(String fileName) {
IFile file = createNiceMock(IFile.class);
expect(file.getName()).andReturn(fileName).anyTimes();
expect(file.getLocation()).andReturn(new Path(fileName)).anyTimes();
replay(file);
return file;
}
/**
* Creates a mock implementation of {@link IFolder}.
* <p/>
* Supported methods:
* <ul>
* <li>{@link IFolder#getName()}</li>
* <li>{@link IFolder#members()}</li>
* </ul>
*/
public static IFolder createFolder(String name, IResource[] members) throws Exception {
IFolder file = createNiceMock(IFolder.class);
expect(file.getName()).andReturn(name).anyTimes();
// expect(file.getLocation()).andReturn(new Path(name)).anyTimes();
expect(file.members()).andReturn(members).anyTimes();
replay(file);
return file;
}
public static IAbstractFolder createAbstractFolder(String name, IAbstractResource[] members) {
IAbstractFolder folder = createNiceMock(IAbstractFolder.class);
expect(folder.getName()).andReturn(name).anyTimes();
// expect(file.getLocation()).andReturn(new Path(name)).anyTimes();
expect(folder.listMembers()).andReturn(members).anyTimes();
replay(folder);
return folder;
}
/**
* Mock implementation of {@link IProject}.
* <p/>
* Supported methods:
* <ul>
* <li>{@link IProject#build(int kind, IProgressMonitor monitor)}</li>
* <li>
* {@link IProject#build(int kind, String builderName, Map args, IProgressMonitor monitor)}
* </li>
* </ul>
*/
public static IProject createProject() {
IProject project = EasyMock.createNiceMock(IProject.class);
replay(project);
return project;
}
/**
* Creates a mock implementation of an {@link IClasspathEntry}, which supports
* {@link IClasspathEntry#getEntryKind} and {@link IClasspathEntry#getPath}.
*/
public static IClasspathEntry createClasspathEntry(IPath path, int kind) {
IClasspathEntry entry = createNiceMock(IClasspathEntry.class);
expect(entry.getEntryKind()).andReturn(kind).anyTimes();
expect(entry.getPath()).andReturn(path).anyTimes();
replay(entry);
return entry;
}
}