summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorBrett Stottlemyer <bstottle@ford.com>2019-05-14 20:51:16 -0400
committerBrett Stottlemyer <bstottle@ford.com>2019-05-17 20:17:29 +0000
commit91f83125dd403878c989be4098cc3a35eb5ba06f (patch)
tree6a15a35bb32ebc745a3bd1f08b88c2c67d0496cd /tests
parente520e4fd777350673d5022982481f82672fea6ff (diff)
More fixes for (dynamic) enums in signals and slots
This addresses two larger issues with enums and several smaller fixes. First, unlike the recent fix for properties, we need to register enums for queued connections to work and get signal/slot updates over QtRO to work. This change adds said registration. Second, enums are identified with the class they are defined in, so passing updates through a dynamic object requires converting the typenames. The templated enableRemoting methods become interesting here, as the class name depends on the type passed as a template parameter. This change also updates the repc output so enums are properly resolved via the templates. Smaller fixes include updates to some tests and several places where enums were converted to/from int. Note: we need (and have always needed) to convert enums to ints, since the class name is passed as part of the variant serialization which cannot be changed without major digging into qvariant and QDataStream serialization internals. Change-Id: I0a77f85df6a400a7a44394a05c9c2401bee4e4a8 Reviewed-by: Michael Brasser <michael.brasser@live.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/integration/tst_integration.cpp5
-rw-r--r--tests/auto/integration_external/client/main.cpp4
-rw-r--r--tests/auto/integration_multiprocess/client/main.cpp4
-rw-r--r--tests/auto/proxy_multiprocess/client/main.cpp16
-rw-r--r--tests/auto/proxy_multiprocess/server/main.cpp1
-rw-r--r--tests/auto/proxy_multiprocess/server/mytestserver.cpp8
-rw-r--r--tests/auto/proxy_multiprocess/server/mytestserver.h1
-rw-r--r--tests/auto/proxy_multiprocess/subclass.rep11
8 files changed, 36 insertions, 14 deletions
diff --git a/tests/auto/integration/tst_integration.cpp b/tests/auto/integration/tst_integration.cpp
index af5cba0..7f39381 100644
--- a/tests/auto/integration/tst_integration.cpp
+++ b/tests/auto/integration/tst_integration.cpp
@@ -345,8 +345,9 @@ private slots:
// set property on the replica (test property change packet)
{
QSignalSpy spy(tc_rep.data(), SIGNAL(classEnumChanged(TestClassReplica::ClassEnum)));
+ QVERIFY(spy.isValid());
tc_rep->pushClassEnum(TestClassReplica::Two);
- QVERIFY(spy.wait());
+ QVERIFY(spy.count() || spy.wait());
QCOMPARE((qint32)tc.classEnum(), (qint32)tc_rep->classEnum());
}
@@ -405,7 +406,7 @@ private slots:
QSignalSpy spy(tc_rep.data(), SIGNAL(classEnumChanged(TestClassReplica::ClassEnum)));
bool res = property.write(tc_repDynamic.data(), TestClassReplica::Two);
QVERIFY(!res);
- int methodIndex = metaObject->indexOfMethod("pushClassEnum(ClassEnum)");
+ int methodIndex = metaObject->indexOfMethod("pushClassEnum(TestClassReplica::ClassEnum)");
QVERIFY(methodIndex >= 0);
QMetaMethod method = metaObject->method(methodIndex);
QVERIFY(method.isValid());
diff --git a/tests/auto/integration_external/client/main.cpp b/tests/auto/integration_external/client/main.cpp
index 05f7f59..bc53333 100644
--- a/tests/auto/integration_external/client/main.cpp
+++ b/tests/auto/integration_external/client/main.cpp
@@ -129,7 +129,7 @@ private Q_SLOTS:
QCOMPARE(simm.parameterType(2), int(QMetaType::QString));
}
- int slotIdx = mo->indexOfSlot("testEnumParamsInSlots(Enum1,bool,int)");
+ int slotIdx = mo->indexOfSlot("testEnumParamsInSlots(MyInterfaceReplica::Enum1,bool,int)");
QVERIFY(slotIdx != -1);
auto slmm = mo->method(slotIdx);
{
@@ -143,7 +143,7 @@ private Q_SLOTS:
int enumVal = 0;
mo->invokeMethod(rep.data(), "testEnumParamsInSlots",
- QGenericArgument("Enum1", &enumVal),
+ QGenericArgument("MyInterfaceReplica::Enum1", &enumVal),
Q_ARG(bool, true), Q_ARG(int, 1234));
int enumIdx = mo->indexOfProperty("enum1");
diff --git a/tests/auto/integration_multiprocess/client/main.cpp b/tests/auto/integration_multiprocess/client/main.cpp
index b60a48a..87f2ad8 100644
--- a/tests/auto/integration_multiprocess/client/main.cpp
+++ b/tests/auto/integration_multiprocess/client/main.cpp
@@ -112,7 +112,7 @@ private Q_SLOTS:
QCOMPARE(simm.parameterType(2), int(QMetaType::QString));
}
- int slotIdx = mo->indexOfSlot("testEnumParamsInSlots(Enum1,bool,int)");
+ int slotIdx = mo->indexOfSlot("testEnumParamsInSlots(MyInterfaceReplica::Enum1,bool,int)");
QVERIFY(slotIdx != -1);
auto slmm = mo->method(slotIdx);
{
@@ -126,7 +126,7 @@ private Q_SLOTS:
int enumVal = 0;
mo->invokeMethod(rep.data(), "testEnumParamsInSlots",
- QGenericArgument("Enum1", &enumVal),
+ QGenericArgument("MyInterfaceReplica::Enum1", &enumVal),
Q_ARG(bool, true), Q_ARG(int, 1234));
int enumIdx = mo->indexOfProperty("enum1");
diff --git a/tests/auto/proxy_multiprocess/client/main.cpp b/tests/auto/proxy_multiprocess/client/main.cpp
index f37821f..7657464 100644
--- a/tests/auto/proxy_multiprocess/client/main.cpp
+++ b/tests/auto/proxy_multiprocess/client/main.cpp
@@ -69,14 +69,26 @@ private Q_SLOTS:
QCOMPARE(m_rep->variant(), QVariant());
}
+ QPoint p(1, 2);
+ auto enumReply = m_rep->enumSlot(p, ParentClassReplica::bar);
+ QVERIFY(enumReply.waitForFinished());
+ QCOMPARE(enumReply.error(), QRemoteObjectPendingCall::NoError);
+ QCOMPARE(enumReply.returnValue(), QVariant::fromValue(ParentClassReplica::foobar));
+
qDebug() << "Verified expected initial states, sending start.";
+ QSignalSpy enumSpy(m_rep.data(), &ParentClassReplica::enum2);
+ QSignalSpy advanceSpy(m_rep.data(), SIGNAL(advance()));
auto reply = m_rep->start();
QVERIFY(reply.waitForFinished());
QVERIFY(reply.error() == QRemoteObjectPendingCall::NoError);
QCOMPARE(reply.returnValue(), QVariant::fromValue(true));
+ QVERIFY(enumSpy.wait());
+ QCOMPARE(enumSpy.count(), 1);
+ const auto arguments = enumSpy.takeFirst();
+ QCOMPARE(arguments.at(0), QVariant::fromValue(ParentClassReplica::foo));
+ QCOMPARE(arguments.at(1), QVariant::fromValue(ParentClassReplica::bar));
- QSignalSpy advanceSpy(m_rep.data(), SIGNAL(advance()));
- QVERIFY(advanceSpy.wait());
+ QVERIFY(advanceSpy.count() || advanceSpy.wait());
QVERIFY(m_rep->subClass() != nullptr);
QCOMPARE(m_rep->subClass()->myPOD(), updatedValue);
QCOMPARE(m_rep->subClass()->i(), updatedI);
diff --git a/tests/auto/proxy_multiprocess/server/main.cpp b/tests/auto/proxy_multiprocess/server/main.cpp
index 2e6895b..27d4336 100644
--- a/tests/auto/proxy_multiprocess/server/main.cpp
+++ b/tests/auto/proxy_multiprocess/server/main.cpp
@@ -83,6 +83,7 @@ private Q_SLOTS:
parent.setTracks(&model);
parent.setMyEnum(ParentClassSource::foobar);
parent.setVariant(QVariant::fromValue(podValue));
+ emit parent.enum2(ParentClassSource::foo, ParentClassSource::bar);
emit parent.advance();
diff --git a/tests/auto/proxy_multiprocess/server/mytestserver.cpp b/tests/auto/proxy_multiprocess/server/mytestserver.cpp
index b0c75ab..8b15e4d 100644
--- a/tests/auto/proxy_multiprocess/server/mytestserver.cpp
+++ b/tests/auto/proxy_multiprocess/server/mytestserver.cpp
@@ -29,7 +29,6 @@
#include <qdebug.h>
#include "mytestserver.h"
-#include "rep_subclass_source.h"
MyTestServer::MyTestServer(QObject *parent)
: ParentClassSimpleSource(parent)
@@ -53,3 +52,10 @@ bool MyTestServer::quit()
emit quitApp();
return true;
}
+
+ParentClassSource::MyEnum MyTestServer::enumSlot(QPoint p, MyEnum myEnum)
+{
+ Q_UNUSED(p)
+ Q_UNUSED(myEnum)
+ return ParentClassSource::foobar;
+}
diff --git a/tests/auto/proxy_multiprocess/server/mytestserver.h b/tests/auto/proxy_multiprocess/server/mytestserver.h
index df044c1..22fce15 100644
--- a/tests/auto/proxy_multiprocess/server/mytestserver.h
+++ b/tests/auto/proxy_multiprocess/server/mytestserver.h
@@ -47,6 +47,7 @@ public:
public Q_SLOTS:
bool start() override;
bool quit() override;
+ MyEnum enumSlot(QPoint p, MyEnum myEnum) override;
Q_SIGNALS:
void quitApp();
diff --git a/tests/auto/proxy_multiprocess/subclass.rep b/tests/auto/proxy_multiprocess/subclass.rep
index 7055944..41377d0 100644
--- a/tests/auto/proxy_multiprocess/subclass.rep
+++ b/tests/auto/proxy_multiprocess/subclass.rep
@@ -1,3 +1,5 @@
+#include <QPoint>
+
POD MyPOD(int i, float f, QString s)
POD VariantPOD(int i, int j)
@@ -9,17 +11,16 @@ class SubClass
class ParentClass
{
- // We need several Enums to test dynamic registration
- ENUM MyEnumProp {foo=1, bar=3, foobar=6}
- ENUM MyEnumSignal {a=1, b, c}
+ ENUM MyEnum {foo=1, bar=3, foobar=6}
PROP(bool started = false)
- PROP(MyEnumProp myEnum=foo)
+ PROP(MyEnum myEnum=foo)
PROP(QVariant variant)
SLOT(bool start())
SLOT(bool quit())
SIGNAL(advance())
- SIGNAL(enum2(MyEnumSignal myEnumSignal, MyEnumSignal sig2))
+ SIGNAL(enum2(MyEnum myEnum1, MyEnum myEnum2))
+ SLOT(MyEnum enumSlot(QPoint point, MyEnum myEnum))
CLASS subClass(SubClass)
MODEL tracks(display)