/* * Copyright 2002-2015 the original author or authors. * * Licensed 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.springframework.test.web.servlet.result; import java.io.OutputStream; import java.io.PrintWriter; import java.io.StringWriter; import java.io.Writer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.ResultHandler; import org.springframework.util.CollectionUtils; /** * Static, factory methods for {@link ResultHandler}-based result actions. * *

Eclipse users: consider adding this class as a Java editor * favorite. To navigate to this setting, open the Preferences and type "favorites". * * @author Rossen Stoyanchev * @author Sam Brannen * @since 3.2 */ public abstract class MockMvcResultHandlers { private static final Log logger = LogFactory.getLog(MockMvcResultHandlers.class.getPackage().getName()); /** * Log {@link MvcResult} details as a {@code DEBUG} log message via * Apache Commons Logging using the log category * {@code org.springframework.test.web.servlet.result}. * @since 4.2 * @see #print() * @see #print(OutputStream) * @see #print(Writer) */ public static ResultHandler log() { return new LoggingResultHandler(); } /** * Print {@link MvcResult} details to the "standard" output stream. * @see System#out * @see #print(OutputStream) * @see #print(Writer) * @see #log() */ public static ResultHandler print() { return print(System.out); } /** * Print {@link MvcResult} details to the supplied {@link OutputStream}. * @since 4.2 * @see #print() * @see #print(Writer) * @see #log() */ public static ResultHandler print(OutputStream stream) { return new PrintWriterPrintingResultHandler(new PrintWriter(stream, true)); } /** * Print {@link MvcResult} details to the supplied {@link Writer}. * @since 4.2 * @see #print() * @see #print(OutputStream) * @see #log() */ public static ResultHandler print(Writer writer) { return new PrintWriterPrintingResultHandler(new PrintWriter(writer, true)); } /** * A {@link PrintingResultHandler} that writes to a {@link PrintWriter}. */ private static class PrintWriterPrintingResultHandler extends PrintingResultHandler { PrintWriterPrintingResultHandler(final PrintWriter writer) { super(new ResultValuePrinter() { @Override public void printHeading(String heading) { writer.println(); writer.println(String.format("%s:", heading)); } @Override public void printValue(String label, Object value) { if (value != null && value.getClass().isArray()) { value = CollectionUtils.arrayToList(value); } writer.println(String.format("%17s = %s", label, value)); } }); } } /** * A {@link ResultHandler} that logs {@link MvcResult} details at * {@code DEBUG} level via Apache Commons Logging. * *

Delegates to a {@link PrintWriterPrintingResultHandler} for * building the log message. * @since 4.2 */ private static class LoggingResultHandler implements ResultHandler { private final StringWriter stringWriter = new StringWriter(); private final ResultHandler printingResultHandler = new PrintWriterPrintingResultHandler( new PrintWriter(stringWriter, true)); @Override public void handle(MvcResult result) throws Exception { this.printingResultHandler.handle(result); logger.debug("MvcResult details:\n" + this.stringWriter); } } }