TagBalancingHtmlStreamRendererTest.java revision 8403881c365ab36b721ccc4500af1b3a5bd25870
18403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// Copyright (c) 2011, Mike Samuel
28403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// All rights reserved.
38403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel//
48403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// Redistribution and use in source and binary forms, with or without
58403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// modification, are permitted provided that the following conditions
68403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// are met:
78403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel//
88403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// Redistributions of source code must retain the above copyright
98403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// notice, this list of conditions and the following disclaimer.
108403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// Redistributions in binary form must reproduce the above copyright
118403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// notice, this list of conditions and the following disclaimer in the
128403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// documentation and/or other materials provided with the distribution.
138403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// Neither the name of the OWASP nor the names of its contributors may
148403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// be used to endorse or promote products derived from this software
158403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// without specific prior written permission.
168403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
178403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
188403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
198403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
208403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
218403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
228403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
238403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
248403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
258403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
268403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
278403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel// POSSIBILITY OF SUCH DAMAGE.
288403881c365ab36b721ccc4500af1b3a5bd25870mikesamuel
295c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.compackage org.owasp.html;
305c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com
315c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.comimport com.google.common.collect.ImmutableList;
325c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com
335c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.comimport junit.framework.TestCase;
345c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com
355c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.compublic class TagBalancingHtmlStreamRendererTest extends TestCase {
365c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com
375c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com  public final void testTagBalancing() {
385c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com    final StringBuilder htmlOutputBuffer = new StringBuilder();
395c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com    HtmlStreamEventReceiver balancer = new TagBalancingHtmlStreamEventReceiver(
405c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com        HtmlStreamRenderer.create(htmlOutputBuffer, new Handler<String>() {
415c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com          public void handle(String x) {
425c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com            fail("An unexpected error was raised during the testcase");
435c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com          }
445c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com        }));
455c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com
465c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com    balancer.openDocument();
475c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com    balancer.openTag("html", ImmutableList.<String>of());
485c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com    balancer.openTag("head", ImmutableList.<String>of());
495c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com    balancer.openTag("title", ImmutableList.<String>of());
505c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com    balancer.text("Hello, <<World>>!");
515c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com    // TITLE closed with case-insensitive differnet name.
525c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com    balancer.closeTag("TITLE");
535c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com    balancer.closeTag("head");
545c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com    balancer.openTag("body", ImmutableList.<String>of());
555c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com    balancer.openTag("p", ImmutableList.of("id", "p'0"));
565c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com    balancer.text("Hello,");
575c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com    balancer.openTag("Br", ImmutableList.<String>of());
585c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com    balancer.text("<<World>>!");
595c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com    // HTML, P, and BODY unclosed, but BR not.
605c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com    balancer.closeDocument();
615c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com
625c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com    assertEquals(
635c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com        "<html><head><title>Hello, &lt;&lt;World&gt;&gt;!</title></head>"
645c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com        + "<body><p id=\"p&#39;0\">Hello,"
655c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com        + "<br>&lt;&lt;World&gt;&gt;!</p></body></html>",
665c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com        htmlOutputBuffer.toString());
675c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com  }
685c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com}
69