diff --git a/tests/python/test_qt.cpp b/tests/python/test_qt.cpp index 4d656c2..8d7cb1e 100644 --- a/tests/python/test_qt.cpp +++ b/tests/python/test_qt.cpp @@ -4,6 +4,7 @@ #include +namespace py = pybind11; using namespace pybind11::literals; PYBIND11_MODULE(qt, m) @@ -116,4 +117,29 @@ PYBIND11_MODULE(qt, m) map["baz"] = "world hello"; return map; }); + + // QFlags + + enum SimpleEnum { Value0 = 0x1, Value1 = 0x2, Value2 = 0x4 }; + Q_DECLARE_FLAGS(SimpleEnumFlags, SimpleEnum); + + py::enum_(m, "SimpleEnum", py::arithmetic()) + .value("Value0", Value0) + .value("Value1", Value1) + .value("Value2", Value2); + + m.def("qflags_explode", [](SimpleEnumFlags const& flags) { + return std::make_tuple(flags.toInt(), flags.testFlag(Value0), + flags.testFlag(Value1), flags.testFlag(Value2)); + }); + m.def("qflags_create", [](bool v0, bool v1, bool v2) { + SimpleEnumFlags r; + if (v0) + r.setFlag(Value0); + if (v1) + r.setFlag(Value1); + if (v2) + r.setFlag(Value2); + return r; + }); } diff --git a/tests/python/test_qt.py b/tests/python/test_qt.py index 3cb94d1..004267b 100644 --- a/tests/python/test_qt.py +++ b/tests/python/test_qt.py @@ -90,3 +90,23 @@ def test_qvariant(): {"bar": 42, "moo": [44, True]}, 45, ] + + +def test_qflags(): + v0, v1, v2 = m.SimpleEnum.Value0, m.SimpleEnum.Value1, m.SimpleEnum.Value2 + + assert m.qflags_explode(v0 | v1) == (0x3, True, True, False) + assert m.qflags_explode(v0 | v2) == (0x5, True, False, True) + assert m.qflags_explode(0) == (0, False, False, False) + + assert not (m.qflags_create(False, False, False) & v0) + assert not (m.qflags_create(False, False, False) & v1) + assert not (m.qflags_create(False, False, False) & v2) + + assert m.qflags_create(True, False, False) & v0 + assert m.qflags_create(True, True, False) & v0 + assert m.qflags_create(True, True, False) & v1 + assert not (m.qflags_create(True, True, False) & v2) + + assert m.qflags_create(True, False, False) | v0 == v0 + assert m.qflags_create(True, False, False) | v0 | v2 == v0 | v2