diff options
author | Brett Stottlemyer <bstottle@ford.com> | 2019-05-18 18:37:11 -0400 |
---|---|---|
committer | Brett Stottlemyer <bstottle@ford.com> | 2019-05-20 19:37:44 -0400 |
commit | 2d5105518ee21ea9ccb32effab76f4c5d1366cae (patch) | |
tree | 0bfa5a4913526f140626b560d6ba9220f3624268 /tests | |
parent | fa84f22bfd5500550f26f544f6905ac89e60716f (diff) |
Support Q_GADGETs with enums
The previous logic for sending/receiving the Q_GADGET definition used a
custom GadgetsData type on both sides (a QByteArray for name and a QList
of name/type pairs for each member). This isn't really needed on the
send side, we just need the QMetaObject for the class. This simplifies
the logic on the send side, as we no longer need to copy data around and
merge duplicate types, and it allows extension to getting enums.
On the receive side, we do need to copy the data. In particular, there
can be nested types, where one POD includes another or an enum from
another type. It is easier to extend the class if it doesn't need to
support the send operation as well.
On the send side, we now have serializeGadgets() which takes the pointers
for gadget metaobjects as well as the list of needed QMetaEnum types.
Using these, it constructs the list of necessary types to serialize and
marshalls those.
On the receive side, there is registerGadgets which uses the extended
GadgetData struct (now including the data needed to create dynamic
QMetaEnums) to create metaObjects and register the required types.
Change-Id: I80ceff39131c7a2cdcfe592f338ea98f72e76874
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/proxy_multiprocess/client/client.pro | 3 | ||||
-rw-r--r-- | tests/auto/proxy_multiprocess/client/main.cpp | 3 | ||||
-rw-r--r-- | tests/auto/proxy_multiprocess/namespace.h | 9 | ||||
-rw-r--r-- | tests/auto/proxy_multiprocess/proxy_multiprocess.pro | 3 | ||||
-rw-r--r-- | tests/auto/proxy_multiprocess/server/main.cpp | 2 | ||||
-rw-r--r-- | tests/auto/proxy_multiprocess/server/server.pro | 1 | ||||
-rw-r--r-- | tests/auto/proxy_multiprocess/subclass.rep | 3 |
7 files changed, 23 insertions, 1 deletions
diff --git a/tests/auto/proxy_multiprocess/client/client.pro b/tests/auto/proxy_multiprocess/client/client.pro index d6c31db..7a181a2 100644 --- a/tests/auto/proxy_multiprocess/client/client.pro +++ b/tests/auto/proxy_multiprocess/client/client.pro @@ -12,6 +12,7 @@ REPC_REPLICA = ../subclass.rep SOURCES += main.cpp \ HEADERS += \ - ../shared.h + ../shared.h \ + ../namespace.h INCLUDEPATH += $$PWD diff --git a/tests/auto/proxy_multiprocess/client/main.cpp b/tests/auto/proxy_multiprocess/client/main.cpp index 1c4f02b..5f11402 100644 --- a/tests/auto/proxy_multiprocess/client/main.cpp +++ b/tests/auto/proxy_multiprocess/client/main.cpp @@ -62,12 +62,14 @@ private Q_SLOTS: QVERIFY(tracksSpy.count() || tracksSpy.wait()); QCOMPARE(m_rep->myEnum(), QVariant::fromValue(ParentClassReplica::bar)); QCOMPARE(m_rep->date(), QVariant::fromValue(Qt::SystemLocaleShortDate)); + QCOMPARE(m_rep->nsEnum(), QVariant::fromValue(NS::Bravo)); QCOMPARE(m_rep->variant(), QVariant::fromValue(42.0f)); } else { QVERIFY(m_rep->subClass() == nullptr); QVERIFY(m_rep->tracks() == nullptr); QCOMPARE(m_rep->myEnum(), QVariant::fromValue(ParentClassReplica::foo)); QCOMPARE(m_rep->date(), QVariant::fromValue(Qt::ISODate)); + QCOMPARE(m_rep->nsEnum(), QVariant::fromValue(NS::Alpha)); QCOMPARE(m_rep->variant(), QVariant()); } @@ -97,6 +99,7 @@ private Q_SLOTS: QVERIFY(m_rep->tracks() != nullptr); QCOMPARE(m_rep->myEnum(), QVariant::fromValue(ParentClassReplica::foobar)); QCOMPARE(m_rep->date(), QVariant::fromValue(Qt::SystemLocaleLongDate)); + QCOMPARE(m_rep->nsEnum(), QVariant::fromValue(NS::Charlie)); QCOMPARE(m_rep->variant(), QVariant::fromValue(podValue)); qDebug() << "Verified expected final states, cleaning up."; } diff --git a/tests/auto/proxy_multiprocess/namespace.h b/tests/auto/proxy_multiprocess/namespace.h new file mode 100644 index 0000000..0b370ba --- /dev/null +++ b/tests/auto/proxy_multiprocess/namespace.h @@ -0,0 +1,9 @@ +#include <QMetaType> + +namespace NS +{ + Q_NAMESPACE + enum NamespaceEnum { Alpha=1, Bravo, Charlie }; + Q_ENUM_NS(NamespaceEnum) +} + diff --git a/tests/auto/proxy_multiprocess/proxy_multiprocess.pro b/tests/auto/proxy_multiprocess/proxy_multiprocess.pro index 075bc00..6bd7af7 100644 --- a/tests/auto/proxy_multiprocess/proxy_multiprocess.pro +++ b/tests/auto/proxy_multiprocess/proxy_multiprocess.pro @@ -1,2 +1,5 @@ TEMPLATE = subdirs SUBDIRS = client server proxy tst + +OTHER_FILES += shared.h \ + namespace.h diff --git a/tests/auto/proxy_multiprocess/server/main.cpp b/tests/auto/proxy_multiprocess/server/main.cpp index e8e188d..9e806b9 100644 --- a/tests/auto/proxy_multiprocess/server/main.cpp +++ b/tests/auto/proxy_multiprocess/server/main.cpp @@ -57,6 +57,7 @@ private Q_SLOTS: parent.setTracks(&model); parent.setMyEnum(ParentClassSource::bar); parent.setDate(Qt::SystemLocaleShortDate); + parent.setNsEnum(NS::Bravo); parent.setVariant(QVariant::fromValue(42.0f)); } @@ -84,6 +85,7 @@ private Q_SLOTS: parent.setTracks(&model); parent.setMyEnum(ParentClassSource::foobar); parent.setDate(Qt::SystemLocaleLongDate); + parent.setNsEnum(NS::Charlie); parent.setVariant(QVariant::fromValue(podValue)); emit parent.enum2(ParentClassSource::foo, ParentClassSource::bar); diff --git a/tests/auto/proxy_multiprocess/server/server.pro b/tests/auto/proxy_multiprocess/server/server.pro index 24c9a13..02ca498 100644 --- a/tests/auto/proxy_multiprocess/server/server.pro +++ b/tests/auto/proxy_multiprocess/server/server.pro @@ -14,6 +14,7 @@ SOURCES += main.cpp \ HEADERS += \ ../shared.h \ + ../namespace.h \ mytestserver.h \ $$OUT_PWD/rep_subclass_source.h diff --git a/tests/auto/proxy_multiprocess/subclass.rep b/tests/auto/proxy_multiprocess/subclass.rep index d48b690..b1fe352 100644 --- a/tests/auto/proxy_multiprocess/subclass.rep +++ b/tests/auto/proxy_multiprocess/subclass.rep @@ -1,6 +1,8 @@ #include <QPoint> +#include "../namespace.h" USE_ENUM(Qt::DateFormat) +USE_ENUM(NS::NamespaceEnum) POD MyPOD(int i, float f, QString s) POD VariantPOD(int i, int j) @@ -18,6 +20,7 @@ class ParentClass PROP(MyEnum myEnum=foo) PROP(QVariant variant) PROP(Qt::DateFormat date = Qt::ISODate) + PROP(NS::NamespaceEnum nsEnum = NS::Alpha) SLOT(bool start()) SLOT(bool quit()) |