Add basic tests for QFlags.

This commit is contained in:
Mikaël Capelle
2022-05-03 22:21:23 +02:00
parent 8a886733d4
commit 08430a5df1
2 changed files with 46 additions and 0 deletions
+26
View File
@@ -4,6 +4,7 @@
#include <tuple>
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_<SimpleEnum>(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;
});
}
+20
View File
@@ -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