mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-04 05:50:31 -05: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()
							 |