LCOV - code coverage report
Current view: top level - home/aheinecke/dev/main/qt5/include/QtTest - qtesteventloop.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 21 23 91.3 %
Date: 2018-11-14 16:53:58 Functions: 4 5 80.0 %

          Line data    Source code
       1             : /****************************************************************************
       2             : **
       3             : ** Copyright (C) 2016 The Qt Company Ltd.
       4             : ** Contact: https://www.qt.io/licensing/
       5             : **
       6             : ** This file is part of the QtTest module of the Qt Toolkit.
       7             : **
       8             : ** $QT_BEGIN_LICENSE:LGPL$
       9             : ** Commercial License Usage
      10             : ** Licensees holding valid commercial Qt licenses may use this file in
      11             : ** accordance with the commercial license agreement provided with the
      12             : ** Software or, alternatively, in accordance with the terms contained in
      13             : ** a written agreement between you and The Qt Company. For licensing terms
      14             : ** and conditions see https://www.qt.io/terms-conditions. For further
      15             : ** information use the contact form at https://www.qt.io/contact-us.
      16             : **
      17             : ** GNU Lesser General Public License Usage
      18             : ** Alternatively, this file may be used under the terms of the GNU Lesser
      19             : ** General Public License version 3 as published by the Free Software
      20             : ** Foundation and appearing in the file LICENSE.LGPL3 included in the
      21             : ** packaging of this file. Please review the following information to
      22             : ** ensure the GNU Lesser General Public License version 3 requirements
      23             : ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
      24             : **
      25             : ** GNU General Public License Usage
      26             : ** Alternatively, this file may be used under the terms of the GNU
      27             : ** General Public License version 2.0 or (at your option) the GNU General
      28             : ** Public license version 3 or any later version approved by the KDE Free
      29             : ** Qt Foundation. The licenses are as published by the Free Software
      30             : ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
      31             : ** included in the packaging of this file. Please review the following
      32             : ** information to ensure the GNU General Public License requirements will
      33             : ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
      34             : ** https://www.gnu.org/licenses/gpl-3.0.html.
      35             : **
      36             : ** $QT_END_LICENSE$
      37             : **
      38             : ****************************************************************************/
      39             : 
      40             : #ifndef QTESTEVENTLOOP_H
      41             : #define QTESTEVENTLOOP_H
      42             : 
      43             : #include <QtTest/qtest_global.h>
      44             : 
      45             : #include <QtCore/qcoreapplication.h>
      46             : #include <QtCore/qeventloop.h>
      47             : #include <QtCore/qobject.h>
      48             : #include <QtCore/qpointer.h>
      49             : #include <QtCore/qthread.h>
      50             : 
      51             : QT_BEGIN_NAMESPACE
      52             : 
      53             : 
      54           6 : class Q_TESTLIB_EXPORT QTestEventLoop : public QObject
      55             : {
      56             :     Q_OBJECT
      57             : 
      58             : public:
      59           6 :     inline QTestEventLoop(QObject *aParent = Q_NULLPTR)
      60           6 :         : QObject(aParent), inLoop(false), _timeout(false), timerId(-1), loop(Q_NULLPTR) {}
      61             : 
      62             :     inline void enterLoopMSecs(int ms);
      63             :     inline void enterLoop(int secs) { enterLoopMSecs(secs * 1000); }
      64             : 
      65             :     inline void changeInterval(int secs)
      66             :     { killTimer(timerId); timerId = startTimer(secs * 1000); }
      67             : 
      68             :     inline bool timeout() const
      69             :     { return _timeout; }
      70             : 
      71             :     inline static QTestEventLoop &instance()
      72             :     {
      73             :         static QPointer<QTestEventLoop> testLoop;
      74             :         if (testLoop.isNull())
      75             :             testLoop = new QTestEventLoop(QCoreApplication::instance());
      76             :         return *static_cast<QTestEventLoop *>(testLoop);
      77             :     }
      78             : 
      79             : public Q_SLOTS:
      80             :     inline void exitLoop();
      81             : 
      82             : protected:
      83             :     inline void timerEvent(QTimerEvent *e) override;
      84             : 
      85             : private:
      86             :     bool inLoop;
      87             :     bool _timeout;
      88             :     int timerId;
      89             : 
      90             :     QEventLoop *loop;
      91             : };
      92             : 
      93           7 : inline void QTestEventLoop::enterLoopMSecs(int ms)
      94             : {
      95           7 :     Q_ASSERT(!loop);
      96             : 
      97          14 :     QEventLoop l;
      98             : 
      99           7 :     inLoop = true;
     100           7 :     _timeout = false;
     101             : 
     102           7 :     timerId = startTimer(ms);
     103             : 
     104           7 :     loop = &l;
     105           7 :     l.exec();
     106           7 :     loop = Q_NULLPTR;
     107           7 : }
     108             : 
     109           7 : inline void QTestEventLoop::exitLoop()
     110             : {
     111           7 :     if (thread() != QThread::currentThread())
     112             :     {
     113           0 :         QMetaObject::invokeMethod(this, "exitLoop", Qt::QueuedConnection);
     114           0 :         return;
     115             :     }
     116             : 
     117           7 :     if (timerId != -1)
     118           7 :         killTimer(timerId);
     119           7 :     timerId = -1;
     120             : 
     121           7 :     if (loop)
     122           7 :         loop->exit();
     123             : 
     124           7 :     inLoop = false;
     125             : }
     126             : 
     127             : inline void QTestEventLoop::timerEvent(QTimerEvent *e)
     128             : {
     129             :     if (e->timerId() != timerId)
     130             :         return;
     131             :     _timeout = true;
     132             :     exitLoop();
     133             : }
     134             : 
     135             : QT_END_NAMESPACE
     136             : 
     137             : #endif

Generated by: LCOV version 1.13