forked from code-clash/look-and-say
		
	track total test duration
This commit is contained in:
		@@ -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 );
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user