| package org.eclipse.jst.j2ee.classpath.tests; |
| |
| import java.util.HashSet; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Set; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.jdt.core.IClasspathEntry; |
| import org.eclipse.jdt.core.IJavaProject; |
| import org.eclipse.jdt.core.JavaCore; |
| import org.eclipse.jst.j2ee.classpath.tests.util.ClasspathDependencyTestUtil; |
| import org.eclipse.jst.j2ee.classpathdep.UpdateClasspathAttributeUtil; |
| import org.eclipse.jst.j2ee.commonarchivecore.internal.File; |
| import org.eclipse.jst.j2ee.commonarchivecore.internal.WARFile; |
| import org.eclipse.jst.j2ee.dependency.tests.util.DependencyCreationUtil; |
| import org.eclipse.jst.j2ee.dependency.tests.util.ProjectUtil; |
| import org.eclipse.jst.j2ee.internal.deployables.J2EEFlexProjDeployable; |
| import org.eclipse.jst.j2ee.web.componentcore.util.WebArtifactEdit; |
| import org.eclipse.wst.common.componentcore.ComponentCore; |
| import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; |
| import org.eclipse.wst.server.core.internal.ModuleFolder; |
| import org.eclipse.wst.server.core.model.IModuleResource; |
| |
| import junit.framework.Test; |
| import junit.framework.TestSuite; |
| |
| /** |
| * Tests export and publish behavior for classpath component dependencies and web projects. |
| */ |
| public class ClasspathDependencyWebTests extends AbstractTests { |
| |
| private static final String UTIL_PROJECT = "TestUtil"; |
| private static final String WEB_PROJECT = "TestWeb"; |
| |
| private ClasspathDependencyWebTests(final String name) { |
| super(name); |
| } |
| |
| public static Test suite(){ |
| final TestSuite suite = new TestSuite(); |
| suite.setName("Classpath Dependency Web Tests" ); |
| suite.addTest(new ClasspathDependencyWebTests("testWebExport")); |
| suite.addTest(new ClasspathDependencyWebTests("testWebPublish")); |
| return suite; |
| } |
| |
| public void testWebExport() throws Exception { |
| |
| // create the Web and utility projects |
| IVirtualComponent webComp = createProjects(); |
| |
| // verify that the exported WAR WEB-INF/lib does not contain the cp container jars from the Utility |
| final Set archiveNames = new HashSet(); |
| archiveNames.add(ClasspathDependencyTestUtil.TEST1_JAR); |
| archiveNames.add(ClasspathDependencyTestUtil.TEST2_JAR); |
| verifyExportedWebInfLibs(webComp, archiveNames, false); |
| |
| // add the cp dependency attribute to the cp container in the util |
| addDependencyAttribute(); |
| |
| // verify that the exported WAR WEB-INF/lib does contain the cp container jars from the Utility |
| verifyExportedWebInfLibs(webComp, archiveNames, true); |
| } |
| |
| private void verifyExportedWebInfLibs(final IVirtualComponent comp, final Set archiveNames, final boolean shouldHaveArchives) throws Exception { |
| WebArtifactEdit webEdit = null; |
| WARFile warFile = null; |
| try { |
| webEdit = WebArtifactEdit.getWebArtifactEditForRead(comp); |
| if (webEdit != null) { |
| warFile = (WARFile) webEdit.asArchive(true); |
| List libArchives = warFile.getLibArchives(); |
| Iterator it = archiveNames.iterator(); |
| while (it.hasNext()) { |
| String name = (String) it.next(); |
| boolean hasArchive = false; |
| for (int i = 0; i < libArchives.size(); i++) { |
| File archive = (File) libArchives.get(i); |
| if (archive.isArchive()) { |
| if (archive.getName().equals(name)) { |
| hasArchive= true; |
| } |
| } |
| } |
| if (shouldHaveArchives) { |
| assertTrue("Exported WAR missing classpath dependency Jar " + name, hasArchive); |
| } else { |
| assertFalse("Exported WAR has unexpected classpath dependency Jar " + name, hasArchive); |
| } |
| } |
| } |
| } finally { |
| if (webEdit !=null) |
| webEdit.dispose(); |
| if(warFile != null){ |
| warFile.close(); |
| } |
| } |
| } |
| |
| public void testWebPublish() throws Exception { |
| |
| // create the web and utility projects |
| IVirtualComponent webComp = createProjects(); |
| |
| // verify that the exported WAR WEB-INF/lib does not contain the cp container jars from the Utility |
| final Set archiveNames = new HashSet(); |
| archiveNames.add(ClasspathDependencyTestUtil.TEST1_JAR); |
| archiveNames.add(ClasspathDependencyTestUtil.TEST2_JAR); |
| verifyPublishedWebInfLibs(webComp, archiveNames, false); |
| |
| // add the cp dependency attribute to the cp container in the util |
| addDependencyAttribute(); |
| |
| // verify that the exported WAR WEB-INF/lib does contain the cp container jars from the Utility |
| verifyPublishedWebInfLibs(webComp, archiveNames, true); |
| } |
| |
| private void verifyPublishedWebInfLibs(final IVirtualComponent comp, final Set archiveNames, final boolean shouldHaveArchives) throws Exception { |
| // verify that the published WAR's WEB-INF/lib contains the cp container jars from the Utility |
| J2EEFlexProjDeployable deployable = new J2EEFlexProjDeployable(comp.getProject(), comp); |
| try { |
| IModuleResource[] members = deployable.members(); |
| assertTrue(members.length==2); |
| |
| for (int i=0; i<members.length; i++) { |
| String name = members[i].getName(); |
| if (name.equals("WEB-INF")) { |
| IModuleResource[] webInf = ((ModuleFolder)members[i]).members(); |
| for (int j=0; j<webInf.length; j++) { |
| IModuleResource webResource = webInf[j]; |
| assertTrue(webResource.getModuleRelativePath().toString().equals("WEB-INF")); |
| if (webResource.getName().equals("lib")) { |
| IModuleResource[] webresMembers = ((ModuleFolder)webResource).members(); |
| Iterator it = archiveNames.iterator(); |
| while (it.hasNext()) { |
| String archiveName = (String) it.next(); |
| boolean hasArchive = false; |
| for (int k = 0; k < webresMembers.length; k++) { |
| String localName = webresMembers[k].getName(); |
| if (localName.equals(archiveName)) { |
| hasArchive= true; |
| } |
| } |
| if (shouldHaveArchives) { |
| assertTrue("Published WAR missing classpath dependency Jar " + archiveName, hasArchive); |
| } else { |
| assertFalse("Published WAR has unexpected classpath dependency Jar " + archiveName, hasArchive); |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| } catch (CoreException e) { |
| e.printStackTrace(); |
| fail(e.getMessage()); |
| } |
| } |
| |
| private IVirtualComponent createProjects() throws Exception { |
| // create a Utility project |
| final IProject util = ProjectUtil.createUtilityProject(UTIL_PROJECT, null); |
| final IJavaProject utilJava = JavaCore.create(util); |
| final IVirtualComponent utilComp = ComponentCore.createComponent(util); |
| |
| // create a Web project |
| final IProject webProject = ProjectUtil.createWebProject(WEB_PROJECT, null); |
| final IJavaProject webJavaProject = JavaCore.create(webProject); |
| final IVirtualComponent webComp = ComponentCore.createComponent(webProject); |
| |
| // add a dependency from the Web to the Utility |
| DependencyCreationUtil.createWebLibDependency(webProject, util); |
| |
| // add a cp dependency to the Utility |
| ClasspathDependencyTestUtil.addCustomClasspathContainer(utilJava); |
| |
| return webComp; |
| } |
| |
| private void addDependencyAttribute() throws Exception { |
| final IProject util = ProjectUtil.getProject(UTIL_PROJECT); |
| final IJavaProject utilJava = JavaCore.create(util); |
| final IVirtualComponent utilComp = ComponentCore.createComponent(util); |
| |
| final Set entryPaths = new HashSet(); |
| entryPaths.add(ClasspathDependencyTestUtil.CUSTOM_CLASSPATH_CONTAINER); |
| List entries = ClasspathDependencyTestUtil.verifyPotentialClasspathEntries(utilJava, entryPaths); |
| ClasspathDependencyTestUtil.verifyNoClasspathAttributes(utilJava); |
| ClasspathDependencyTestUtil.verifyNoClasspathDependencies(utilComp); |
| IClasspathEntry entry = (IClasspathEntry) entries.get(0); |
| UpdateClasspathAttributeUtil.addDependencyAttribute(null, util.getName(), entry); |
| |
| ClasspathDependencyTestUtil.verifyNoPotentialClasspathEntries(utilJava); |
| ClasspathDependencyTestUtil.verifyClasspathAttributes(utilJava, entryPaths); |
| final Set archiveNames = new HashSet(); |
| archiveNames.add(ClasspathDependencyTestUtil.TEST1_JAR); |
| archiveNames.add(ClasspathDependencyTestUtil.TEST2_JAR); |
| ClasspathDependencyTestUtil.verifyClasspathDependencies(utilComp, archiveNames); |
| } |
| } |