| #!/usr/bin/python |
| |
| # Copyright 2005 David Abrahams |
| # Copyright 2008 Jurko Gospodnetic |
| # Distributed under the Boost Software License, Version 1.0. |
| # (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) |
| |
| # Tests the build step timing facilities. |
| |
| |
| 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__) |
| echo timed from $(>) >> $(<) |
| } |
| |
| rule record_time ( target : source : start end user system ) |
| { |
| __USER_TIME__ on $(target) = $(user) ; |
| __SYSTEM_TIME__ on $(target) = $(system) ; |
| } |
| |
| rule make |
| { |
| DEPENDS $(<) : $(>) ; |
| } |
| |
| actions make |
| { |
| echo made from $(>) >> $(<) |
| } |
| |
| time foo : bar ; |
| make bar : baz ; |
| """) |
| |
| t.write("baz", "nothing\n") |
| |
| expected_output = """\.\.\.found 4 targets\.\.\. |
| \.\.\.updating 2 targets\.\.\. |
| make bar |
| time foo |
| bar +user: [0-9\.]+ +system: +[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() |
| |
| 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_line("bin/$toolset/debug/my-time.time", "user: *") |
| t.expect_content_line("bin/$toolset/debug/my-time.time", "system: *") |
| |
| 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() |
| |
| 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_line("bin/$toolset/debug/my time.time", "user: *") |
| t.expect_content_line("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() |