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, <<World>>!</title></head>" 645c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com + "<body><p id=\"p'0\">Hello," 655c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com + "<br><<World>>!</p></body></html>", 665c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com htmlOutputBuffer.toString()); 675c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com } 685c702c12be71d8070da9287cc4a044617dd726a7manico.james@gmail.com} 69