You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.6 KiB
98 lines
2.6 KiB
diff -up boost_1_53_0/libs/python/test/exec.cpp\~ boost_1_53_0/libs/python/test/exec.cpp |
|
--- boost_1_53_0/libs/python/test/exec.cpp~ 2010-07-05 00:38:38.000000000 +0200 |
|
+++ boost_1_53_0/libs/python/test/exec.cpp 2015-01-09 21:31:12.903218280 +0100 |
|
@@ -56,6 +56,20 @@ void eval_test() |
|
BOOST_TEST(value == "ABCDEFG"); |
|
} |
|
|
|
+struct PyCtx |
|
+{ |
|
+ PyCtx() { |
|
+ Py_Initialize(); |
|
+ } |
|
+ |
|
+ ~PyCtx() { |
|
+ // N.B. certain problems may arise when Py_Finalize is called when |
|
+ // using Boost.Python. However in this test suite it all seems to |
|
+ // work fine. |
|
+ Py_Finalize(); |
|
+ } |
|
+}; |
|
+ |
|
void exec_test() |
|
{ |
|
// Register the module with the interpreter |
|
@@ -68,6 +82,8 @@ void exec_test() |
|
) == -1) |
|
throw std::runtime_error("Failed to add embedded_hello to the interpreter's " |
|
"builtin modules"); |
|
+ |
|
+ PyCtx ctx; |
|
// Retrieve the main module |
|
python::object main = python::import("__main__"); |
|
|
|
@@ -148,41 +164,43 @@ void check_pyerr(bool pyerr_expected=fal |
|
} |
|
} |
|
|
|
+template <class Cb> |
|
+bool |
|
+run_and_handle_exception(Cb cb, bool pyerr_expected = false) |
|
+{ |
|
+ PyCtx ctx; |
|
+ if (python::handle_exception(cb)) { |
|
+ check_pyerr(pyerr_expected); |
|
+ return true; |
|
+ } else { |
|
+ return false; |
|
+ } |
|
+} |
|
+ |
|
int main(int argc, char **argv) |
|
{ |
|
BOOST_TEST(argc == 2 || argc == 3); |
|
std::string script = argv[1]; |
|
- // Initialize the interpreter |
|
- Py_Initialize(); |
|
|
|
- if (python::handle_exception(eval_test)) { |
|
- check_pyerr(); |
|
- } |
|
- else if(python::handle_exception(exec_test)) { |
|
- check_pyerr(); |
|
- } |
|
- else if (python::handle_exception(boost::bind(exec_file_test, script))) { |
|
+ // N.B. exec_test mustn't be called through run_and_handle_exception |
|
+ // as it needs to handles the python context by itself. |
|
+ if (run_and_handle_exception(eval_test) |
|
+ || python::handle_exception(exec_test)) |
|
check_pyerr(); |
|
- } |
|
- |
|
- if (python::handle_exception(exec_test_error)) |
|
- { |
|
- check_pyerr(/*pyerr_expected*/ true); |
|
- } |
|
else |
|
- { |
|
+ run_and_handle_exception(boost::bind(exec_file_test, script)); |
|
+ |
|
+ if (!run_and_handle_exception(exec_test_error, true)) |
|
BOOST_ERROR("Python exception expected, but not seen."); |
|
- } |
|
|
|
if (argc > 2) { |
|
+ PyCtx ctx; |
|
// The main purpose is to test compilation. Since this test generates |
|
// a file and I (rwgk) am uncertain about the side-effects, run it only |
|
// if explicitly requested. |
|
exercise_embedding_html(); |
|
} |
|
|
|
- // Boost.Python doesn't support Py_Finalize yet. |
|
- // Py_Finalize(); |
|
return boost::report_errors(); |
|
} |
|
|
|
|
|
Diff finished. Fri Jan 9 21:31:13 2015
|
|
|