parent
							
								
									54b123028c
								
							
						
					
					
						commit
						d8e5169f5f
					
				| 
						 | 
				
			
			@ -19,11 +19,7 @@ import java.io.ByteArrayOutputStream;
 | 
			
		|||
import java.io.IOException;
 | 
			
		||||
import java.io.OutputStream;
 | 
			
		||||
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.BeforeAllCallback;
 | 
			
		||||
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 static org.hamcrest.Matchers.allOf;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * JUnit5 {@code @Extension} to capture output from System.out and System.err.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Madhura Bhave
 | 
			
		||||
 * @since 2.2.0
 | 
			
		||||
 */
 | 
			
		||||
public class OutputCapture implements BeforeEachCallback, AfterEachCallback,
 | 
			
		||||
		BeforeAllCallback, ParameterResolver, CharSequence {
 | 
			
		||||
| 
						 | 
				
			
			@ -52,22 +47,11 @@ public class OutputCapture implements BeforeEachCallback, AfterEachCallback,
 | 
			
		|||
 | 
			
		||||
	private ByteArrayOutputStream classLevelCopy;
 | 
			
		||||
 | 
			
		||||
	private List<Matcher<? super String>> matchers = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void afterEach(ExtensionContext context) {
 | 
			
		||||
		try {
 | 
			
		||||
			if (!this.matchers.isEmpty()) {
 | 
			
		||||
				String output = this.toString();
 | 
			
		||||
				Assert.assertThat(output, allOf(this.matchers));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		finally {
 | 
			
		||||
		releaseOutput();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void beforeEach(ExtensionContext context) {
 | 
			
		||||
		releaseOutput();
 | 
			
		||||
| 
						 | 
				
			
			@ -168,11 +152,6 @@ public class OutputCapture implements BeforeEachCallback, AfterEachCallback,
 | 
			
		|||
			this.original.flush();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		@Override
 | 
			
		||||
		public void write(byte[] b) throws IOException {
 | 
			
		||||
			write(b, 0, b.length);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		@Override
 | 
			
		||||
		public void write(byte[] b, int off, int len) throws IOException {
 | 
			
		||||
			this.copy.write(b, off, len);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,21 +29,19 @@ import static org.assertj.core.api.Assertions.assertThat;
 | 
			
		|||
 */
 | 
			
		||||
@ExtendWith(OutputCapture.class)
 | 
			
		||||
@ExtendWith(OutputCaptureExtendWithTests.BeforeAllExtension.class)
 | 
			
		||||
public class OutputCaptureExtendWithTests {
 | 
			
		||||
class OutputCaptureExtendWithTests {
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	void captureShouldReturnOutputCapturedBeforeTestMethod(OutputCapture output) {
 | 
			
		||||
		assertThat(output).contains("Before all");
 | 
			
		||||
		assertThat(output).doesNotContain("Hello");
 | 
			
		||||
		assertThat(output).contains("Before all").doesNotContain("Hello");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	void captureShouldReturnAllCapturedOutput(OutputCapture output) {
 | 
			
		||||
		System.out.println("Hello World");
 | 
			
		||||
		System.err.println("Error!!!");
 | 
			
		||||
		assertThat(output).contains("Before all");
 | 
			
		||||
		assertThat(output).contains("Hello World");
 | 
			
		||||
		assertThat(output).contains("Error!!!");
 | 
			
		||||
		assertThat(output).contains("Before all").contains("Hello World")
 | 
			
		||||
				.contains("Error!!!");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	static class BeforeAllExtension implements BeforeAllCallback {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 | 
			
		|||
 *
 | 
			
		||||
 * @author Madhura Bhave
 | 
			
		||||
 */
 | 
			
		||||
public class OutputCaptureRegisterExtensionTests {
 | 
			
		||||
class OutputCaptureRegisterExtensionTests {
 | 
			
		||||
 | 
			
		||||
	@RegisterExtension
 | 
			
		||||
	OutputCapture output = new OutputCapture();
 | 
			
		||||
| 
						 | 
				
			
			@ -34,8 +34,7 @@ public class OutputCaptureRegisterExtensionTests {
 | 
			
		|||
	void captureShouldReturnAllCapturedOutput() {
 | 
			
		||||
		System.out.println("Hello World");
 | 
			
		||||
		System.err.println("Error!!!");
 | 
			
		||||
		assertThat(this.output).contains("Hello World");
 | 
			
		||||
		assertThat(this.output).contains("Error!!!");
 | 
			
		||||
		assertThat(this.output).contains("Hello World").contains("Error!!!");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue