mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 05:59:32 +01:00 
			
		
		
		
	Test for --min-duration
This commit is contained in:
		
				
					committed by
					
						
						Martin Hořeňovský
					
				
			
			
				
	
			
			
			
						parent
						
							46fde0c597
						
					
				
				
					commit
					53d8af8e96
				
			@@ -27,6 +27,7 @@ set(TEST_SOURCES
 | 
			
		||||
        ${SELF_TEST_DIR}/IntrospectiveTests/StringManip.tests.cpp
 | 
			
		||||
        ${SELF_TEST_DIR}/IntrospectiveTests/Xml.tests.cpp
 | 
			
		||||
        ${SELF_TEST_DIR}/IntrospectiveTests/ToString.tests.cpp
 | 
			
		||||
        ${SELF_TEST_DIR}/TimingTests/Sleep.tests.cpp
 | 
			
		||||
        ${SELF_TEST_DIR}/UsageTests/Approx.tests.cpp
 | 
			
		||||
        ${SELF_TEST_DIR}/UsageTests/BDD.tests.cpp
 | 
			
		||||
        ${SELF_TEST_DIR}/UsageTests/Benchmark.tests.cpp
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										23
									
								
								projects/SelfTest/TimingTests/Sleep.tests.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								projects/SelfTest/TimingTests/Sleep.tests.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  Copyright 2011 Two Blue Cubes Ltd. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 *  Distributed under the Boost Software License, Version 1.0. (See accompanying
 | 
			
		||||
 *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "catch.hpp"
 | 
			
		||||
 | 
			
		||||
#include <chrono>
 | 
			
		||||
#include <thread>
 | 
			
		||||
 | 
			
		||||
TEST_CASE( "sleep_for_100ms", "[.min_duration_test][approvals]" )
 | 
			
		||||
{
 | 
			
		||||
  std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) );
 | 
			
		||||
  CHECK( true );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_CASE( "sleep_for_200ms", "[.min_duration_test][approvals]" )
 | 
			
		||||
{
 | 
			
		||||
  std::this_thread::sleep_for( std::chrono::milliseconds( 200 ) );
 | 
			
		||||
  CHECK( true );
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								projects/TestScripts/testTimeThreshold.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								projects/TestScripts/testTimeThreshold.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
 | 
			
		||||
import subprocess
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
def run_tests_with_threshold(self_test_exe, threshold):
 | 
			
		||||
    cmd = [self_test_exe, '--min-duration', str(threshold),
 | 
			
		||||
            '[min_duration_test]']
 | 
			
		||||
    process = subprocess.Popen(
 | 
			
		||||
            cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | 
			
		||||
    stdout, stderr = process.communicate()
 | 
			
		||||
    if stderr:
 | 
			
		||||
        raise RuntimeError("Unexpected error output:\n" +
 | 
			
		||||
                stderr.decode())
 | 
			
		||||
    if process.returncode != 0:
 | 
			
		||||
        raise RuntimeError("Unexpected failure to run tests\n")
 | 
			
		||||
    result = stdout.split(b'\n')
 | 
			
		||||
    report_lines = [s.split() for s in result if b' s: ' in s]
 | 
			
		||||
    tests_reported = [l[2] for l in report_lines]
 | 
			
		||||
    times_reported = [float(l[0]) for l in report_lines]
 | 
			
		||||
    return tests_reported, times_reported
 | 
			
		||||
 | 
			
		||||
def check_times_at_least(times_reported, minimum):
 | 
			
		||||
    for time in times_reported:
 | 
			
		||||
        assert time >= minimum, (
 | 
			
		||||
                'Time {} was less that requested minimum {}' .format(
 | 
			
		||||
                    time, minimum))
 | 
			
		||||
 | 
			
		||||
def main():
 | 
			
		||||
    self_test_exe, = sys.argv[1:]
 | 
			
		||||
    tests, times = run_tests_with_threshold(self_test_exe, '0.15')
 | 
			
		||||
    assert tests == [b'sleep_for_200ms'], (
 | 
			
		||||
            "Unexpected tests reported %s" % tests)
 | 
			
		||||
    check_times_at_least(times, 0.15)
 | 
			
		||||
    tests,times = run_tests_with_threshold(self_test_exe, '0')
 | 
			
		||||
    assert tests == [b'sleep_for_100ms', b'sleep_for_200ms'], (
 | 
			
		||||
            "Unexpected tests reported %s" % tests)
 | 
			
		||||
    check_times_at_least(times, 0)
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    sys.exit(main())
 | 
			
		||||
		Reference in New Issue
	
	Block a user