Boost logo

Boost-Build :

From: Jurko Gospodnetiæ (jurko.gospodnetic_at_[hidden])
Date: 2008-01-04 14:30:46


   Hi.

   I'm attaching a patch for the tag test. See the comment embedded
inside the patch file.

   Best regards,
     Jurko Gospodnetiæ

Refactored the test into two separate test functions. Made the 'directory names
with dots' test use the expect_output_line() tool instead of a manual find,
causing a better diagnostic to be displayed in case of a failure. Made one of
the test Jam scripts more compact. Made the test use the Jamroot.jam file
instead of project-root.jam.

--- X:\Boost_Build\20071228_nightly_build\Original\boost-build\test\tag.py 2007-12-28 15:33:28.000000000 +-0100
+++ X:\Boost_Build\20071228_nightly_build\Modified\boost-build\test\tag.py 2008-01-04 20:07:44.000000000 +-0100
@@ -2,105 +2,126 @@
 
 # Copyright (C) Pedro Ferreira 2003. Permission to copy, use, modify, sell and
 # distribute this software is granted provided this copyright notice appears in
 # all copies. This software is provided "as is" without express or implied
 # warranty, and with no claim as to its suitability for any purpose.
 
-from BoostBuild import Tester, List
+import BoostBuild
 import string
 
-t = Tester()
 
-t.write("project-root.jam", "")
-t.write("Jamfile", """
-import virtual-target ;
-rule tag ( name : type ? : property-set )
-{
- local tags ;
- local v = [ $(property-set).get <variant> ] ;
- if $(v) = debug
- {
- tags += d ;
- }
- else if $(v) = release
- {
- tags += r ;
- }
-
- local l = [ $(property-set).get <link> ] ;
- if $(l) = shared
- {
- tags += s ;
- }
- else if $(l) = static
- {
- tags += t ;
- }
-
- if $(tags)
- {
- return [ virtual-target.add-prefix-and-suffix $(name)_$(tags:J="")
- : $(type) : $(property-set) ] ;
- }
-
-}
-
-# Test both fully-qualified and local name of the rule
-exe a : a.cpp : <tag>@$(__name__).tag ;
-lib b : a.cpp : <tag>@tag ;
-stage c : a ;
-""")
+################################################################################
+#
+# test_folder_with_dot_in_name()
+# ------------------------------
+#
+################################################################################
 
-t.write("a.cpp", """
-int main()
-{
- return 0;
-}
-
-#ifdef _MSC_VER
-__declspec (dllexport) void x () {}
-#endif
-""")
+def test_folder_with_dot_in_name(t):
+ """ Regression test: the 'tag' feature did not work in directories that had
+ a dot in their name.
+ """
 
-file_list = \
-List("bin/$toolset/debug/a_ds.exe") + \
-List("bin/$toolset/debug/b_ds.dll") + \
-List("c/a_ds.exe") + \
-List("bin/$toolset/release/a_rs.exe") + \
-List("bin/$toolset/release/b_rs.dll") + \
-List("c/a_rs.exe") + \
-List("bin/$toolset/debug/link-static/a_dt.exe") + \
-List("bin/$toolset/debug/link-static/b_dt.lib") + \
-List("c/a_dt.exe") + \
-List("bin/$toolset/release/link-static/a_rt.exe") + \
-List("bin/$toolset/release/link-static/b_rt.lib") + \
-List("c/a_rt.exe")
-
-variants = "debug release link=static,shared"
-
-t.run_build_system(variants)
-t.expect_addition(file_list)
-
-t.run_build_system(variants + " clean")
-t.expect_removal(file_list)
-
-# Regression test: the 'tag' feature did not work in directories that
-# had dot in names.
-t.write("version-1.32.0/Jamroot", """
+ t.write("version-1.32.0/Jamroot.jam", """
 project test : requirements <tag>@$(__name__).tag ;
 
 rule tag ( name : type ? : property-set )
 {
    # Do nothing, just make sure the rule is invoked OK.
    ECHO "The tag rule was invoked" ;
 }
 exe a : a.cpp ;
 """)
-
-t.write("version-1.32.0/a.cpp", "int main() { return 0; }\n")
+ t.write("version-1.32.0/a.cpp", "int main() { return 0; }\n")
 
-t.run_build_system(subdir="version-1.32.0")
-t.expect_addition("version-1.32.0/bin/$toolset/debug/a.exe")
-t.fail_test(string.find(t.stdout(), "The tag rule was invoked") == -1)
+ t.run_build_system(subdir="version-1.32.0")
+ t.expect_addition("version-1.32.0/bin/$toolset/debug/a.exe")
+ t.expect_output_line("The tag rule was invoked")
 
+
+################################################################################
+#
+# test_tag_property()
+# -------------------
+#
+################################################################################
+
+def test_tag_property(t):
+ """Basic tag property test.
+ """
+
+ t.write("Jamroot.jam", """
+import virtual-target ;
+
+rule tag ( name : type ? : property-set )
+{
+ local tags ;
+ switch [ $(property-set).get <variant> ]
+ {
+ case debug : tags += d ;
+ case release : tags += r ;
+ }
+ switch [ $(property-set).get <link> ]
+ {
+ case shared : tags += s ;
+ case static : tags += t ;
+ }
+ if $(tags)
+ {
+ return [ virtual-target.add-prefix-and-suffix $(name)_$(tags:J="")
+ : $(type) : $(property-set) ] ;
+ }
+}
+
+# Test both fully-qualified and local name of the rule
+exe a : a.cpp : <tag>@$(__name__).tag ;
+lib b : a.cpp : <tag>@tag ;
+stage c : a ;
+""")
+
+ t.write("a.cpp", """
+int main()
+{
+ return 0;
+}
+
+#ifdef _MSC_VER
+__declspec (dllexport) void x () {}
+#endif
+""")
+
+ file_list = \
+ BoostBuild.List("bin/$toolset/debug/a_ds.exe") + \
+ BoostBuild.List("bin/$toolset/debug/b_ds.dll") + \
+ BoostBuild.List("c/a_ds.exe") + \
+ BoostBuild.List("bin/$toolset/release/a_rs.exe") + \
+ BoostBuild.List("bin/$toolset/release/b_rs.dll") + \
+ BoostBuild.List("c/a_rs.exe") + \
+ BoostBuild.List("bin/$toolset/debug/link-static/a_dt.exe") + \
+ BoostBuild.List("bin/$toolset/debug/link-static/b_dt.lib") + \
+ BoostBuild.List("c/a_dt.exe") + \
+ BoostBuild.List("bin/$toolset/release/link-static/a_rt.exe") + \
+ BoostBuild.List("bin/$toolset/release/link-static/b_rt.lib") + \
+ BoostBuild.List("c/a_rt.exe")
+
+ variants = "debug release link=static,shared"
+
+ t.run_build_system(variants)
+ t.expect_addition(file_list)
+
+ t.run_build_system(variants + " clean")
+ t.expect_removal(file_list)
+
+
+################################################################################
+#
+# main()
+# ------
+#
+################################################################################
+
+t = BoostBuild.Tester()
+
+test_tag_property(t)
+test_folder_with_dot_in_name(t)
+
 t.cleanup()
-


Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk