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
|
// Copyright (C) 2017 Ford Motor Company
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QString>
#include <QtTest>
#include "rep_class_merged.h"
#include "../../shared/testutils.h"
class SubClassReplicaTest : public QObject
{
Q_OBJECT
public:
SubClassReplicaTest();
private Q_SLOTS:
void basicFunctions();
void basicFunctions_data();
};
SubClassReplicaTest::SubClassReplicaTest()
{
}
void SubClassReplicaTest::basicFunctions_data()
{
QTest::addColumn<bool>("templated");
QTest::addColumn<bool>("nullobject");
QTest::newRow("non-templated pointer") << false << false;
QTest::newRow("templated pointer") << true << false;
QTest::newRow("non-templated nullptr") << false << true;
QTest::newRow("templated nullptr") << true << true;
}
void SubClassReplicaTest::basicFunctions()
{
QFETCH(bool, templated);
QFETCH(bool, nullobject);
QRemoteObjectRegistryHost host(QUrl(LOCAL_SOCKET ":test"));
SubClassSimpleSource subclass1, subclass2;
ParentClassSimpleSource parent;
parent.setSub1(&subclass1);
SubClassSimpleSource subclass3;
subclass3.setValue(4);
OtherParentClassSimpleSource otherParent;
otherParent.setSub1(&subclass3);
host.enableRemoting(&otherParent, "OtherParent1");
SubClassSimpleSource subclass4;
subclass4.setValue(15);
OtherParentClassSimpleSource otherParent2;
otherParent2.setSub1(&subclass4);
host.enableRemoting(&otherParent2, "OtherParent2");
if (nullobject)
parent.setSub2(nullptr);
else
parent.setSub2(&subclass2);
if (templated)
host.enableRemoting<ParentClassSourceAPI>(&parent);
else
host.enableRemoting(&parent);
QRemoteObjectNode client(QUrl(LOCAL_SOCKET ":test"));
const QScopedPointer<ParentClassReplica> replica(client.acquire<ParentClassReplica>());
QVERIFY(replica->waitForSource(1000));
auto sub1 = replica->sub1();
QSignalSpy spy(sub1, &SubClassReplica::valueChanged);
subclass1.setValue(10);
QVERIFY(spy.wait());
QCOMPARE(subclass1.value(), sub1->value());
if (nullobject) {
QCOMPARE(replica->sub2(), nullptr);
QCOMPARE(parent.sub2(), nullptr);
} else
QCOMPARE(subclass2.value(), replica->sub2()->value());
const QScopedPointer<OtherParentClassReplica> otherReplica(client.acquire<OtherParentClassReplica>("OtherParent1"));
QVERIFY(otherReplica->waitForSource(1000));
const QScopedPointer<OtherParentClassReplica> otherReplica2(client.acquire<OtherParentClassReplica>("OtherParent2"));
QVERIFY(otherReplica2->waitForSource(1000));
QCOMPARE(otherReplica->sub1()->value(), 4);
QCOMPARE(otherReplica2->sub1()->value(), 15);
otherReplica->sub1()->pushValue(19);
otherReplica2->sub1()->pushValue(24);
QTRY_COMPARE(subclass4.value(), 24);
QTRY_COMPARE(subclass3.value(), 19);
}
QTEST_MAIN(SubClassReplicaTest)
#include "tst_subclassreplicatest.moc"
|