📄 formtagtest.java
字号:
// 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/FormTagTest.java,v $// $Author: derrickoswald $// $Date: 2006/06/04 19:17:20 $// $Revision: 1.49 $//// 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.Node;import org.htmlparser.Parser;import org.htmlparser.PrototypicalNodeFactory;import org.htmlparser.Remark;import org.htmlparser.Tag;import org.htmlparser.Text;import org.htmlparser.filters.NodeClassFilter;import org.htmlparser.tags.BodyTag;import org.htmlparser.tags.FormTag;import org.htmlparser.tags.HeadTag;import org.htmlparser.tags.Html;import org.htmlparser.tags.InputTag;import org.htmlparser.tags.LinkTag;import org.htmlparser.tags.OptionTag;import org.htmlparser.tags.ParagraphTag;import org.htmlparser.tags.SelectTag;import org.htmlparser.tags.TableTag;import org.htmlparser.tags.TextareaTag;import org.htmlparser.tests.ParserTestCase;import org.htmlparser.util.NodeIterator;import org.htmlparser.util.NodeList;import org.htmlparser.util.ParserException;public class FormTagTest extends ParserTestCase { static { System.setProperty ("org.htmlparser.tests.tagTests.FormTagTest", "FormTagTest"); } public static final String FORM_HTML = "<FORM METHOD=\""+FormTag.POST+"\" ACTION=\"do_login.php\" NAME=\"login_form\" onSubmit=\"return CheckData()\">\n"+ "<TR><TD ALIGN=\"center\"> </TD></TR>\n"+ "<TR><TD ALIGN=\"center\"><FONT face=\"Arial, verdana\" size=2><b>User Name</b></font></TD></TR>\n"+ "<TR><TD ALIGN=\"center\"><INPUT TYPE=\"text\" NAME=\"name\" SIZE=\"20\"></TD></TR>\n"+ "<TR><TD ALIGN=\"center\"><FONT face=\"Arial, verdana\" size=2><b>Password</b></font></TD></TR>\n"+ "<TR><TD ALIGN=\"center\"><INPUT TYPE=\"password\" NAME=\"passwd\" SIZE=\"20\"></TD></TR>\n"+ "<TR><TD ALIGN=\"center\"> </TD></TR>\n"+ "<TR><TD ALIGN=\"center\"><INPUT TYPE=\"submit\" NAME=\"submit\" VALUE=\"Login\"></TD></TR>\n"+ "<TR><TD ALIGN=\"center\"> </TD></TR>\n"+ "<TEXTAREA name=\"Description\" rows=\"15\" cols=\"55\" wrap=\"virtual\" class=\"composef\" tabindex=\"5\">Contents of TextArea</TEXTAREA>\n"+// "<TEXTAREA name=\"AnotherDescription\" rows=\"15\" cols=\"55\" wrap=\"virtual\" class=\"composef\" tabindex=\"5\">\n"+ "<INPUT TYPE=\"hidden\" NAME=\"password\" SIZE=\"20\">\n"+ "<INPUT TYPE=\"submit\">\n"+ "</FORM>"; public FormTagTest(String name) { super(name); } public void assertTypeNameSize(String description,String type,String name,String size,InputTag inputTag) { assertEquals(description+" type",type,inputTag.getAttribute("TYPE")); assertEquals(description+" name",name,inputTag.getAttribute("NAME")); assertEquals(description+" size",size,inputTag.getAttribute("SIZE")); } public void assertTypeNameValue(String description,String type,String name,String value,InputTag inputTag) { assertEquals(description+" type",type,inputTag.getAttribute("TYPE")); assertEquals(description+" name",name,inputTag.getAttribute("NAME")); assertEquals(description+" value",value,inputTag.getAttribute("VALUE")); } public void testScan() throws ParserException { createParser(FORM_HTML,"http://www.google.com/test/index.html"); parseAndAssertNodeCount(1); assertTrue("Node 0 should be Form Tag",node[0] instanceof FormTag); FormTag formTag = (FormTag)node[0]; assertStringEquals("Method",FormTag.POST,formTag.getFormMethod()); assertStringEquals("Location","http://www.google.com/test/do_login.php",formTag.getFormLocation()); assertStringEquals("Name","login_form",formTag.getFormName()); InputTag nameTag = formTag.getInputTag("name"); InputTag passwdTag = formTag.getInputTag("passwd"); InputTag submitTag = formTag.getInputTag("submit"); InputTag dummyTag = formTag.getInputTag("dummy"); assertNotNull("Input Name Tag should not be null",nameTag); assertNotNull("Input Password Tag should not be null",passwdTag); assertNotNull("Input Submit Tag should not be null",submitTag); assertNull("Input dummy tag should be null",dummyTag); assertTypeNameSize("Input Name Tag","text","name","20",nameTag); assertTypeNameSize("Input Password Tag","password","passwd","20",passwdTag); assertTypeNameValue("Input Submit Tag","submit","submit","Login",submitTag); TextareaTag textAreaTag = formTag.getTextAreaTag("Description"); assertNotNull("Text Area Tag should have been found",textAreaTag); assertEquals("Text Area Tag Contents","Contents of TextArea",textAreaTag.getValue()); assertNull("Should have been null",formTag.getTextAreaTag("junk")); assertStringEquals("toHTML",FORM_HTML,formTag.toHtml()); } public void testScanFormWithNoEnding() throws Exception { createParser( "<TABLE>\n"+ "<FORM METHOD=\"post\" ACTION=\"do_login.php\" NAME=\"login_form\" onSubmit=\"return CheckData()\">\n"+ "<TR><TD ALIGN=\"center\"> </TD></TR>\n"+ "<TR><TD ALIGN=\"center\"><FONT face=\"Arial, verdana\" size=2><b>User Name</b></font></TD></TR>\n"+ "<TR><TD ALIGN=\"center\"><INPUT TYPE=\"text\" NAME=\"name\" SIZE=\"20\"></TD></TR>\n"+ "<TR><TD ALIGN=\"center\"><FONT face=\"Arial, verdana\" size=2><b>Password</b></font></TD></TR>\n"+ "<TR><TD ALIGN=\"center\"><INPUT TYPE=\"password\" NAME=\"passwd\" SIZE=\"20\"></TD></TR>\n"+ "<TR><TD ALIGN=\"center\"> </TD></TR>\n"+ "<TR><TD ALIGN=\"center\"><INPUT TYPE=\"submit\" NAME=\"submit\" VALUE=\"Login\"></TD></TR>\n"+ "<TR><TD ALIGN=\"center\"> </TD></TR>\n"+ "<INPUT TYPE=\"hidden\" NAME=\"password\" SIZE=\"20\">\n"+ "</TABLE>","http://www.google.com/test/index.html"); parser.setNodeFactory ( new PrototypicalNodeFactory ( new Tag[] { new FormTag (), new InputTag (), new TextareaTag (), new SelectTag (), new OptionTag (), })); parseAndAssertNodeCount(4); } /** * Bug reported by Pavan Podila - forms with links are not being parsed * Sample html is from google */ public void testScanFormWithLinks() throws ParserException { createParser( "<form action=\"/search\" name=f><table cellspacing=0 cellpadding=0><tr><td width=75> "+ "</td><td align=center><input type=hidden name=hl value=en><input type=hidden name=ie "+ "value=\"UTF-8\"><input type=hidden name=oe value=\"UTF-8\"><input maxLength=256 size=55"+ " name=q value=\"\"><br><input type=submit value=\"Google Search\" name=btnG><input type="+ "submit value=\"I'm Feeling Lucky\" name=btnI></td><td valign=top nowrap><font size=-2>"+ " • <a href=/advanced_search?hl=en>Advanced Search</a><br> •"+ " <a href=/preferences?hl=en>Preferences</a><br> • <a href=/"+ "language_tools?hl=en>Language Tools</a></font></td></tr></table></form>" ); parser.setNodeFactory ( new PrototypicalNodeFactory ( new Tag[] { new FormTag (), new InputTag (), new TextareaTag (), new SelectTag (), new OptionTag (), new LinkTag (), new TableTag (), })); parseAndAssertNodeCount(1); assertTrue("Should be a HTMLFormTag",node[0] instanceof FormTag); NodeList linkTags = new NodeList (); NodeClassFilter filter = new NodeClassFilter (LinkTag.class); for (NodeIterator e = ((FormTag)node[0]).children (); e.hasMoreNodes ();) e.nextNode ().collectInto (linkTags, filter); assertEquals("Link Tag Count",3,linkTags.size ()); LinkTag[] linkTag = new LinkTag[3]; linkTags.copyToNodeArray (linkTag); assertEquals("First Link Tag Text","Advanced Search",linkTag[0].getLinkText()); assertEquals("Second Link Tag Text","Preferences",linkTag[1].getLinkText()); assertEquals("Third Link Tag Text","Language Tools",linkTag[2].getLinkText()); } /** * Bug 652674 - forms with comments are not being parsed */ public void testScanFormWithComments() throws ParserException { createParser( "<form action=\"/search\" name=f><table cellspacing=0 cellpadding=0><tr><td width=75> "+ "</td><td align=center><input type=hidden name=hl value=en><input type=hidden name=ie "+ "value=\"UTF-8\"><input type=hidden name=oe value=\"UTF-8\"><!-- Hello World -->"+ "<input maxLength=256 size=55"+ " name=q value=\"\"><br><input type=submit value=\"Google Search\" name=btnG><input type="+ "submit value=\"I'm Feeling Lucky\" name=btnI></td><td valign=top nowrap><font size=-2>"+ " • <a href=/advanced_search?hl=en>Advanced Search</a><br> •"+ " <a href=/preferences?hl=en>Preferences</a><br> • <a href=/"+ "language_tools?hl=en>Language Tools</a></font></td></tr></table></form>" ); parser.setNodeFactory ( new PrototypicalNodeFactory ( new Tag[] { new FormTag (), new InputTag (), new TextareaTag (), new SelectTag (), new OptionTag (), new TableTag (), })); parseAndAssertNodeCount(1); assertTrue("Should be a HTMLFormTag",node[0] instanceof FormTag); NodeList remarkNodes = new NodeList (); NodeClassFilter filter = new NodeClassFilter (Remark.class); for (NodeIterator e = ((FormTag)node[0]).children (); e.hasMoreNodes ();) e.nextNode ().collectInto (remarkNodes, filter); assertEquals("Remark Node Count",1,remarkNodes.size ()); assertEquals("First Remark Node"," Hello World ",remarkNodes.elementAt (0).getText ()); } /** * Bug 652674 - forms with comments are not being parsed */ public void testScanFormWithComments2() throws ParserException { createParser( "<FORM id=\"id\" name=\"name\" action=\"http://some.site/aPage.asp?id=97\" method=\"post\">\n"+ " <!--\n"+ " Just a Comment\n"+ " -->\n"+ "</FORM>"); parseAndAssertNodeCount(1); assertTrue("Should be a HTMLFormTag",node[0] instanceof FormTag); FormTag formTag = (FormTag)node[0]; Remark [] remarkNode = new Remark[10]; int i = 0; for (NodeIterator e=formTag.children();e.hasMoreNodes();) { Node formNode = e.nextNode(); if (formNode instanceof Remark) { remarkNode[i++] = (Remark)formNode; } } assertEquals("Remark Node Count",1,i); } /** * Bug 656870 - a form tag with a previously open link causes infinite loop * on encounter */ public void testScanFormWithPreviousOpenLink() throws ParserException { createParser( "<A HREF=\"http://www.oygevalt.org/\">Home</A>\n"+ "<P>\n"+ "And now, the good stuff:\n"+ "<P>\n"+ "<A HREF=\"http://www.yahoo.com\">Yahoo!\n"+ "<FORM ACTION=\".\" METHOD=\"GET\">\n"+ "<INPUT TYPE=\"TEXT\">\n"+ "<BR>\n"+ "<A HREF=\"http://www.helpme.com\">Help</A> " + "<INPUT TYPE=\"checkbox\">\n"+ "<P>\n"+ "<INPUT TYPE=\"SUBMIT\">\n"+ "</FORM>" ); parseAndAssertNodeCount(5); assertTrue("Fourth Node is a paragraph",node[3] instanceof ParagraphTag); ParagraphTag paragraph = (ParagraphTag)node[3]; assertTrue("Second Node of paragraph is a link", paragraph.getChildren ().elementAt (1) instanceof LinkTag); LinkTag linkTag = (LinkTag)paragraph.getChildren ().elementAt (1); assertEquals("Link Text","Yahoo!\n",linkTag.getLinkText()); assertEquals("Link URL","http://www.yahoo.com",linkTag.getLink()); assertType("Fifth Node",FormTag.class,node[4]); } /** * Bug 713907 reported by Dhaval Udani, erroneous * parsing of form tag (even when form scanner is not
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -