[376643] Source files not included in WEB-INF/classes when exporting a WAR if .component file contains non-existing folders
diff --git a/tests/org.eclipse.jst.j2ee.tests/DefectTestData/TestCaseSourceNotExported.zip b/tests/org.eclipse.jst.j2ee.tests/DefectTestData/TestCaseSourceNotExported.zip new file mode 100644 index 0000000..8835354 --- /dev/null +++ b/tests/org.eclipse.jst.j2ee.tests/DefectTestData/TestCaseSourceNotExported.zip Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/defect-tests/org/eclipse/jst/j2ee/defect/tests/DefectVerificationTests.java b/tests/org.eclipse.jst.j2ee.tests/defect-tests/org/eclipse/jst/j2ee/defect/tests/DefectVerificationTests.java index 0ac5e98..500b539 100644 --- a/tests/org.eclipse.jst.j2ee.tests/defect-tests/org/eclipse/jst/j2ee/defect/tests/DefectVerificationTests.java +++ b/tests/org.eclipse.jst.j2ee.tests/defect-tests/org/eclipse/jst/j2ee/defect/tests/DefectVerificationTests.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2003, 2007 IBM Corporation and others. + * Copyright (c) 2003, 2012 IBM Corporation and others. * 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 @@ -32,6 +32,7 @@ import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.jobs.IJobManager; import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.etools.common.test.apitools.ProjectUnzipUtil; import org.eclipse.jdt.core.IClasspathContainer; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.IJavaProject; @@ -53,6 +54,7 @@ import org.eclipse.jst.j2ee.componentcore.util.EARArtifactEdit; import org.eclipse.jst.j2ee.datamodel.properties.IEARComponentExportDataModelProperties; import org.eclipse.jst.j2ee.datamodel.properties.IEARComponentImportDataModelProperties; +import org.eclipse.jst.j2ee.datamodel.properties.IJ2EEComponentExportDataModelProperties; import org.eclipse.jst.j2ee.dependency.tests.util.ProjectUtil; import org.eclipse.jst.j2ee.ejb.project.operations.IEjbFacetInstallDataModelProperties; import org.eclipse.jst.j2ee.internal.J2EEVersionConstants; @@ -748,6 +750,42 @@ */ /** + * Test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=376643 + */ + public void test376643() throws Exception { + final String[] projectNames = {"EAR", "Web"}; + final String zipLocation = getFullTestDataPath("TestCaseSourceNotExported.zip"); + final Path servletJavaFilePath = new Path("com/test/TestServlet1.java"); + + // Import projects + ProjectUnzipUtil util = new ProjectUnzipUtil(new Path(zipLocation), projectNames); + util.createProjects(); + IVirtualComponent webComponent = ComponentCore.createComponent(J2EEProjectUtilities.getProject("Web")); + + final IVirtualFolder jsrc = webComponent.getRootFolder().getFolder("/WEB-INF/classes"); + + //Export WAR including source + IDataModel dataModel = DataModelFactory.createDataModel(new WebComponentExportDataModelProvider()); + dataModel.setProperty(IJ2EEComponentExportDataModelProperties.PROJECT_NAME, projectNames[1]); + dataModel.setProperty(J2EEComponentExportDataModelProvider.ARCHIVE_DESTINATION, getDataPath("Web.war")); + dataModel.setBooleanProperty(J2EEComponentExportDataModelProvider.EXPORT_SOURCE_FILES, true); + dataModel.setBooleanProperty(J2EEComponentExportDataModelProvider.OVERWRITE_EXISTING, true); + dataModel.setProperty(IJ2EEComponentExportDataModelProperties.RUN_BUILD, true); + IStatus status = dataModel.getDefaultOperation().execute(null, null); + Assert.assertEquals("Exporting WAR failed " + status.getMessage(), IStatus.OK, status.getSeverity()); + + // Verify source was exported in the WAR + IArchive archiveWAR = JavaEEArchiveUtilities.INSTANCE.openArchive(new Path(getDataPath("Web.war"))); + Assert.assertTrue("Archive does not contain file " + servletJavaFilePath, + archiveWAR.containsArchiveResource(jsrc.getRuntimePath().append(servletJavaFilePath).makeRelative())); + + //archiveWAR. + JavaEEArchiveUtilities.INSTANCE.closeArchive(archiveWAR); + + } + + + /** * Test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=311542 */ public void test311542() throws Exception {