Closes gh-16948
This commit is contained in:
Johnny Lim 2019-05-23 12:24:12 +09:00 committed by Stephane Nicoll
parent 54b123028c
commit d8e5169f5f
3 changed files with 8 additions and 32 deletions

View File

@ -19,11 +19,7 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.PrintStream; import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
import org.hamcrest.Matcher;
import org.junit.Assert;
import org.junit.jupiter.api.extension.AfterEachCallback; import org.junit.jupiter.api.extension.AfterEachCallback;
import org.junit.jupiter.api.extension.BeforeAllCallback; import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.BeforeEachCallback;
@ -34,12 +30,11 @@ import org.junit.jupiter.api.extension.ParameterResolver;
import org.springframework.boot.ansi.AnsiOutput; import org.springframework.boot.ansi.AnsiOutput;
import static org.hamcrest.Matchers.allOf;
/** /**
* JUnit5 {@code @Extension} to capture output from System.out and System.err. * JUnit5 {@code @Extension} to capture output from System.out and System.err.
* *
* @author Madhura Bhave * @author Madhura Bhave
* @since 2.2.0
*/ */
public class OutputCapture implements BeforeEachCallback, AfterEachCallback, public class OutputCapture implements BeforeEachCallback, AfterEachCallback,
BeforeAllCallback, ParameterResolver, CharSequence { BeforeAllCallback, ParameterResolver, CharSequence {
@ -52,20 +47,9 @@ public class OutputCapture implements BeforeEachCallback, AfterEachCallback,
private ByteArrayOutputStream classLevelCopy; private ByteArrayOutputStream classLevelCopy;
private List<Matcher<? super String>> matchers = new ArrayList<>();
@Override @Override
public void afterEach(ExtensionContext context) { public void afterEach(ExtensionContext context) {
try { releaseOutput();
if (!this.matchers.isEmpty()) {
String output = this.toString();
Assert.assertThat(output, allOf(this.matchers));
}
}
finally {
releaseOutput();
}
} }
@Override @Override
@ -168,11 +152,6 @@ public class OutputCapture implements BeforeEachCallback, AfterEachCallback,
this.original.flush(); this.original.flush();
} }
@Override
public void write(byte[] b) throws IOException {
write(b, 0, b.length);
}
@Override @Override
public void write(byte[] b, int off, int len) throws IOException { public void write(byte[] b, int off, int len) throws IOException {
this.copy.write(b, off, len); this.copy.write(b, off, len);

View File

@ -29,21 +29,19 @@ import static org.assertj.core.api.Assertions.assertThat;
*/ */
@ExtendWith(OutputCapture.class) @ExtendWith(OutputCapture.class)
@ExtendWith(OutputCaptureExtendWithTests.BeforeAllExtension.class) @ExtendWith(OutputCaptureExtendWithTests.BeforeAllExtension.class)
public class OutputCaptureExtendWithTests { class OutputCaptureExtendWithTests {
@Test @Test
void captureShouldReturnOutputCapturedBeforeTestMethod(OutputCapture output) { void captureShouldReturnOutputCapturedBeforeTestMethod(OutputCapture output) {
assertThat(output).contains("Before all"); assertThat(output).contains("Before all").doesNotContain("Hello");
assertThat(output).doesNotContain("Hello");
} }
@Test @Test
void captureShouldReturnAllCapturedOutput(OutputCapture output) { void captureShouldReturnAllCapturedOutput(OutputCapture output) {
System.out.println("Hello World"); System.out.println("Hello World");
System.err.println("Error!!!"); System.err.println("Error!!!");
assertThat(output).contains("Before all"); assertThat(output).contains("Before all").contains("Hello World")
assertThat(output).contains("Hello World"); .contains("Error!!!");
assertThat(output).contains("Error!!!");
} }
static class BeforeAllExtension implements BeforeAllCallback { static class BeforeAllExtension implements BeforeAllCallback {

View File

@ -25,7 +25,7 @@ import static org.assertj.core.api.Assertions.assertThat;
* *
* @author Madhura Bhave * @author Madhura Bhave
*/ */
public class OutputCaptureRegisterExtensionTests { class OutputCaptureRegisterExtensionTests {
@RegisterExtension @RegisterExtension
OutputCapture output = new OutputCapture(); OutputCapture output = new OutputCapture();
@ -34,8 +34,7 @@ public class OutputCaptureRegisterExtensionTests {
void captureShouldReturnAllCapturedOutput() { void captureShouldReturnAllCapturedOutput() {
System.out.println("Hello World"); System.out.println("Hello World");
System.err.println("Error!!!"); System.err.println("Error!!!");
assertThat(this.output).contains("Hello World"); assertThat(this.output).contains("Hello World").contains("Error!!!");
assertThat(this.output).contains("Error!!!");
} }
} }