package com.equalexperts.logging.impl; import java.io.FilterOutputStream; import java.io.OutputStream; import java.io.PrintStream; import java.lang.reflect.Field; import java.util.stream.Stream; public class PrintStreamTestUtils { /** * Uses reflection to return the OutputStream wrapped by a PrintStream */ public static OutputStream getBackingOutputStream(PrintStream stream) throws Exception { Field field = getInternalField(FilterOutputStream.class, "out"); return (OutputStream) field.get(stream); } /** * Uses reflection to determine the autoFlush setting of a PrintStream */ public static boolean getAutoFlush(PrintStream stream) throws Exception { Field field = getInternalField(PrintStream.class, "autoFlush"); return (boolean) field.get(stream); } /** * Obtains a reference to a non-public field and makes it accessible */ private static Field getInternalField(Class<?> cls, String fieldName) { Field field = Stream.of(cls.getDeclaredFields()) .filter(f -> f.getName().equals(fieldName)) .findFirst().get(); field.setAccessible(true); return field; } }