[323744] Classpath dependency enablement should directly control dynamic manifest updating
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/classpath/tests/ClasspathDependencyEARTests.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/classpath/tests/ClasspathDependencyEARTests.java index 277673d..2a6adc9 100644 --- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/classpath/tests/ClasspathDependencyEARTests.java +++ b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/classpath/tests/ClasspathDependencyEARTests.java
@@ -16,6 +16,9 @@ import java.util.List; import java.util.Set; +import junit.framework.Test; +import junit.framework.TestSuite; + import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; @@ -37,6 +40,7 @@ import org.eclipse.jst.j2ee.dependency.tests.util.DependencyCreationUtil; import org.eclipse.jst.j2ee.dependency.tests.util.ProjectUtil; import org.eclipse.jst.j2ee.internal.J2EEVersionConstants; +import org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyEnablement; import org.eclipse.jst.j2ee.internal.deployables.J2EEFlexProjDeployable; import org.eclipse.wst.common.componentcore.ComponentCore; import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; @@ -46,9 +50,6 @@ import org.eclipse.wst.server.core.model.IModuleResource; import org.eclipse.wst.server.core.util.ProjectModule; -import junit.framework.Test; -import junit.framework.TestSuite; - /** * Tests export and publish behavior for classpath component dependencies on the module projects associated with an EAR. */ @@ -97,7 +98,7 @@ // add the attribute to the cp container and "bin" class folder in the utility project and to the "bin" class // folder in the web project - addDependencyAttribute(); + addDependencyAttribute(true); // verify that the exported EAR does contain the cp container Jars from the utility, // that the utility MANIFEST classpath includes entries for the cp container @@ -201,24 +202,31 @@ // verify that the published EAR does not contain the cp container Jars from the utility, // that the utility MANIFEST classpath does not include entries for the cp container jars and // that the contents of the util and web "bin" class folders are not included in the exported archives. - verifyPublishedEAR(earComp, archiveNames, false); + verifyPublishedEAR(earComp, archiveNames, false, JEE5); // add the attribute to the cp container in the utility project - addDependencyAttribute(); + addDependencyAttribute(false); // verify that the published EAR does contain the cp container Jars from the utility, // that the utility MANIFEST classpath includes entries for the cp container // jars, that the utility includes the contents of the "bin" class folder and that the web's WEB-INF/classes // includes the contents of the web's "bin" class folder. - verifyPublishedEAR(earComp, archiveNames, true); + verifyPublishedEAR(earComp, archiveNames, true, JEE5); } - private void verifyPublishedEAR(final IVirtualComponent comp, final Set archiveNames, final boolean shouldHaveDependencies) throws Exception { + private void verifyPublishedEAR(final IVirtualComponent comp, final Set archiveNames, final boolean shouldHaveDependencies, boolean isEE5) throws Exception { // verify that the published EAR contains the cp container jars from the Utility J2EEFlexProjDeployable deployable = new J2EEFlexProjDeployable(comp.getProject(), comp); try { - IModuleResource[] members = deployable.members(); + IModuleResource[] rootmembers = deployable.members(); + IModuleResource[] members; + if (isEE5 && rootmembers.length > 0 && rootmembers[0].getName().equals("lib")) { + members = ((IModuleFolder) rootmembers[0]).members(); + } + else { + members = rootmembers; + } Iterator it = archiveNames.iterator(); while (it.hasNext()) { String name = (String) it.next(); @@ -307,7 +315,7 @@ isOnCP = true; } } - if (shouldHaveDependencies) { + if (shouldHaveDependencies && ClasspathDependencyEnablement.isAllowClasspathComponentDependency()) { assertTrue("Utility project MANIFEST.MF classpath in published EAR missing entry for dependency Jar " + name, isOnCP); } else { assertFalse("Utility project MANIFEST.MF classpath in published EAR has unexpected entry for dependency Jar " + name, isOnCP); @@ -387,11 +395,17 @@ return webComp; } - - /* - * Add the classpath entry dependency attribute + + + /** + * + * @param verifyClasspathDependencies - true if you want to immediately verify that + * the classpath dependencies were added. Set to false if you want to verify this at + * a later time. Such as thru a members call in export or publish. + * Note: When set to true may fail a valid scenario due to JDT initialization issues. + * @throws Exception */ - private void addDependencyAttribute() throws Exception { + private void addDependencyAttribute(boolean verifyClasspathDependencies) throws Exception { final IProject util = ProjectUtil.getProject(UTIL_PROJECT); final IPath fullUtilBinPath = util.getFullPath().append("bin"); final IJavaProject utilJava = JavaCore.create(util); @@ -425,7 +439,8 @@ archiveNames.add(ClasspathDependencyTestUtil.TEST1_JAR); archiveNames.add(ClasspathDependencyTestUtil.TEST2_JAR); archiveNames.add(fullUtilBinPath.toString()); - ClasspathDependencyTestUtil.verifyClasspathDependencies(utilComp, archiveNames); + if (verifyClasspathDependencies) + ClasspathDependencyTestUtil.verifyClasspathDependencies(utilComp, archiveNames); entryPaths.clear(); entryPaths.add(fullWebBinPath); @@ -446,6 +461,7 @@ // verify that "bin" is a dependency archiveNames.clear(); archiveNames.add(fullWebBinPath.toString()); - ClasspathDependencyTestUtil.verifyClasspathDependencies(webComp, archiveNames); + if (verifyClasspathDependencies) + ClasspathDependencyTestUtil.verifyClasspathDependencies(webComp, archiveNames); } }