package io.github.xhanin.jarup; import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; import java.io.ByteArrayOutputStream; import java.io.PrintStream; /** * Date: 10/1/14 * Time: 18:19 */ public class SystemOutRule implements TestRule { private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); private final ByteArrayOutputStream errContent = new ByteArrayOutputStream(); private void setUpStreams() { System.setOut(new PrintStream(outContent)); System.setErr(new PrintStream(errContent)); } private void cleanUpStreams() { System.setOut(null); System.setErr(null); } public String out() { return outContent.toString(); } public String err() { return errContent.toString(); } @Override public Statement apply(final Statement statement, Description description) { return new Statement() { @Override public void evaluate() throws Throwable { setUpStreams(); try { statement.evaluate(); } finally { cleanUpStreams(); } } }; } }