mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-26 10:30:22 -04:00 
			
		
		
		
	
		
			
	
	
		
			178 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			178 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | #!/usr/bin/python | ||
|  | 
 | ||
|  | # Copyright 2005 David Abrahams | ||
|  | # Copyright 2008, 2012 Jurko Gospodnetic | ||
|  | # 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) | ||
|  | 
 | ||
|  | # Tests the build step timing facilities. | ||
|  | 
 | ||
|  | # TODO: Missing tests: | ||
|  | # 1. 'time' target with a source target representing more than one virtual | ||
|  | #    target. This happens in practice, e.g. when using the time rule on a msvc | ||
|  | #    exe target whose generator actually constructs an EXE and a PDB target. | ||
|  | #    When this is done - only the main virtual target's constructing action | ||
|  | #    should be timed. | ||
|  | # 2. 'time' target with a source target representing a virtual target that | ||
|  | #    actually gets built by multiple actions run in sequence. In that case a | ||
|  | #    separate timing result should be reported for each of those actions. This | ||
|  | #    happens in practice, e.g. when using the time rule on a msvc exe target | ||
|  | #    which first gets created as a result of some link action and then its | ||
|  | #    manifest gets embedded inside it as a resource using a separate action | ||
|  | #    (assuming an appropriate property has been set for this target - see the | ||
|  | #    msvc module for details). | ||
|  | 
 | ||
|  | import BoostBuild | ||
|  | import re | ||
|  | 
 | ||
|  | 
 | ||
|  | ############################################################################### | ||
|  | # | ||
|  | # basic_jam_action_test() | ||
|  | # ----------------------- | ||
|  | # | ||
|  | ############################################################################### | ||
|  | 
 | ||
|  | def basic_jam_action_test(): | ||
|  |     """Tests basic Jam action timing support.""" | ||
|  | 
 | ||
|  |     t = BoostBuild.Tester(pass_toolset=0) | ||
|  | 
 | ||
|  |     t.write("file.jam", """\
 | ||
|  | rule time | ||
|  | { | ||
|  |     DEPENDS $(<) : $(>) ; | ||
|  |     __TIMING_RULE__ on $(>) = record_time $(<) ; | ||
|  |     DEPENDS all : $(<) ; | ||
|  | } | ||
|  | 
 | ||
|  | actions time | ||
|  | { | ||
|  |     echo $(>) user: $(__USER_TIME__) system: $(__SYSTEM_TIME__) clock: $(__CLOCK_TIME__) | ||
|  |     echo timed from $(>) >> $(<) | ||
|  | } | ||
|  | 
 | ||
|  | rule record_time ( target : source : start end user system clock ) | ||
|  | { | ||
|  |     __USER_TIME__ on $(target) = $(user) ; | ||
|  |     __SYSTEM_TIME__ on $(target) = $(system) ; | ||
|  |     __CLOCK_TIME__ on $(target) = $(clock) ; | ||
|  | } | ||
|  | 
 | ||
|  | rule make | ||
|  | { | ||
|  |     DEPENDS $(<) : $(>) ; | ||
|  | } | ||
|  | 
 | ||
|  | actions make | ||
|  | { | ||
|  |     echo made from $(>) >> $(<) | ||
|  | } | ||
|  | 
 | ||
|  | time foo : bar ; | ||
|  | make bar : baz ; | ||
|  | """)
 | ||
|  | 
 | ||
|  |     t.write("baz", "nothing") | ||
|  | 
 | ||
|  |     expected_output = """\
 | ||
|  | \.\.\.found 4 targets\.\.\. | ||
|  | \.\.\.updating 2 targets\.\.\. | ||
|  | make bar | ||
|  | time foo | ||
|  | bar +user: [0-9\.]+ +system: +[0-9\.]+ +clock: +[0-9\.]+ * | ||
|  | \.\.\.updated 2 targets\.\.\.$ | ||
|  | """
 | ||
|  | 
 | ||
|  |     t.run_build_system(["-ffile.jam", "-d+1"], stdout=expected_output, | ||
|  |         match=lambda actual, expected: re.search(expected, actual, re.DOTALL)) | ||
|  |     t.expect_addition("foo") | ||
|  |     t.expect_addition("bar") | ||
|  |     t.expect_nothing_more() | ||
|  | 
 | ||
|  |     t.cleanup() | ||
|  | 
 | ||
|  | 
 | ||
|  | ############################################################################### | ||
|  | # | ||
|  | # boost_build_testing_support_timing_rule(): | ||
|  | # ------------------------------------------ | ||
|  | # | ||
|  | ############################################################################### | ||
|  | 
 | ||
|  | def boost_build_testing_support_timing_rule(): | ||
|  |     """
 | ||
|  |       Tests the target build timing rule provided by the Boost Build testing | ||
|  |     support system. | ||
|  | 
 | ||
|  |     """
 | ||
|  |     t = BoostBuild.Tester(use_test_config=False) | ||
|  | 
 | ||
|  |     t.write("aaa.cpp", "int main() {}\n") | ||
|  | 
 | ||
|  |     t.write("jamroot.jam", """\
 | ||
|  | import testing ; | ||
|  | exe my-exe : aaa.cpp ; | ||
|  | time my-time : my-exe ; | ||
|  | """)
 | ||
|  | 
 | ||
|  |     t.run_build_system() | ||
|  |     t.expect_addition("bin/$toolset/debug/aaa.obj") | ||
|  |     t.expect_addition("bin/$toolset/debug/my-exe.exe") | ||
|  |     t.expect_addition("bin/$toolset/debug/my-time.time") | ||
|  | 
 | ||
|  |     t.expect_content_lines("bin/$toolset/debug/my-time.time", | ||
|  |         "user: *[0-9] seconds") | ||
|  |     t.expect_content_lines("bin/$toolset/debug/my-time.time", | ||
|  |         "system: *[0-9] seconds") | ||
|  |     t.expect_content_lines("bin/$toolset/debug/my-time.time", | ||
|  |         "clock: *[0-9] seconds") | ||
|  | 
 | ||
|  |     t.cleanup() | ||
|  | 
 | ||
|  | 
 | ||
|  | ############################################################################### | ||
|  | # | ||
|  | # boost_build_testing_support_timing_rule_with_spaces_in_names() | ||
|  | # -------------------------------------------------------------- | ||
|  | # | ||
|  | ############################################################################### | ||
|  | 
 | ||
|  | def boost_build_testing_support_timing_rule_with_spaces_in_names(): | ||
|  |     """
 | ||
|  |       Tests the target build timing rule provided by the Boost Build testing | ||
|  |     support system when used with targets contining spaces in their names. | ||
|  | 
 | ||
|  |     """
 | ||
|  |     t = BoostBuild.Tester(use_test_config=False) | ||
|  | 
 | ||
|  |     t.write("aaa bbb.cpp", "int main() {}\n") | ||
|  | 
 | ||
|  |     t.write("jamroot.jam", """\
 | ||
|  | import testing ; | ||
|  | exe "my exe" : "aaa bbb.cpp" ; | ||
|  | time "my time" : "my exe" ; | ||
|  | """)
 | ||
|  | 
 | ||
|  |     t.run_build_system() | ||
|  |     t.expect_addition("bin/$toolset/debug/aaa bbb.obj") | ||
|  |     t.expect_addition("bin/$toolset/debug/my exe.exe") | ||
|  |     t.expect_addition("bin/$toolset/debug/my time.time") | ||
|  | 
 | ||
|  |     t.expect_content_lines("bin/$toolset/debug/my time.time", "user: *") | ||
|  |     t.expect_content_lines("bin/$toolset/debug/my time.time", "system: *") | ||
|  | 
 | ||
|  |     t.cleanup() | ||
|  | 
 | ||
|  | 
 | ||
|  | ############################################################################### | ||
|  | # | ||
|  | # main() | ||
|  | # ------ | ||
|  | # | ||
|  | ############################################################################### | ||
|  | 
 | ||
|  | basic_jam_action_test() | ||
|  | boost_build_testing_support_timing_rule() | ||
|  | boost_build_testing_support_timing_rule_with_spaces_in_names() |