summaryrefslogtreecommitdiff
path: root/tools/build/v2/test/regression.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/build/v2/test/regression.py')
-rw-r--r--tools/build/v2/test/regression.py124
1 files changed, 124 insertions, 0 deletions
diff --git a/tools/build/v2/test/regression.py b/tools/build/v2/test/regression.py
new file mode 100644
index 0000000000..c65082810e
--- /dev/null
+++ b/tools/build/v2/test/regression.py
@@ -0,0 +1,124 @@
+#!/usr/bin/python
+
+# Copyright (C) Vladimir Prus 2003.
+# 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)
+
+# Test for the regression testing framework.
+
+import BoostBuild
+
+# Create a temporary working directory.
+t = BoostBuild.Tester()
+
+t.write("c.cpp", "\n")
+
+t.write("r.cpp", """
+void helper();
+
+#include <iostream>
+int main( int ac, char * av[] )
+{
+ helper();
+ for ( int i = 1; i < ac; ++i )
+ std::cout << av[ i ] << '\\n';
+}
+""")
+
+t.write("c-f.cpp", """
+int
+""")
+
+t.write("r-f.cpp", """
+int main() { return 1; }
+""")
+
+
+t.write("jamfile.jam", """
+import testing ;
+compile c.cpp ;
+compile-fail c-f.cpp ;
+run r.cpp libs//helper : foo bar ;
+run-fail r-f.cpp ;
+""")
+
+t.write("libs/jamfile.jam", """
+lib helper : helper.cpp ;
+""")
+
+t.write("libs/helper.cpp", """
+void
+#if defined(_WIN32)
+__declspec(dllexport)
+#endif
+helper() {}
+""")
+
+t.write("jamroot.jam", "")
+
+# First test that when outcomes are expected, all .test files are created.
+t.run_build_system("hardcode-dll-paths=false", stderr=None, status=None)
+t.expect_addition("bin/c.test/$toolset/debug/c.test")
+t.expect_addition("bin/c-f.test/$toolset/debug/c-f.test")
+t.expect_addition("bin/r.test/$toolset/debug/r.test")
+t.expect_addition("bin/r-f.test/$toolset/debug/r-f.test")
+
+# Make sure args are handled.
+t.expect_content("bin/r.test/$toolset/debug/r.output",
+ "foo\nbar\n*\nEXIT STATUS: 0*\n", True)
+
+# Test that input file is handled as well.
+t.write("r.cpp", """
+#include <iostream>
+#include <fstream>
+int main( int ac, char * av[] )
+{
+ for ( int i = 1; i < ac; ++i )
+ {
+ std::ifstream ifs( av[ i ] );
+ std::cout << ifs.rdbuf();
+ }
+}
+""")
+
+t.write("dir/input.txt", "test input")
+
+t.write("jamfile.jam", """
+import testing ;
+compile c.cpp ;
+obj c-obj : c.cpp ;
+compile-fail c-f.cpp ;
+run r.cpp : : dir/input.txt ;
+run-fail r-f.cpp ;
+time execution : r ;
+time compilation : c-obj ;
+""")
+
+t.run_build_system('hardcode-dll-paths=false')
+t.expect_content("bin/r.test/$toolset/debug/r.output",
+ "test input\nEXIT STATUS: 0\n")
+
+t.expect_addition('bin/$toolset/debug/execution.time')
+t.expect_addition('bin/$toolset/debug/compilation.time')
+
+# Make sure test failures are detected. Reverse expectation and see if .test
+# files are created or not.
+t.write("jamfile.jam", """
+import testing ;
+
+compile-fail c.cpp ;
+compile c-f.cpp ;
+run-fail r.cpp : : dir/input.txt ;
+run r-f.cpp ;
+""")
+
+t.touch(BoostBuild.List("c.cpp c-f.cpp r.cpp r-f.cpp"))
+
+t.run_build_system("hardcode-dll-paths=false", stderr=None, status=1)
+t.expect_removal("bin/c.test/$toolset/debug/c.test")
+t.expect_removal("bin/c-f.test/$toolset/debug/c-f.test")
+t.expect_removal("bin/r.test/$toolset/debug/r.test")
+t.expect_removal("bin/r-f.test/$toolset/debug/r-f.test")
+
+t.cleanup()