summaryrefslogtreecommitdiff
path: root/tools/build/v2/test/timedata.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/build/v2/test/timedata.py')
-rw-r--r--tools/build/v2/test/timedata.py155
1 files changed, 155 insertions, 0 deletions
diff --git a/tools/build/v2/test/timedata.py b/tools/build/v2/test/timedata.py
new file mode 100644
index 0000000000..04ec99f98a
--- /dev/null
+++ b/tools/build/v2/test/timedata.py
@@ -0,0 +1,155 @@
+#!/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() \ No newline at end of file