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
|
/* -*- C++ -*-
This file contains a testsuite for JobPointer behaviour in ThreadWeaver.
SPDX-FileCopyrightText: 2005-2013 Mirko Boehm <mirko@kde.org>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#include <QString>
#include <QTest>
#include <ThreadWeaver/Job>
#include <ThreadWeaver/JobPointer>
#include <ThreadWeaver/ThreadWeaver>
class NotifyOnDeletejob : public ThreadWeaver::Job
{
public:
explicit NotifyOnDeletejob(bool &exists)
: ThreadWeaver::Job()
, m_exists(exists)
{
exists = true;
}
~NotifyOnDeletejob() override
{
m_exists = false;
}
void run(ThreadWeaver::JobPointer, ThreadWeaver::Thread *) override
{
}
private:
bool &m_exists;
};
class LifecycleTests : public QObject
{
Q_OBJECT
public:
LifecycleTests();
private Q_SLOTS:
void testJobAutoDeletionBasics();
void testJobAutoDeletion();
};
LifecycleTests::LifecycleTests()
{
}
void LifecycleTests::testJobAutoDeletionBasics()
{
bool job1Exists = false;
bool job2Exists = false;
ThreadWeaver::JobPointer job2(new NotifyOnDeletejob(job2Exists));
Q_UNUSED(job2);
QCOMPARE(true, job2Exists);
{
ThreadWeaver::JobPointer job1(new NotifyOnDeletejob(job1Exists));
Q_UNUSED(job1);
QCOMPARE(job1Exists, true);
}
QCOMPARE(job1Exists, false);
QCOMPARE(job2Exists, true);
}
void LifecycleTests::testJobAutoDeletion()
{
bool job1Exists = false;
bool job2Exists = false;
{
ThreadWeaver::JobPointer job1(new NotifyOnDeletejob(job1Exists));
QCOMPARE(job1Exists, true);
int argc = 0;
QCoreApplication app(argc, (char **)nullptr);
Q_UNUSED(app);
QVERIFY(ThreadWeaver::Queue::instance());
ThreadWeaver::Queue::instance()->suspend();
ThreadWeaver::Queue::instance()->enqueue(job1);
ThreadWeaver::Queue::instance()->enqueue(ThreadWeaver::JobPointer(new NotifyOnDeletejob(job2Exists)));
QCOMPARE(job2Exists, true);
ThreadWeaver::Queue::instance()->resume();
ThreadWeaver::Queue::instance()->finish();
QVERIFY(ThreadWeaver::Queue::instance()->isIdle());
ThreadWeaver::Queue::instance()->suspend();
QCOMPARE(job2Exists, false);
QCOMPARE(job1Exists, true);
}
QCOMPARE(ThreadWeaver::Queue::instance(), nullptr);
QCOMPARE(job2Exists, false);
QCOMPARE(job1Exists, false);
}
QTEST_APPLESS_MAIN(LifecycleTests)
#include "LifecycleTests.moc"
|