01: package org.cyberneko.html;
02:
03: import java.io.StringReader;
04: import java.util.ArrayList;
05: import java.util.Arrays;
06: import java.util.List;
07:
08: import junit.framework.TestCase;
09:
10: import org.apache.xerces.parsers.AbstractSAXParser;
11: import org.apache.xerces.xni.Augmentations;
12: import org.apache.xerces.xni.QName;
13: import org.apache.xerces.xni.XMLAttributes;
14: import org.apache.xerces.xni.XNIException;
15: import org.apache.xerces.xni.parser.XMLInputSource;
16:
17: /**
18: * Unit tests for {@link HTMLTagBalancingListener}.
19: * @author Marc Guillemot
20: * @version $Id: HTMLTagBalancingListenerTest.java 145 2008-03-17 18:18:33Z mguillem $
21: */
22: public class HTMLTagBalancingListenerTest extends TestCase {
23:
24: public void testIgnoredTags() throws Exception {
25: String string = "<html><head><title>foo</title></head>"
26: + "<body>" + "<body onload='alert(123)'>" + "<div>"
27: + "<form action='foo'>" + " <input name='text1'/>"
28: + "</div>" + "</form>" + "</body></html>";
29:
30: final TestParser parser = new TestParser();
31: final StringReader sr = new StringReader(string);
32: final XMLInputSource in = new XMLInputSource(null, "foo", null,
33: sr, null);
34:
35: parser.parse(in);
36:
37: final String[] expectedMessages = { "start HTML", "start HEAD",
38: "start TITLE", "end TITLE", "end HEAD", "start BODY",
39: "ignored start BODY", "start DIV", "start FORM",
40: "start INPUT", "end INPUT", "end FORM", "end DIV",
41: "ignored end FORM", "end BODY", "end HTML" };
42:
43: assertEquals(Arrays.asList(expectedMessages).toString(),
44: parser.messages.toString());
45: }
46: }
47:
48: class TestParser extends AbstractSAXParser implements
49: HTMLTagBalancingListener {
50: final List messages = new ArrayList();
51:
52: TestParser() throws Exception {
53: super (new HTMLConfiguration());
54: setFeature(
55: "http://cyberneko.org/html/features/balance-tags/ignore-outside-content",
56: true);
57: }
58:
59: public void startElement(QName element, XMLAttributes attributes,
60: Augmentations augs) throws XNIException {
61:
62: messages.add("start " + element.rawname);
63: super .startElement(element, attributes, augs);
64: }
65:
66: public void ignoredEndElement(QName element, Augmentations augs) {
67: messages.add("ignored end " + element.rawname);
68: }
69:
70: public void ignoredStartElement(QName element, XMLAttributes attrs,
71: Augmentations augs) {
72: messages.add("ignored start " + element.rawname);
73: }
74:
75: public void endElement(QName element, Augmentations augs)
76: throws XNIException {
77: messages.add("end " + element.rawname);
78: super.endElement(element, augs);
79: }
80: }
|