[159926] (1.5.3) HTMLAttributeValidator has reversed JSP-aware attribute name and value checks?
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.jsp.ui.tests/META-INF/MANIFEST.MF
index 4b68613..2f89228 100644
--- a/tests/org.eclipse.jst.jsp.ui.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.jst.jsp.ui.tests/META-INF/MANIFEST.MF
@@ -23,6 +23,7 @@
org.eclipse.jst.jsp.ui.tests.search,
org.eclipse.jst.jsp.ui.tests.threaded,
org.eclipse.jst.jsp.ui.tests.util,
+ org.eclipse.jst.jsp.ui.tests.validation,
org.eclipse.jst.jsp.ui.tests.viewer
Require-Bundle: org.eclipse.jface.text,
org.eclipse.ui,
@@ -42,5 +43,7 @@
org.eclipse.ui.views,
org.eclipse.core.runtime,
org.eclipse.wst.xml.ui,
- com.ibm.icu
+ com.ibm.icu,
+ org.eclipse.wst.html.ui,
+ org.eclipse.wst.validation
Eclipse-LazyStart: true
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/JSPUITestSuite.java b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/JSPUITestSuite.java
index 5b41a17..978ece5 100644
--- a/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/JSPUITestSuite.java
+++ b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/JSPUITestSuite.java
@@ -25,6 +25,7 @@
import org.eclipse.jst.jsp.ui.tests.pagedirective.TestPageDirective;
import org.eclipse.jst.jsp.ui.tests.partitioning.TestStructuredPartitionerJSP;
import org.eclipse.jst.jsp.ui.tests.registry.AdapterFactoryRegistryTest;
+import org.eclipse.jst.jsp.ui.tests.validation.JSPHTMLValidatorTest;
import org.eclipse.jst.jsp.ui.tests.viewer.TestViewerConfigurationJSP;
@@ -60,6 +61,7 @@
addTest(new TestSuite(TestModelEmbeddedContentType.class, "TestModelEmbeddedContentType"));
addTest(new TestSuite(TestContentDescription.class, "Content Description Tests"));
+ addTest(new TestSuite(JSPHTMLValidatorTest.class, "JSPHTMLValidatorTest"));
// pa_TODO fix this test
//addTest(new TestSuite(JSPSearchTests.class));
}
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/util/ProjectUtil.java b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/util/ProjectUtil.java
index 4b2b307..338b54a 100644
--- a/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/util/ProjectUtil.java
+++ b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/util/ProjectUtil.java
@@ -7,14 +7,18 @@
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Enumeration;
import java.util.List;
import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.IClasspathEntry;
@@ -61,15 +65,26 @@
}
}
- /**
- *
- * @param entryname path relative to TEST plugin starting w/ a "/"
- * (eg. "/testfiles/bugnumber/struts-logic.tld")
- * @param fullPath path relative to junit test workpace
- * (eg. "/myruntimeproj/struts-logic.tld")
- * @return
- */
- public static IFile copyBundleEntryIntoWorkspace(String entryname, String fullPath) {
+ static void _copyBundleEntriesIntoWorkspace(final String rootEntry, final String fullTargetPath) throws CoreException {
+ Enumeration entries = JSPUITestsPlugin.getDefault().getBundle().getEntryPaths(rootEntry);
+ while (entries != null && entries.hasMoreElements()) {
+ String entryPath = entries.nextElement().toString();
+ String targetPath = new Path(fullTargetPath + "/" + entryPath.substring(rootEntry.length())).toString();
+ if (entryPath.endsWith("/")) {
+ IFolder folder = ResourcesPlugin.getWorkspace().getRoot().getFolder(new Path(targetPath));
+ if (!folder.exists()) {
+ folder.create(true, true, new NullProgressMonitor());
+ }
+ _copyBundleEntriesIntoWorkspace(entryPath, targetPath);
+ }
+ else {
+ _copyBundleEntryIntoWorkspace(entryPath, targetPath);
+ }
+ // System.out.println(entryPath + " -> " + targetPath);
+ }
+ }
+
+ static IFile _copyBundleEntryIntoWorkspace(String entryname, String fullPath) throws CoreException {
IFile file = null;
URL entry = JSPUITestsPlugin.getDefault().getBundle().getEntry(entryname);
if (entry != null) {
@@ -83,7 +98,12 @@
}
file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(fullPath));
if (file != null) {
- file.create(new ByteArrayInputStream(output.toByteArray()), true, new NullProgressMonitor());
+ if (!file.exists()) {
+ file.create(new ByteArrayInputStream(output.toByteArray()), true, new NullProgressMonitor());
+ }
+ else {
+ file.setContents(new ByteArrayInputStream(output.toByteArray()), true, false, new NullProgressMonitor());
+ }
}
}
catch (IOException e) {
@@ -95,6 +115,46 @@
}
return file;
}
+
+ public static void copyBundleEntriesIntoWorkspace(final String rootEntry, final String fullTargetPath) {
+ IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
+ public void run(IProgressMonitor monitor) throws CoreException {
+ _copyBundleEntriesIntoWorkspace(rootEntry, fullTargetPath);
+ ResourcesPlugin.getWorkspace().checkpoint(true);
+ }
+ };
+ try {
+ ResourcesPlugin.getWorkspace().run(runnable, new NullProgressMonitor());
+ }
+ catch (CoreException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ *
+ * @param entryname path relative to TEST plugin starting w/ a "/"
+ * (eg. "/testfiles/bugnumber/struts-logic.tld")
+ * @param fullPath path relative to junit test workpace
+ * (eg. "/myruntimeproj/struts-logic.tld")
+ * @return
+ */
+ public static IFile copyBundleEntryIntoWorkspace(final String entryname, final String fullPath) {
+ final IFile file[] = new IFile[1];
+ IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
+ public void run(IProgressMonitor monitor) throws CoreException {
+ file[0] = _copyBundleEntryIntoWorkspace(entryname, fullPath);
+ ResourcesPlugin.getWorkspace().checkpoint(true);
+ }
+ };
+ try {
+ ResourcesPlugin.getWorkspace().run(runnable, new NullProgressMonitor());
+ }
+ catch (CoreException e) {
+ e.printStackTrace();
+ }
+ return file[0];
+ }
public static IProject createProject(String name, IPath location, String[] natureIds) {
IProjectDescription description = ResourcesPlugin.getWorkspace().newProjectDescription(name);
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/validation/JSPHTMLValidatorTest.java b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/validation/JSPHTMLValidatorTest.java
new file mode 100644
index 0000000..01b331d
--- /dev/null
+++ b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/validation/JSPHTMLValidatorTest.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2006 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.jsp.ui.tests.validation;
+
+import junit.framework.TestCase;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jst.jsp.ui.tests.util.ProjectUtil;
+import org.eclipse.wst.html.internal.validation.HTMLValidator;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
+
+/**
+ * Tests HTML validator on jsp file
+ */
+public class JSPHTMLValidatorTest extends TestCase {
+ String wtp_autotest_noninteractive = null;
+ private static final String PROJECT_NAME = "bug_143209";
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ String noninteractive = System.getProperty("wtp.autotest.noninteractive");
+ if (noninteractive != null)
+ wtp_autotest_noninteractive = noninteractive;
+ System.setProperty("wtp.autotest.noninteractive", "true");
+
+ if (!ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT_NAME).exists()) {
+ ProjectUtil.createProject(PROJECT_NAME, null, new String[]{JavaCore.NATURE_ID});
+ ProjectUtil.copyBundleEntriesIntoWorkspace("/testfiles/" + PROJECT_NAME, "/" + PROJECT_NAME);
+ }
+ assertTrue("project could not be created", ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT_NAME).exists());
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ if (wtp_autotest_noninteractive != null)
+ System.setProperty("wtp.autotest.noninteractive", wtp_autotest_noninteractive);
+ }
+
+ /**
+ * Tests jsp expression in html attributes in jsp file
+ *
+ * @throws Exception
+ */
+ public void testJSPinAttributes() throws Exception {
+ HTMLValidator validator = new HTMLValidator();
+ IReporter reporter = new ReporterForTest();
+ ValidationContextForTest helper = new ValidationContextForTest();
+ String filePath = "/" + PROJECT_NAME + "/WebContent/usejspinattribute.jsp";
+ helper.setURI(filePath);
+ validator.validate(helper, reporter);
+
+ assertTrue("jsp in attributes are errors when they should not be (in .jsp)", reporter.getMessages().isEmpty());
+ }
+
+ /**
+ * Tests jsp expression in html attributes in html file
+ *
+ * @throws Exception
+ */
+ public void testJSPinAttributesHTML() throws Exception {
+ HTMLValidator validator = new HTMLValidator();
+ IReporter reporter = new ReporterForTest();
+ ValidationContextForTest helper = new ValidationContextForTest();
+ String filePath = "/" + PROJECT_NAME + "/WebContent/usejspinattribute.html";
+ helper.setURI(filePath);
+ validator.validate(helper, reporter);
+
+ assertTrue("jsp in attributes are not errors when they should be (in .html)", !reporter.getMessages().isEmpty());
+ }
+
+ /**
+ * Tests bad attribute names in jsp file false
+ *
+ * @throws Exception
+ */
+ public void testBadAttributeName() throws Exception {
+ HTMLValidator validator = new HTMLValidator();
+ IReporter reporter = new ReporterForTest();
+ ValidationContextForTest helper = new ValidationContextForTest();
+ String filePath = "/" + PROJECT_NAME + "/WebContent/badattributenames.jsp";
+ helper.setURI(filePath);
+ validator.validate(helper, reporter);
+
+ assertTrue("bad attribute name is not error when it should be", !reporter.getMessages().isEmpty());
+ }
+}
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/validation/ReporterForTest.java b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/validation/ReporterForTest.java
new file mode 100644
index 0000000..fea98ac
--- /dev/null
+++ b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/validation/ReporterForTest.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2006 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.jsp.ui.tests.validation;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.wst.validation.internal.core.IMessageAccess;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
+import org.eclipse.wst.validation.internal.provisional.core.IValidator;
+
+class ReporterForTest implements IReporter {
+ List list = new ArrayList();
+
+ public ReporterForTest() {
+ super();
+ }
+
+ public void addMessage(IValidator origin, IMessage message) {
+ list.add(message);
+ }
+
+ public void displaySubtask(IValidator validator, IMessage message) {
+ /* do not need to implement */
+ }
+
+ public IMessageAccess getMessageAccess() {
+ return null;
+ }
+
+ public boolean isCancelled() {
+ return false;
+ }
+
+ public void removeAllMessages(IValidator origin, Object object) { // do
+ /* do not need to implement */
+ }
+
+ public void removeAllMessages(IValidator origin) {
+ /* do not need to implement */
+ }
+
+ public void removeMessageSubset(IValidator validator, Object obj, String groupName) {// do
+ /* do not need to implement */
+ }
+
+ public List getMessages() {
+ return list;
+ }
+}
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/validation/ValidationContextForTest.java b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/validation/ValidationContextForTest.java
new file mode 100644
index 0000000..3f613fa
--- /dev/null
+++ b/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/validation/ValidationContextForTest.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2006 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.jsp.ui.tests.validation;
+
+import org.eclipse.wst.validation.internal.provisional.core.IValidationContext;
+
+class ValidationContextForTest implements IValidationContext {
+ private String fURI = null;
+
+ public void setURI(String uri) {
+ fURI = uri;
+ }
+
+ public String[] getURIs() {
+ if (fURI != null)
+ return new String[]{fURI};
+ return new String[0];
+ }
+
+ public Object loadModel(String symbolicName) {
+ return null;
+ }
+
+ public Object loadModel(String symbolicName, Object[] parms) {
+ return null;
+ }
+
+}
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/WEB-INF/classes/.keepme b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/WEB-INF/classes/.keepme
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/WEB-INF/classes/.keepme
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/WEB-INF/lib/.keepme b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/WEB-INF/lib/.keepme
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/WEB-INF/lib/.keepme
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/WEB-INF/web.xml b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/WEB-INF/web.xml
new file mode 100644
index 0000000..2e1d7c0
--- /dev/null
+++ b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/WEB-INF/web.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
+ <display-name>bug_143209</display-name>
+ <welcome-file-list>
+ <welcome-file>index.html</welcome-file>
+ <welcome-file>index.htm</welcome-file>
+ <welcome-file>index.jsp</welcome-file>
+ <welcome-file>default.html</welcome-file>
+ <welcome-file>default.htm</welcome-file>
+ <welcome-file>default.jsp</welcome-file>
+ </welcome-file-list>
+</web-app>
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/badattributenames.jsp b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/badattributenames.jsp
new file mode 100644
index 0000000..c515970
--- /dev/null
+++ b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/badattributenames.jsp
@@ -0,0 +1,9 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Insert title here</title>
+</head>
+<body fakename="">
+</body>
+</html>
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/usejspinattribute.html b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/usejspinattribute.html
new file mode 100644
index 0000000..95bd566
--- /dev/null
+++ b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/usejspinattribute.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Insert title here</title>
+</head>
+<!-- jsp expression in attribute value -->
+<body bgcolor="<%="red" %>">
+<!-- jsp expression in attribute name -->
+<p <%="align" %>="left" />
+<!-- jsp expression as attribute name & value -->
+<a <%="href='http://www.eclipse.org'" %>>Eclipse link</a>
+</body>
+</html>
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/usejspinattribute.jsp b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/usejspinattribute.jsp
new file mode 100644
index 0000000..95bd566
--- /dev/null
+++ b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/WebContent/usejspinattribute.jsp
@@ -0,0 +1,14 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Insert title here</title>
+</head>
+<!-- jsp expression in attribute value -->
+<body bgcolor="<%="red" %>">
+<!-- jsp expression in attribute name -->
+<p <%="align" %>="left" />
+<!-- jsp expression as attribute name & value -->
+<a <%="href='http://www.eclipse.org'" %>>Eclipse link</a>
+</body>
+</html>
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/build/classes/.keepme b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/build/classes/.keepme
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/build/classes/.keepme
diff --git a/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/src/.keepme b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/src/.keepme
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/org.eclipse.jst.jsp.ui.tests/testfiles/bug_143209/src/.keepme