/* * 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 capturedEntries = new Capture(); Capture capturedOutput = new Capture(); 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() { @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 capturedCompliance = new Capture(); capturedCompliance.setValue("1.4"); final Capture capturedSource = new Capture(); capturedSource.setValue("1.4"); final Capture capturedTarget = new Capture(); capturedTarget.setValue("1.4"); expect(javaProject.getOption(JavaCore.COMPILER_COMPLIANCE, true)).andAnswer( new IAnswer() { @Override public String answer() throws Throwable { return capturedCompliance.getValue(); } }); expect(javaProject.getOption(JavaCore.COMPILER_SOURCE, true)).andAnswer( new IAnswer() { @Override public String answer() throws Throwable { return capturedSource.getValue(); } }); expect(javaProject.getOption(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, true)).andAnswer( new IAnswer() { @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}. *

* Supported methods: *

    *
  • IFile#getName()
  • *
  • IFile#getLocation()
  • *
*/ 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}. *

* Supported methods: *

    *
  • {@link IFolder#getName()}
  • *
  • {@link IFolder#members()}
  • *
*/ 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}. *

* Supported methods: *

    *
  • {@link IProject#build(int kind, IProgressMonitor monitor)}
  • *
  • * {@link IProject#build(int kind, String builderName, Map args, IProgressMonitor monitor)} *
  • *
*/ 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; } }