| /******************************************************************************* |
| * Copyright (c) 2004, 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.core.tests.dom; |
| |
| import junit.framework.TestCase; |
| |
| import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP; |
| import org.eclipse.jst.jsp.core.tests.Logger; |
| import org.eclipse.wst.html.core.internal.provisional.contenttype.ContentTypeIdForHTML; |
| import org.eclipse.wst.sse.core.StructuredModelManager; |
| import org.eclipse.wst.xml.core.internal.document.AttrImpl; |
| import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; |
| import org.w3c.dom.Document; |
| import org.w3c.dom.Element; |
| |
| /** |
| * This test will cause a "region management error" to be thrown in DOM parser |
| * (and its subsequent 'handleRefresh' to be called). This is "normal" in this |
| * error case, of appending an jsp element to an html document. This |
| * error/exception is not normally printed out, but is if 'debug' is turned on. |
| */ |
| |
| public class TestOrphan extends TestCase { |
| |
| private static final String fCategory = "unittests"; |
| |
| public TestOrphan(String name) { |
| |
| super(name); |
| } |
| |
| private Document getJSPDoc() { |
| IDOMModel structuredModel = (IDOMModel) StructuredModelManager.getModelManager().createUnManagedStructuredModelFor(ContentTypeIdForJSP.ContentTypeID_JSP); |
| Document doc = structuredModel.getDocument(); |
| return doc; |
| } |
| |
| private Document getHTMLDoc() { |
| |
| IDOMModel structuredModel = (IDOMModel) StructuredModelManager.getModelManager().createUnManagedStructuredModelFor(ContentTypeIdForHTML.ContentTypeID_HTML); |
| Document doc = structuredModel.getDocument(); |
| return doc; |
| } |
| |
| private Element makeElement(Document document) { |
| |
| Element element = document.createElement("IMG"); |
| element.setAttribute("src", "<bean:message />"); |
| return element; |
| } |
| |
| public void testNonOrphanInHTMLDoc() { |
| |
| Logger.trace(fCategory, "testNonOrphanInHTMLDoc"); |
| Document doc = getHTMLDoc(); |
| Element element = makeElement(doc); |
| AttrImpl attr = (AttrImpl) element.getAttributeNode("src"); |
| String attrValue = attr.getValue(); |
| Logger.trace(fCategory, "attrValue: " + attrValue); |
| doc.appendChild(element); |
| boolean isJspValue = attr.hasNestedValue(); |
| Logger.trace(fCategory, "isJspValue: " + isJspValue); |
| assertFalse(isJspValue); |
| } |
| |
| public void testNonOrphanInJSPDoc() { |
| |
| Logger.trace(fCategory, "testNonOrphanInJSPDoc"); |
| Document doc = getJSPDoc(); |
| Element element = makeElement(doc); |
| AttrImpl attr = (AttrImpl) element.getAttributeNode("src"); |
| String attrValue = attr.getValue(); |
| Logger.trace(fCategory, "attrValue: " + attrValue); |
| doc.appendChild(element); |
| boolean isJspValue = attr.hasNestedValue(); |
| Logger.trace(fCategory, "isJspValue: " + isJspValue); |
| assertTrue(isJspValue); |
| } |
| |
| public void testNonOrphanInBoth() { |
| |
| Logger.trace(fCategory, "testNonOrphanInBoth"); |
| Document jspDoc = getJSPDoc(); |
| Element commonElement = makeElement(jspDoc); |
| AttrImpl attr = (AttrImpl) commonElement.getAttributeNode("src"); |
| String attrValue = attr.getValue(); |
| Logger.trace(fCategory, "attrValue: " + attrValue); |
| jspDoc.appendChild(commonElement); |
| boolean isJspValue = attr.hasNestedValue(); |
| Logger.trace(fCategory, "isJspValue: " + isJspValue); |
| assertTrue(isJspValue); |
| Document htmlDoc = getHTMLDoc(); |
| // this test will cause a "region management error" to be |
| // thrown in parser (and its subsequent 'handleRefresh'). |
| // this is "normal" in this error case, of appending an jsp |
| // element to an html document. This error/exception is not |
| // normally printed out, but is if 'debug' is turned on. |
| htmlDoc.appendChild(commonElement); |
| isJspValue = attr.hasNestedValue(); |
| Logger.trace(fCategory, "isJspValue: " + isJspValue); |
| assertFalse(isJspValue); |
| } |
| |
| public void testNonOrphanInBothReversedOrder() { |
| |
| Logger.trace(fCategory, "testNonOrphanInBothReversedOrder"); |
| Document htmlDoc = getHTMLDoc(); |
| Element commonElement = makeElement(htmlDoc); |
| AttrImpl attr = (AttrImpl) commonElement.getAttributeNode("src"); |
| String attrValue = attr.getValue(); |
| Logger.trace(fCategory, "attrValue: " + attrValue); |
| htmlDoc.appendChild(commonElement); |
| boolean isJspValue = attr.hasNestedValue(); |
| Logger.trace(fCategory, "isJspValue: " + isJspValue); |
| assertFalse(isJspValue); |
| Document jspDoc = getJSPDoc(); |
| // this little test shows its important to |
| // actually create the element with the right kind of |
| // document, not just append. |
| // (and, append is needed too, as can be seen by |
| // commenting out one or the other of the following |
| // two lines. |
| commonElement = makeElement(jspDoc); |
| jspDoc.appendChild(commonElement); |
| // |
| attr = (AttrImpl) commonElement.getAttributeNode("src"); |
| attrValue = attr.getValue(); |
| Logger.trace(fCategory, "attrValue: " + attrValue); |
| isJspValue = attr.hasNestedValue(); |
| Logger.trace(fCategory, "isJspValue: " + isJspValue); |
| assertTrue(isJspValue); |
| } |
| |
| public void doBothTests() { |
| |
| testNonOrphanInHTMLDoc(); |
| testNonOrphanInJSPDoc(); |
| testNonOrphanInBoth(); |
| testNonOrphanInBothReversedOrder(); |
| } |
| } |