blob: 858b630418c8b86a5fdec1b71400d4a25557d91f [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.io.IOException;
import java.util.List;
import junit.framework.TestCase;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
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.IServiceEndpointInterface;
import org.eclipse.jst.ws.jaxws.dom.runtime.api.IWebService;
import org.eclipse.jst.ws.jaxws.dom.runtime.api.IWebServiceProject;
import org.eclipse.jst.ws.jaxws.dom.runtime.api.IWsDomLoadListener;
import org.eclipse.jst.ws.jaxws.dom.runtime.persistence.IProjectSelector;
import org.eclipse.jst.ws.jaxws.dom.runtime.persistence.JaxWsWorkspaceResource;
import org.eclipse.jst.ws.jaxws.testutils.project.TestProject;
/**
* This test might be executed in non-clean workspace. Thus it should try to ignore any existing projects and work with the test proejcts it creates.
* @author Hristo Sabev
*
*/
public class JaxWsWorkspaceResourceTests extends TestCase
{
private TestProject testProject;
private IPackageFragment pf;
private IJavaModel javaModel;
@Override
public void setUp() throws Exception {
super.setUp();
testProject = new TestProject();
testProject.createSourceFolder("src");
pf = testProject.createPackage("com.sap.test.smoke");
javaModel = JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
}
/**
* Verifies that a simple project with one web service class and one sei can be parsed
*
*/
public void test_Smoke_OneWsAndOneSei() throws CoreException, IOException
{
testProject.createType(pf, "Sei1.java", "@javax.jws.WebService public interface Sei1 {}");
testProject.createType(pf, "WebService1.java", "@javax.jws.WebService(endpointInterface=\"com.sap.test.smoke.Sei1\") public class WebService1{}");
final JaxWsWorkspaceResource target = createJaxWsWorkspaceResource(testProject);
target.load(null);
//find the test project and work only with it. ignore any other projects in the workspace
final List<IWebServiceProject> projects = target.getDOM().getWebServiceProjects();
IWebServiceProject testWsProject = null;
for (IWebServiceProject aProject : projects)
{
if (aProject.getName().equals(testProject.getJavaProject().getElementName()))
{
testWsProject = aProject;
break;
}
}
if (testWsProject == null)
{
fail("WebServiceProject wit name " + testProject.getJavaProject().getElementName() + "is not found in the model");
}
final List<IServiceEndpointInterface> seis = testWsProject.getServiceEndpointInterfaces();
assertTrue("More than 1 sei found in the model, while only one test sei was used", seis.size() == 1);
assertEquals("The sei in the model is with different name", "Sei1", seis.get(0).getName());
assertEquals("The sei in the model is with different implementation", "com.sap.test.smoke.Sei1", seis.get(0).getImplementation());
final List<IWebService> webServices = testWsProject.getWebServices();
assertTrue("More than 1 web service found in the model, while only one test web service was used", webServices.size() == 1);
assertEquals("The web service in the model is with different name", "WebService1Service", webServices.get(0).getName());
assertEquals("The web service in the model is with different implementation", "com.sap.test.smoke.WebService1", webServices.get(0).getImplementation());
assertSame("The service endpoint found in the model is not the same instance as the sei of the web service", webServices.get(0).getServiceEndpoint(), seis.get(0));
}
public void test_DomLoadedForNoProcessedProjects() throws IOException
{
final JaxWsWorkspaceResource target = new JaxWsWorkspaceResource(javaModel)
{
@Override
public IProjectSelector[] getProjectSelectors()
{
return new IProjectSelector[] { new IProjectSelector()
{
public boolean approve(IJavaProject prj)
{
return false;
}
}};
}
};
target.load(null);
assertNotNull(target.getDOM());
assertEquals(0, target.getDOM().getWebServiceProjects().size());
}
private JaxWsWorkspaceResource createJaxWsWorkspaceResource(final TestProject testProject)
{
return new JaxWsWorkspaceResource(javaModel)
{
@Override
public IProjectSelector[] getProjectSelectors()
{
return new IProjectSelector[] {new IProjectSelector()
{
public boolean approve(IJavaProject prj) {
return prj.getElementName().equals(testProject.getJavaProject().getElementName());
}
}};
}
};
}
protected class LoadListener implements IWsDomLoadListener
{
boolean startCalled;
boolean finishedCalled;
public void finished() {
finishedCalled = true;
}
public void started() {
startCalled = true;
}
}
}