Fix test added with PR #4330 (#4372)

This commit is contained in:
Ralf W. Grosse-Kunstleve 2022-12-01 09:25:30 -08:00 committed by GitHub
parent b14d58b615
commit 358ba459d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 25 additions and 22 deletions

View File

@ -14,6 +14,11 @@ PYBIND11_WARNING_DISABLE_MSVC(4996)
namespace py = pybind11;
using namespace py::literals;
size_t get_sys_path_size() {
auto sys_path = py::module::import("sys").attr("path");
return py::len(sys_path);
}
class Widget {
public:
explicit Widget(std::string message) : message(std::move(message)) {}
@ -196,41 +201,39 @@ TEST_CASE("Custom PyConfig with argv") {
}
#endif
TEST_CASE("Add program dir to path") {
static auto get_sys_path_size = []() -> size_t {
auto sys_path = py::module::import("sys").attr("path");
return py::len(sys_path);
};
static auto validate_path_len = [](size_t default_len) {
#if PY_VERSION_HEX < 0x030A0000
// It seems a value remains in sys.path
// left by the previous call of scoped_interpreter ctor.
REQUIRE(get_sys_path_size() > default_len);
#else
REQUIRE(get_sys_path_size() == default_len + 1);
#endif
};
TEST_CASE("Add program dir to path pre-PyConfig") {
py::finalize_interpreter();
size_t sys_path_default_size = 0;
size_t path_size_add_program_dir_to_path_false = 0;
{
py::scoped_interpreter scoped_interp{true, 0, nullptr, false};
sys_path_default_size = get_sys_path_size();
path_size_add_program_dir_to_path_false = get_sys_path_size();
}
{
py::scoped_interpreter scoped_interp{}; // expected to append some to sys.path
validate_path_len(sys_path_default_size);
py::scoped_interpreter scoped_interp{};
REQUIRE(get_sys_path_size() == path_size_add_program_dir_to_path_false + 1);
}
py::initialize_interpreter();
}
#if PY_VERSION_HEX >= PYBIND11_PYCONFIG_SUPPORT_PY_VERSION_HEX
TEST_CASE("Add program dir to path using PyConfig") {
py::finalize_interpreter();
size_t path_size_add_program_dir_to_path_false = 0;
{
PyConfig config;
PyConfig_InitPythonConfig(&config);
py::scoped_interpreter scoped_interp{&config}; // expected to append some to sys.path
validate_path_len(sys_path_default_size);
py::scoped_interpreter scoped_interp{&config, 0, nullptr, false};
path_size_add_program_dir_to_path_false = get_sys_path_size();
}
{
PyConfig config;
PyConfig_InitPythonConfig(&config);
py::scoped_interpreter scoped_interp{&config};
REQUIRE(get_sys_path_size() == path_size_add_program_dir_to_path_false + 1);
}
#endif
py::initialize_interpreter();
}
#endif
bool has_pybind11_internals_builtin() {
auto builtins = py::handle(PyEval_GetBuiltins());