Skip to content

Commit 33533ff

Browse files
authored
Fix IsolatedConfig test (#5768)
* Fix IsolatedConfig test The test was throwing import errors past the lifetime of the owning scoped_interpreter * Clang format * Clang tidy
1 parent 7f5eea4 commit 33533ff

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

tests/test_embed/test_interpreter.cpp

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -198,17 +198,32 @@ TEST_CASE("Custom PyConfig") {
198198
}
199199

200200
TEST_CASE("scoped_interpreter with PyConfig_InitIsolatedConfig and argv") {
201+
std::vector<std::string> path;
202+
for (auto p : py::module::import("sys").attr("path")) {
203+
path.emplace_back(py::str(p));
204+
}
205+
201206
py::finalize_interpreter();
202207
{
203208
PyConfig config;
204209
PyConfig_InitIsolatedConfig(&config);
205210
char *argv[] = {strdup("a.out")};
206-
py::scoped_interpreter argv_scope{&config, 1, argv};
211+
py::scoped_interpreter argv_scope{&config, 1, argv, true};
207212
std::free(argv[0]);
208-
auto module = py::module::import("test_interpreter");
209-
auto py_widget = module.attr("DerivedWidget")("The question");
210-
const auto &cpp_widget = py_widget.cast<const Widget &>();
211-
REQUIRE(cpp_widget.argv0() == "a.out");
213+
// Because this config is isolated, setting the path during init will not work, we have to
214+
// set it manually. If we don't set it, then we can't import "test_interpreter"
215+
for (auto &&p : path) {
216+
py::list(py::module::import("sys").attr("path")).append(p);
217+
}
218+
try {
219+
auto module = py::module::import("test_interpreter");
220+
auto py_widget = module.attr("DerivedWidget")("The question");
221+
const auto &cpp_widget = py_widget.cast<const Widget &>();
222+
REQUIRE(cpp_widget.argv0() == "a.out");
223+
} catch (py::error_already_set &e) {
224+
// catch here so that the exception doesn't escape the interpreter that owns it
225+
FAIL(e.what());
226+
}
212227
}
213228
py::initialize_interpreter();
214229
}

0 commit comments

Comments
 (0)