HtmlChangeReporterTest.java revision 6f2fc048ffc4ada68fabb389eb3f409229625b90
16f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// Copyright (c) 2011, Mike Samuel
26f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// All rights reserved.
36f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel//
46f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// Redistribution and use in source and binary forms, with or without
56f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// modification, are permitted provided that the following conditions
66f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// are met:
76f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel//
86f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// Redistributions of source code must retain the above copyright
96f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// notice, this list of conditions and the following disclaimer.
106f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// Redistributions in binary form must reproduce the above copyright
116f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// notice, this list of conditions and the following disclaimer in the
126f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// documentation and/or other materials provided with the distribution.
136f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// Neither the name of the OWASP nor the names of its contributors may
146f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// be used to endorse or promote products derived from this software
156f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// without specific prior written permission.
166f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
176f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
186f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
196f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
206f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
216f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
226f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
236f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
246f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
256f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
266f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
276f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel// POSSIBILITY OF SUCH DAMAGE.
286f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel
296f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuelpackage org.owasp.html;
306f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel
316f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuelimport junit.framework.TestCase;
326f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel
336f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuelpublic class HtmlChangeReporterTest extends TestCase {
346f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel
356f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel  public final void testChangeReporting() {
366f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel    final Integer testContext = 123;
376f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel
386f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel    StringBuilder out = new StringBuilder();
396f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel    final StringBuilder log = new StringBuilder();
406f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel    HtmlStreamRenderer renderer = HtmlStreamRenderer.create(
416f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel        out, Handler.DO_NOTHING);
426f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel    HtmlChangeListener<Integer> listener = new HtmlChangeListener<Integer>() {
436f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel      public void discardedTag(Integer context, String elementName) {
446f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel        assertSame(testContext, context);
456f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel        log.append('<').append(elementName).append("> ");
466f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel      }
476f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel
486f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel      public void discardedAttribute(
496f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel          Integer context, String tagName, String attributeName) {
506f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel        assertSame(testContext, context);
516f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel        log.append('<').append(tagName).append(' ').append(attributeName)
526f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel           .append("> ");
536f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel      }
546f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel    };
556f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel    HtmlChangeReporter<Integer> hcr = new HtmlChangeReporter<Integer>(
566f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel        renderer, listener, testContext);
576f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel
586f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel    hcr.setPolicy(Sanitizers.FORMATTING.apply(hcr.getWrappedRenderer()));
596f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel    HtmlSanitizer.sanitize(
606f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel        "<textarea>Hello</textarea>,<b onclick=alert(42)>World</B>!<PLAINTEXT>",
616f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel        hcr);
626f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel    assertEquals("Hello,<b>World</b>!", out.toString());
636f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel    assertEquals("<textarea> <b onclick> <plaintext> ", log.toString());
646f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel  }
656f2fc048ffc4ada68fabb389eb3f409229625b90mikesamuel}
66