[312129] JUnit test for war import problem with class file that is not in WEB-INF/classes and has a 16 character name
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/WARImportTests/Bug311542.war b/tests/org.eclipse.jst.j2ee.tests/TestData/WARImportTests/Bug311542.war new file mode 100644 index 0000000..a3bac0f --- /dev/null +++ b/tests/org.eclipse.jst.j2ee.tests/TestData/WARImportTests/Bug311542.war 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 c60a8bf..2baca4f 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
@@ -11,6 +11,7 @@ package org.eclipse.jst.j2ee.defect.tests; //import java.io.File; +import java.io.File; import java.io.StringBufferInputStream; import java.util.ArrayList; import java.util.Arrays; @@ -92,6 +93,7 @@ import org.eclipse.wst.common.tests.OperationTestCase; import org.eclipse.wst.common.tests.ProjectUtility; import org.eclipse.wtp.j2ee.headless.tests.plugin.HeadlessTestsPlugin; +import org.eclipse.wtp.j2ee.headless.tests.web.operations.WebImportOperationTest; public class DefectVerificationTests extends OperationTestCase { @@ -747,6 +749,21 @@ } */ + /** + * Test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=311542 + */ + public void test311542() throws Exception { + String warPath = null; + String projectName = null; + IDataModel model = null; + + + warPath = getWarFile("Bug311542.war"); + projectName = warPath.substring(warPath.lastIndexOf(File.separator) + 1, warPath.length() - 4); + model = WebImportOperationTest.getWebImportDataModel(warPath, projectName, null, true, null, null); + OperationTestCase.runAndVerify(model); + } + private String getWarFile(String fileName) { return TEST_DATA_PATH + "WarImportTests" + java.io.File.separatorChar + fileName; }
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-verifiers/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/JEEImportDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-verifiers/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/JEEImportDataModelVerifier.java index 477933f..c31b794 100644 --- a/tests/org.eclipse.jst.j2ee.tests/j2ee-verifiers/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/JEEImportDataModelVerifier.java +++ b/tests/org.eclipse.jst.j2ee.tests/j2ee-verifiers/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/JEEImportDataModelVerifier.java
@@ -19,6 +19,7 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.jst.j2ee.datamodel.properties.IJ2EEModuleImportDataModelProperties; +import org.eclipse.jst.j2ee.internal.J2EEVersionConstants; import org.eclipse.jst.j2ee.internal.archive.JavaEEArchiveUtilities; import org.eclipse.jst.j2ee.internal.common.J2EEVersionUtil; import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities; @@ -181,7 +182,9 @@ case IArchiveResource.FILE_TYPE : extension = resourcePath.getFileExtension(); - if(extension.equals(CLASS_EXTENSION)){ + // Note: For war archive, the class must be in WEB-INF/classes, otherwise it's just content + if(extension.equals(CLASS_EXTENSION) && + ((getExportType() == J2EEVersionConstants.WEB_TYPE) ? (resourcePath.segmentCount() > 2 && resourcePath.segment(0).equals("WEB-INF") && resourcePath.segment(1).equals("classes")) : true)){ if(isClassWithoutSource(archive, resource)){ classes.add(resource); }
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-verifiers/org/eclipse/wtp/j2ee/headless/tests/web/verifiers/WebImportDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-verifiers/org/eclipse/wtp/j2ee/headless/tests/web/verifiers/WebImportDataModelVerifier.java index a8695d8..cbbfffd 100644 --- a/tests/org.eclipse.jst.j2ee.tests/j2ee-verifiers/org/eclipse/wtp/j2ee/headless/tests/web/verifiers/WebImportDataModelVerifier.java +++ b/tests/org.eclipse.jst.j2ee.tests/j2ee-verifiers/org/eclipse/wtp/j2ee/headless/tests/web/verifiers/WebImportDataModelVerifier.java
@@ -93,7 +93,7 @@ String jspUri = javaUri.substring(0, javaUri.indexOf(ArchiveUtil.DOT_JAVA)); int lastSlash = jspUri.lastIndexOf('/'); int _index = lastSlash == -1 ? ArchiveConstants.WEBAPP_CLASSES_URI.length() : lastSlash + 1; - if (jspUri.charAt(_index) == '_') { + if (jspUri.length() > _index && jspUri.charAt(_index) == '_') { jspUri = jspUri.substring(ArchiveConstants.WEBAPP_CLASSES_URI.length(), _index) + jspUri.substring(_index + 1) + ArchiveUtil.DOT_JSP; IPath jspPath = new Path(jspUri); if (archive.containsArchiveResource(jspPath)) {