From 8315022d0d34568d2d684288d652f5aff410d05e Mon Sep 17 00:00:00 2001 From: Lothar Buchholz Date: Fri, 21 Feb 2020 00:55:15 +0100 Subject: [PATCH] track total test duration --- src/test/java/SolutionTest.java | 54 +++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/src/test/java/SolutionTest.java b/src/test/java/SolutionTest.java index 81d7177..aee63e4 100644 --- a/src/test/java/SolutionTest.java +++ b/src/test/java/SolutionTest.java @@ -1,54 +1,70 @@ import java.io.*; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvFileSource; +import static java.nio.charset.StandardCharsets.UTF_8; import static org.junit.jupiter.api.Assertions.*; class SolutionTest { + static long totalDuration; + + @BeforeAll + static void beforeAll() { + totalDuration = 0; + } + + @AfterAll + static void afterAll() { + System.out.println( String.format( "All solutions took %01d.%03d secs", totalDuration / 1000, totalDuration % 1000 )); + } + @ParameterizedTest @CsvFileSource( resources = "testdata.csv" ) void main( final String input, final String expected ) throws IOException { + // keep original streams InputStream oldIn = System.in; PrintStream oldOut = System.out; PrintStream oldErr = System.err; + ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { - InputStream in = new ByteArrayInputStream( input.getBytes() ); - System.setIn( in ); - - ByteArrayOutputStream out = new ByteArrayOutputStream(); - System.setOut( new PrintStream( out ) ); - - ByteArrayOutputStream err = new ByteArrayOutputStream(); - System.setErr( new PrintStream( err ) ); + redirectStreams( + new ByteArrayInputStream( input.getBytes( UTF_8 )), + new PrintStream( bos, true, UTF_8 ), + new PrintStream( new ByteArrayOutputStream(), true, UTF_8 ) + ); // start time tracking long start = System.currentTimeMillis(); - Solution.main( new String[ 0 ] ); - out.flush(); + Solution.main( new String[0] ); // stop time tracking - long end = System.currentTimeMillis(); + long duration = System.currentTimeMillis() - start; + totalDuration += duration; // restore streams - System.setIn( oldIn ); - System.setOut( oldOut ); - System.setErr( oldErr ); + redirectStreams( oldIn, oldOut, oldErr ); - System.out.println( String.format( "Solution took %01d.%03d secs", ( end - start ) / 1000, ( end - start ) % 1000 ) ); + System.out.println( String.format( "Solution took %01d.%03d secs", duration / 1000, duration % 1000 )); - try (BufferedReader chk = new BufferedReader( new InputStreamReader( new ByteArrayInputStream( out.toByteArray() )))) { + try (BufferedReader chk = new BufferedReader( new InputStreamReader( new ByteArrayInputStream( bos.toByteArray() )))) { assertEquals( expected, chk.readLine() ); } } finally { // restore streams - System.setIn( oldIn ); - System.setOut( oldOut ); - System.setErr( oldErr ); + redirectStreams( oldIn, oldOut, oldErr ); } } + + static void redirectStreams( final InputStream input, final PrintStream output, final PrintStream error ) { + System.setIn( input ); + System.setOut( output ); + System.setErr( error ); + } }