13 #include <QDBusConnection>
24 using namespace QTest;
55 void CTestSharedState::initTestCase()
58 CTestFilter::registerMetadata();
61 void CTestSharedState::testPromise()
65 doAfter(promise.
future(),
nullptr, [&](
QFuture<int> future) { result = future.result(); });
67 bool ok =
qWaitFor([&] {
return result == 42; });
68 QVERIFY2(ok,
"future contains expected result");
71 void CTestSharedState::localScalar()
74 CTestScalarMutator mutator(
this);
75 CTestScalarJournal journal(
this);
76 CTestScalarObserver observer(
this);
77 mutator.initialize(&dataLink);
78 journal.initialize(&dataLink);
79 observer.initialize(&dataLink);
82 bool ok =
qWaitFor([&] {
return observer.value() == 42; });
83 QVERIFY2(ok,
"expected value received");
85 QVERIFY2(observer.value() == 42,
"still has expected value");
87 CTestScalarObserver observer2(
this);
88 observer2.initialize(&dataLink);
90 ok =
qWaitFor([&] {
return observer2.value() == 42; });
91 QVERIFY2(ok,
"new observer got existing value");
93 QVERIFY2(observer2.value() == 42,
"still has correct value");
96 void CTestSharedState::localList()
99 CTestListMutator mutator(
this);
100 CTestListJournal journal(
this);
101 CTestListObserver observer(
this);
102 mutator.initialize(&dataLink);
103 journal.initialize(&dataLink);
104 observer.initialize(&dataLink);
106 observer.setFilter({});
107 mutator.addElement(1);
109 QVERIFY2(ok,
"expected value received");
113 for (
int e = 2; e <= 6; ++e) { mutator.addElement(e); }
114 ok =
qWaitFor([&] {
return observer.allValues() ==
QList<int> { 1, 2, 3, 4, 5, 6 }; });
115 QVERIFY2(ok,
"expected value received");
117 observer.allValues() = {};
118 observer.setFilter({ 1 });
120 QVERIFY2(ok,
"expected value received");
132 qDebug() <<
"Server process exited" << (status ?
"abnormally" :
"normally")
133 <<
"with exit code" << code;
136 if (!m_process.waitForStarted()) { qDebug() <<
"Server failed to start"; }
141 m_process.disconnect();
143 m_process.waitForFinished();
150 void CTestSharedState::dbusScalar()
161 CTestScalarObserver observer(
this);
162 CTestScalarMutator mutator(
this);
163 observer.initialize(&dataLink);
164 mutator.initialize(&dataLink);
166 ok =
qWaitFor([&] {
return observer.value() == 42; });
167 QVERIFY2(ok,
"expected value received");
169 QVERIFY2(observer.value() == 42,
"still has expected value");
171 mutator.setValue(69);
172 ok =
qWaitFor([&] {
return observer.value() == 69; });
173 QVERIFY2(ok,
"expected value received");
175 QVERIFY2(observer.value() == 69,
"still has expected value");
178 void CTestSharedState::dbusList()
189 CTestListObserver observer(
this);
190 CTestListMutator mutator(
this);
191 observer.initialize(&dataLink);
192 mutator.initialize(&dataLink);
194 observer.setFilter({});
195 ok =
qWaitFor([&] {
return observer.allValues() ==
QList<int> { 1, 2, 3, 4, 5, 6 }; });
196 QVERIFY2(ok,
"expected value received");
198 QVERIFY2(observer.allValues() ==
QList<int>({ 1, 2, 3, 4, 5, 6 }),
"still has expected value");
200 observer.allValues() = {};
201 observer.setFilter({ 1 });
203 QVERIFY2(ok,
"expected value received");
205 mutator.addElement(7);
207 QVERIFY2(ok,
"expected value received");
209 QVERIFY2(observer.allValues() ==
QList<int>({ 1, 3, 5, 7 }),
"still has expected value");
216 #include "testsharedstate.moc"
DBus implementation classes tests.
A promise-based interface to QFuture, similar to std::promise for std::future.
QFuture< T > future()
Return a future that can be used to access the result.
void setResult(const T &value)
Set the result value that will be made available through the future.
A transport mechanism using signals and slots distributed by DBus.
void initializeRemote(const QDBusConnection &connection, const QString &service)
Initialize on client side.
A transport mechanism using signals and slots in the local process.
CDataLinkConnectionWatcher * watcher()
Get a connection status watcher.
@ Server
What server are you on?
#define SWIFT_SERVICENAME
Service name of DBus service.
Utilities for sharing state between multiple objects.
Free functions in swift::misc.
void registerMetadata()
Register all relevant metadata in Misc.
QString applicationDirPath()
bool isConnected() const const
QDBusConnection sessionBus()
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
void finished(int exitCode, QProcess::ExitStatus exitStatus)
QVERIFY2(condition, message)
bool qWaitFor(Functor predicate, QDeadlineTimer deadline)
SWIFTTEST_MAIN(MiscTest::CTestSharedState)
main