blob: adb4d1f0377eeceff2be12d6082c55767931194c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 by SAP AG, Walldorf.
* 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:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.ws.jaxws.dom.runtime.tests.dom.persistence;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaModel;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jst.ws.jaxws.dom.runtime.api.WsDOMLoadCanceledException;
import org.eclipse.jst.ws.jaxws.dom.runtime.persistence.ICompilationUnitFinder;
import org.eclipse.jst.ws.jaxws.dom.runtime.persistence.ICompilationUnitHandler;
import org.eclipse.jst.ws.jaxws.dom.runtime.persistence.IProjectSelector;
import org.eclipse.jst.ws.jaxws.testutils.jmock.Mock;
import org.eclipse.jst.ws.jaxws.testutils.jmock.MockObjectTestCase;
import org.eclipse.jst.ws.jaxws.testutils.project.TestProject;
import org.jmock.core.Constraint;
import org.jmock.core.Invocation;
import org.jmock.core.Stub;
/**
* The tests in this class might be executed in a dirty workspace. Thus this class should assume that other projects are already existing and ignore them
* @author Hristo Sabev
*
*/
public abstract class CompilationUnitFinderContractTest extends MockObjectTestCase
{
// private ICompilationUnitFinder target;
private List<IProjectSelector> projectSelectors;
private IJavaModel javaModel;
private List<String> existingProjectsNames;
protected IJavaModel javaModel() {
return javaModel;
}
protected List<IProjectSelector> projectSelectors() {
return projectSelectors;
}
protected abstract ICompilationUnitFinder createTarget();
@Override
public void setUp() {
javaModel = JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
projectSelectors = new ArrayList<IProjectSelector>();
existingProjectsNames = new ArrayList<String>();
for (IProject prj : (IProject[])javaModel.getWorkspace().getRoot().getProjects())
{
existingProjectsNames.add(prj.getName());
}
}
public void test_find() throws CoreException, WsDOMLoadCanceledException {
final TestProject project1 = new TestProject();
project1.createSourceFolder("sourceFolder");
final IPackageFragment pf1 = project1.createPackage("com.sap.test1");
project1.createType(pf1, "CompilationUnit1.java", "class Ignorred{}");
project1.createType(pf1, "CompilationUnit2.java", "class Ignorred{}");
project1.createType(pf1, "CompilationUnit3.java", "class Ignorred{}");
final TestProject project2 = new TestProject();
project2.createSourceFolder("sourceFolder");
final IPackageFragment pf2 = project2.createPackage("com.sap.test1");
project2.createType(pf2, "CompilationUnit1.java", "class Ignorred{}");
project2.createType(pf2, "CompilationUnit2.java", "class Ignorred{}");
final TestProject project3 = new TestProject();
project3.createSourceFolder("sourceFolder");
final IPackageFragment pf3 = project3.createPackage("com.sap.test3");
project3.createType(pf3, "CompilationUnit1.java", "class Ignorred{}");
project3.createType(pf3, "CompilationUnit2.java", "class Ignorred{}");
final IProjectSelector exludeProject2 = new IProjectSelector() {
public boolean approve(IJavaProject prj)
{
return prj.getElementName().equals(project2.getJavaProject().getElementName()) || existingProjectsNames.contains(prj.getElementName())? false : true;
}
};
final IProjectSelector addmitAll_exceptProject2 = new IProjectSelector() {
public boolean approve(IJavaProject prj)
{
return prj.getElementName().equals(project2.getJavaProject().getElementName()) || existingProjectsNames.contains(prj.getElementName()) ? false : true;
}
};
projectSelectors().add(exludeProject2);
projectSelectors().add(addmitAll_exceptProject2);
final ICompilationUnitFinder target = createTarget();
final Mock<ICompilationUnitHandler> mockCUHandler = mock(ICompilationUnitHandler.class);
final Stub configureExpectations = new Stub()
{
public Object invoke(Invocation arg0) throws Throwable
{
mockCUHandler.expects(once()).method("handle").with(projectNamed(project1.getJavaProject().getElementName())).id("cuCall1");
mockCUHandler.expects(once()).method("handle").with(cuNamed(pf1.getCompilationUnit("CompilationUnit1.java").getPath().toOSString())).after("cuCall1").id("cuCall2");
mockCUHandler.expects(once()).method("handle").with(cuNamed(pf1.getCompilationUnit("CompilationUnit2.java").getPath().toOSString())).after("cuCall1").id("cuCall3");
mockCUHandler.expects(once()).method("handle").with(cuNamed(pf1.getCompilationUnit("CompilationUnit3.java").getPath().toOSString())).after("cuCall1").id("cuCall4");
mockCUHandler.expects(once()).method("handle").with(projectNamed(project3.getJavaProject().getElementName())).id("cuCall5");
mockCUHandler.expects(once()).method("handle").with(cuNamed(pf3.getCompilationUnit("CompilationUnit1.java").getPath().toOSString())).after("cuCall5").id("cuCall6");
mockCUHandler.expects(once()).method("handle").with(cuNamed(pf3.getCompilationUnit("CompilationUnit2.java").getPath().toOSString())).after("cuCall5").id("cuCall7");
mockCUHandler.expects(once()).method("finished").withNoArguments().after("cuCall1").after("cuCall2").after("cuCall3").after("cuCall4").after("cuCall5").after("cuCall6").after("cuCall7");
return null;
}
public StringBuffer describeTo(StringBuffer arg0)
{
return arg0.append("Configure expectations after start is invoked");
}
};
mockCUHandler.expects(once()).method("started").withNoArguments().will(configureExpectations);
target.find(null, mockCUHandler.proxy());
}
private Constraint projectNamed(final String prjName) {
return new Constraint() {
public StringBuffer describeTo(StringBuffer arg0)
{
return arg0.append(prjName);
}
public boolean eval(Object arg0)
{
if (!(arg0 instanceof IJavaProject))
{
return false;
}
final IJavaProject cast = (IJavaProject)arg0;
return prjName.equals(cast.getElementName());
}
};
}
private Constraint cuNamed(final String cuName) {
return new Constraint() {
public StringBuffer describeTo(StringBuffer arg0)
{
return arg0.append(cuName);
}
public boolean eval(Object arg0)
{
if (!(arg0 instanceof ICompilationUnit))
{
return false;
}
final ICompilationUnit cast = (ICompilationUnit)arg0;
return cuName.equals(cast.getPath().toOSString());
}
};
}
}