/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache license, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the license for the specific language governing permissions and * limitations under the license. */ package org.apache.logging.log4j.taglib; import java.io.ByteArrayOutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.Tag; import org.junit.Before; import org.junit.Test; import org.springframework.mock.web.MockJspWriter; import org.springframework.mock.web.MockPageContext; import static org.junit.Assert.*; /** * */ public class DumpTagTest { private static final Charset UTF8 = StandardCharsets.UTF_8; private Writer writer; private ByteArrayOutputStream output; private MockPageContext context; private DumpTag tag; @Before public void setUp() { this.output = new ByteArrayOutputStream(); this.writer = new OutputStreamWriter(this.output, UTF8); this.context = new MockPageContext() { private final MockJspWriter jspWriter = new MockJspWriter(writer); @Override public JspWriter getOut() { return this.jspWriter; } }; this.tag = new DumpTag(); this.tag.setPageContext(this.context); } @Test public void testDoEndTagDefaultPageScopeNoAttributes() throws Exception { final int returnValue = this.tag.doEndTag(); assertEquals("The return value is not correct.", Tag.EVAL_PAGE, returnValue); this.writer.flush(); final String output = new String(this.output.toByteArray(), UTF8); assertEquals("The output is not correct.", "<dl></dl>", output); } @Test public void testDoEndTagDefaultPageScope() throws Exception { this.context.setAttribute("testAttribute01", "testValue01", PageContext.PAGE_SCOPE); this.context.setAttribute("anotherAttribute02", "finalValue02", PageContext.PAGE_SCOPE); this.context.setAttribute("badAttribute03", "skippedValue03", PageContext.SESSION_SCOPE); final int returnValue = this.tag.doEndTag(); assertEquals("The return value is not correct.", Tag.EVAL_PAGE, returnValue); this.writer.flush(); final String output = new String(this.output.toByteArray(), UTF8); assertEquals("The output is not correct.", "<dl>" + "<dt><code>testAttribute01</code></dt><dd><code>testValue01</code></dd>" + "<dt><code>anotherAttribute02</code></dt><dd><code>finalValue02</code></dd>" + "</dl>", output); } @Test public void testDoEndTagSessionScopeNoAttributes() throws Exception { this.context.setAttribute("badAttribute01", "skippedValue01", PageContext.PAGE_SCOPE); this.tag.setScope("session"); final int returnValue = this.tag.doEndTag(); assertEquals("The return value is not correct.", Tag.EVAL_PAGE, returnValue); this.writer.flush(); final String output = new String(this.output.toByteArray(), UTF8); assertEquals("The output is not correct.", "<dl></dl>", output); } @Test public void testDoEndTagSessionScope() throws Exception { this.context.setAttribute("otherAttribute03", "lostValue03", PageContext.PAGE_SCOPE); this.context.setAttribute("coolAttribute01", "weirdValue01", PageContext.SESSION_SCOPE); this.context.setAttribute("testAttribute02", "testValue02", PageContext.SESSION_SCOPE); this.tag.setScope("session"); final int returnValue = this.tag.doEndTag(); assertEquals("The return value is not correct.", Tag.EVAL_PAGE, returnValue); this.writer.flush(); final String output = new String(this.output.toByteArray(), UTF8); assertEquals("The output is not correct.", "<dl>" + "<dt><code>coolAttribute01</code></dt><dd><code>weirdValue01</code></dd>" + "<dt><code>testAttribute02</code></dt><dd><code>testValue02</code></dd>" + "</dl>", output); } }