summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorBrett Stottlemyer <bstottle@ford.com>2019-05-18 18:37:11 -0400
committerBrett Stottlemyer <bstottle@ford.com>2019-05-20 19:37:44 -0400
commit2d5105518ee21ea9ccb32effab76f4c5d1366cae (patch)
tree0bfa5a4913526f140626b560d6ba9220f3624268 /tests
parentfa84f22bfd5500550f26f544f6905ac89e60716f (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.pro3
-rw-r--r--tests/auto/proxy_multiprocess/client/main.cpp3
-rw-r--r--tests/auto/proxy_multiprocess/namespace.h9
-rw-r--r--tests/auto/proxy_multiprocess/proxy_multiprocess.pro3
-rw-r--r--tests/auto/proxy_multiprocess/server/main.cpp2
-rw-r--r--tests/auto/proxy_multiprocess/server/server.pro1
-rw-r--r--tests/auto/proxy_multiprocess/subclass.rep3
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())