1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
// Copyright (C) 2019 Ford Motor Company
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "mytestserver.h"
#include "rep_subclass_source.h"
#include "../shared.h"
#include <QCoreApplication>
#include <QtTest/QtTest>
#include "../../../shared/testutils.h"
static QMap<int, MyPOD> int_map{{1, initialValue},
{16, initialValue}};
static MyTestServer::ActivePositions flags1 = MyTestServer::Position::position1;
static MyTestServer::ActivePositions flags2 = MyTestServer::Position::position2
| MyTestServer::Position::position3;
static QMap<MyTestServer::ActivePositions, MyPOD> my_map{{flags1, initialValue},
{flags2, initialValue}};
static QHash<NS2::NamespaceEnum, MyPOD> my_hash{{NS2::NamespaceEnum::Alpha, initialValue},
{NS2::NamespaceEnum::Charlie, initialValue}};
class tst_Server_Process : public QObject
{
Q_OBJECT
private Q_SLOTS:
void testRun()
{
const auto objectMode = qEnvironmentVariable("ObjectMode");
bool templated = qEnvironmentVariableIsSet("TEMPLATED_REMOTING");
qDebug() << "Starting tests:" << objectMode << "templated =" << templated;
QRemoteObjectRegistryHost srcNode(QUrl(QStringLiteral(LOCAL_SOCKET ":testRegistry")));
MyTestServer parent;
SubClassSimpleSource subclass;
subclass.setMyPOD(initialValue);
subclass.setI(initialI);
QStringListModel model;
model.setStringList(QStringList() << "Track1" << "Track2" << "Track3");
if (objectMode == QLatin1String("ObjectPointer")) {
parent.setSubClass(&subclass);
parent.setTracks(&model);
parent.setMyEnum(ParentClassSource::bar);
parent.setDate(Qt::RFC2822Date);
parent.setNsEnum(NS::Bravo);
parent.setNs2Enum(NS2::NamespaceEnum::Bravo);
parent.setVariant(QVariant::fromValue(42.0f));
parent.setSimpleList(QList<QString>() << "one" << "two");
parent.setPodList(QList<MyPOD>() << initialValue << initialValue);
parent.setIntMap(int_map);
parent.setEnumMap(my_map);
parent.setPodHash(my_hash);
}
if (templated)
srcNode.enableRemoting<ParentClassSourceAPI>(&parent);
else
srcNode.enableRemoting(&parent);
qDebug() << "Waiting for incoming connections";
QSignalSpy waitForStartedSpy(&parent, &MyTestServer::startedChanged);
QVERIFY(waitForStartedSpy.isValid());
QVERIFY(waitForStartedSpy.wait());
QCOMPARE(waitForStartedSpy.value(0).value(0).toBool(), true);
// wait for delivery of events
QTest::qWait(200);
//Change SubClass and make sure change propagates
SubClassSimpleSource updatedSubclass;
updatedSubclass.setMyPOD(updatedValue);
updatedSubclass.setI(updatedI);
parent.setSubClass(&updatedSubclass);
if (objectMode == QLatin1String("NullPointer"))
parent.setTracks(&model);
parent.setMyEnum(ParentClassSource::foobar);
parent.setDate(Qt::ISODateWithMs);
parent.setNsEnum(NS::Charlie);
parent.setNs2Enum(NS2::NamespaceEnum::Charlie);
parent.setVariant(QVariant::fromValue(podValue));
emit parent.enum2(ParentClassSource::foo, ParentClassSource::bar);
emit parent.advance();
// wait for quit
bool quit = false;
connect(&parent, &MyTestServer::quitApp, this, [&quit] { quit = true; });
QTRY_VERIFY_WITH_TIMEOUT(quit, 5000);
// wait for delivery of events
QTest::qWait(200);
qDebug() << "Done. Shutting down.";
}
};
QTEST_MAIN(tst_Server_Process)
#include "main.moc"
|