// HTMLParser Library $Name: v1_6 $ - A java-based parser for HTML // http://sourceforge.org/projects/htmlparser // Copyright (C) 2004 Somik Raha // // Revision Control Information // // $Source: /cvsroot/htmlparser/htmlparser/src/org/htmlparser/tests/tagTests/JspTagTest.java,v $ // $Author: derrickoswald $ // $Date: 2004/09/02 02:28:14 $ // $Revision: 1.46 $ // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // package org.htmlparser.tests.tagTests; import org.htmlparser.PrototypicalNodeFactory; import org.htmlparser.Tag; import org.htmlparser.tags.JspTag; import org.htmlparser.tests.ParserTestCase; import org.htmlparser.util.ParserException; public class JspTagTest extends ParserTestCase { static { System.setProperty ("org.htmlparser.tests.tagTests.JspTagTest", "JspTagTest"); } private static final boolean JSP_TESTS_ENABLED = false; public JspTagTest(String name) { super(name); } /** * Check if the JSP Tag is being correctly recognized. * Our test html is : <BR> * <%@ taglib uri="/WEB-INF/struts.tld" prefix="struts" %><BR> * <jsp:useBean id="transfer" scope="session" class="com.bank.PageBean"/><BR> * <%<BR> * org.apache.struts.util.BeanUtils.populate(transfer, request);<BR> * if(request.getParameter("marker") == null)<BR> * // initialize a pseudo-property<BR> * transfer.set("days", java.util.Arrays.asList(<BR> * new String[] {"1", "2", "3", "4", "31"}));<BR> * else <BR> * if(transfer.validate(request))<BR> * %><jsp:forward page="transferConfirm.jsp"/><% * %> * Creation date: (6/17/2001 4:01:06 PM) */ public void testJspTag() throws ParserException { String contents = "jsp:useBean id=\"transfer\" scope=\"session\" class=\"com.bank.PageBean\"/"; String jsp = "<" + contents + ">"; String contents2 = "%\n"+ " org.apache.struts.util.BeanUtils.populate(transfer, request);\n"+ " if(request.getParameter(\"marker\") == null)\n"+ " // initialize a pseudo-property\n"+ " transfer.set(\"days\", java.util.Arrays.asList(\n"+ " new String[] {\"1\", \"2\", \"3\", \"4\", \"31\"}));\n"+ " else \n"+ " if(transfer.validate(request))\n"+ " %"; createParser( "<%@ taglib uri=\"/WEB-INF/struts.tld\" prefix=\"struts\" %>\n"+ jsp + "\n" + "<" + contents2 + ">\n<jsp:forward page=\"transferConfirm.jsp\"/><%\n"+ "%>"); parser.setNodeFactory (new PrototypicalNodeFactory (new JspTag ())); parseAndAssertNodeCount(8); // The first node should be a JspTag assertTrue("Node 1 should be a JspTag",node[0] instanceof JspTag); JspTag tag = (JspTag)node[0]; assertStringEquals("Contents of the tag","%@ taglib uri=\"/WEB-INF/struts.tld\" prefix=\"struts\" %",tag.getText()); // The second node should be a normal tag assertTrue("Node 3 should be a normal Tag",node[2] instanceof Tag); Tag htag = (Tag)node[2]; assertStringEquals("Contents of the tag",contents,htag.getText()); assertStringEquals("html",jsp,htag.toHtml()); // The third node should be an JspTag assertTrue("Node 5 should be an JspTag",node[4] instanceof JspTag); JspTag tag2 = (JspTag)node[4]; assertStringEquals("Contents of the tag",contents2,tag2.getText()); } /** * Check if the JSP Tag is being correctly recognized. * Our test html is : <BR> * <%@ taglib uri="/WEB-INF/struts.tld" prefix="struts" %><BR> * <jsp:useBean id="transfer" scope="session" class="com.bank.PageBean"/><BR> * <%<BR> * org.apache.struts.util.BeanUtils.populate(transfer, request);<BR> * if(request.getParameter("marker") == null)<BR> * // initialize a pseudo-property<BR> * transfer.set("days", java.util.Arrays.asList(<BR> * new String[] {"1", "2", "3", "4", "31"}));<BR> * else <BR> * if(transfer.validate(request))<BR> * %><jsp:forward page="transferConfirm.jsp"/><% * %> * Creation date: (6/17/2001 4:01:06 PM) */ public void testToHtml () throws ParserException { String guts = "\n"+ " org.apache.struts.util.BeanUtils.populate(transfer, request);\n"+ " if(request.getParameter(\"marker\") == null)\n"+ " // initialize a pseudo-property\n"+ " transfer.set(\"days\", java.util.Arrays.asList(\n"+ " new String[] {\"1\", \"2\", \"3\", \"4\", \"31\"}));\n"+ " else \n"+ " if(transfer.validate(request))\n"+ " "; createParser( "<%@ taglib uri=\"/WEB-INF/struts.tld\" prefix=\"struts\" %>\n"+ "<jsp:useBean id=\"transfer\" scope=\"session\" class=\"com.bank.PageBean\"/>\n"+ "<%" + guts + "%><jsp:forward page=\"transferConfirm.jsp\"/><%\n"+ "%>\n"); parser.setNodeFactory (new PrototypicalNodeFactory (new JspTag ())); parseAndAssertNodeCount(8); // The first node should be a JspTag assertTrue("Node 1 should be a JspTag",node[0] instanceof JspTag); JspTag tag = (JspTag)node[0]; assertEquals("Raw String of the first JSP tag","<%@ taglib uri=\"/WEB-INF/struts.tld\" prefix=\"struts\" %>",tag.toHtml()); // The fifth node should be a JspTag assertTrue("Node 5 should be a JspTag",node[4] instanceof JspTag); JspTag tag2 = (JspTag)node[4]; String expected = "<%" + guts + "%>"; assertEquals("Raw String of the second JSP tag",expected,tag2.toHtml()); assertTrue("Node 7 should be a JspTag",node[6] instanceof JspTag); JspTag tag4 = (JspTag)node[6]; expected = "<%\n%>"; assertEquals("Raw String of the fourth JSP tag",expected,tag4.toHtml()); } public void testSpecialCharacters() throws ParserException { StringBuffer sb1 = new StringBuffer(); sb1.append("<% for (i=0;i<j;i++);%>"); createParser(sb1.toString()); parser.setNodeFactory (new PrototypicalNodeFactory (new JspTag ())); parseAndAssertNodeCount(1); //assertTrue("Node should be a jsp tag",node[1] instanceof HTMLJspTag); JspTag jspTag = (JspTag)node[0]; assertEquals("jsp toHTML()","<% for (i=0;i<j;i++);%>",jspTag.toHtml()); } /** * See bug #772700 Jsp Tags are not parsed correctly when in quoted attributes. */ public void testJspTagsInUnQuotedAttribes() throws ParserException { // this test should pass when none of the attibutes are quoted if (JSP_TESTS_ENABLED) testJspTagsInAttributes("<img alt=<%=altText1%> src=<%=imgUrl1%> border=<%=borderToggle%>>"); } /** * See bug #772700 Jsp Tags are not parsed correctly when in quoted attributes. */ public void testJspTagsInQuotedAttribes() throws ParserException { // this test seems to mess up.... testJspTagsInAttributes("<img alt=\"<%=altText1%>\" src=\"<%=imgUrl1%>\" border=\"<%=borderToggle%>\">"); } private void testJspTagsInAttributes(String html) throws ParserException { createParser (html); parser.setNodeFactory (new PrototypicalNodeFactory (new JspTag ())); if (JSP_TESTS_ENABLED) { parseAndAssertNodeCount (7); assertTrue ("Should be a Jsp tag but was " + node[1].getClass().getName(), node[1] instanceof JspTag); assertTrue ("Should be a Jsp tag but was " + node[3].getClass().getName(), node[3] instanceof JspTag); assertTrue ("Should be a Jsp tag but was " + node[5].getClass().getName(), node[5] instanceof JspTag); assertTrue ("Text Should be '<%=altText1%>'but was '" + node[1].toHtml() + "'" , node[1].toHtml().equals("<%=altText1%>")); assertTrue ("Text Should be '<%=imgUrl1%>' but was '" + node[3].toHtml() + "'" , node[3].toHtml().equals("<%=imgUrl1%>")); assertTrue ("Text Should be '<%=borderToggle%>' but was '" + node[5].toHtml() + "'" , node[5].toHtml().equals("<%=borderToggle%>")); } else parseAndAssertNodeCount (1); } }