LCOV - code coverage report
Current view: top level - usr/include/x86_64-linux-gnu/qt5/QtTest - qtesteventloop.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 21 26 80.8 %
Date: 2016-12-01 18:45:36 Functions: 4 6 66.7 %

          Line data    Source code
       1             : /****************************************************************************
       2             : **
       3             : ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
       4             : ** Contact: http://www.qt-project.org/legal
       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 Digia.  For licensing terms and
      14             : ** conditions see http://qt.digia.com/licensing.  For further information
      15             : ** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
      20             : ** Foundation and appearing in the file LICENSE.LGPL included in the
      21             : ** packaging of this file.  Please review the following information to
      22             : ** ensure the GNU Lesser General Public License version 2.1 requirements
      23             : ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
      24             : **
      25             : ** In addition, as a special exception, Digia gives you certain additional
      26             : ** rights.  These rights are described in the Digia Qt LGPL Exception
      27             : ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
      28             : **
      29             : ** GNU General Public License Usage
      30             : ** Alternatively, this file may be used under the terms of the GNU
      31             : ** General Public License version 3.0 as published by the Free Software
      32             : ** Foundation and appearing in the file LICENSE.GPL included in the
      33             : ** packaging of this file.  Please review the following information to
      34             : ** ensure the GNU General Public License version 3.0 requirements will be
      35             : ** met: http://www.gnu.org/copyleft/gpl.html.
      36             : **
      37             : **
      38             : ** $QT_END_LICENSE$
      39             : **
      40             : ****************************************************************************/
      41             : 
      42             : #ifndef QTESTEVENTLOOP_H
      43             : #define QTESTEVENTLOOP_H
      44             : 
      45             : #include <QtTest/qtest_global.h>
      46             : 
      47             : #include <QtCore/qcoreapplication.h>
      48             : #include <QtCore/qeventloop.h>
      49             : #include <QtCore/qobject.h>
      50             : #include <QtCore/qpointer.h>
      51             : 
      52             : QT_BEGIN_NAMESPACE
      53             : 
      54             : 
      55           4 : class Q_TESTLIB_EXPORT QTestEventLoop : public QObject
      56             : {
      57             :     Q_OBJECT
      58             : 
      59             : public:
      60           4 :     inline QTestEventLoop(QObject *aParent = 0)
      61           4 :         : QObject(aParent), inLoop(false), _timeout(false), timerId(-1), loop(0) {}
      62             : 
      63             :     inline void enterLoopMSecs(int ms);
      64             :     inline void enterLoop(int secs) { enterLoopMSecs(secs * 1000); }
      65             : 
      66             :     inline void changeInterval(int secs)
      67             :     { killTimer(timerId); timerId = startTimer(secs * 1000); }
      68             : 
      69             :     inline bool timeout() const
      70             :     { return _timeout; }
      71             : 
      72             :     inline static QTestEventLoop &instance()
      73             :     {
      74             :         static QPointer<QTestEventLoop> testLoop;
      75             :         if (testLoop.isNull())
      76             :             testLoop = new QTestEventLoop(QCoreApplication::instance());
      77             :         return *static_cast<QTestEventLoop *>(testLoop);
      78             :     }
      79             : 
      80             : public Q_SLOTS:
      81             :     inline void exitLoop();
      82             : 
      83             : protected:
      84             :     inline void timerEvent(QTimerEvent *e);
      85             : 
      86             : private:
      87             :     bool inLoop;
      88             :     bool _timeout;
      89             :     int timerId;
      90             : 
      91             :     QEventLoop *loop;
      92             : };
      93             : 
      94           5 : inline void QTestEventLoop::enterLoopMSecs(int ms)
      95             : {
      96           5 :     Q_ASSERT(!loop);
      97             : 
      98           5 :     QEventLoop l;
      99             : 
     100           5 :     inLoop = true;
     101           5 :     _timeout = false;
     102             : 
     103           5 :     timerId = startTimer(ms);
     104             : 
     105           5 :     loop = &l;
     106           5 :     l.exec();
     107           5 :     loop = 0;
     108           5 : }
     109             : 
     110           5 : inline void QTestEventLoop::exitLoop()
     111             : {
     112           5 :     if (timerId != -1)
     113           5 :         killTimer(timerId);
     114           5 :     timerId = -1;
     115             : 
     116           5 :     if (loop)
     117           5 :         loop->exit();
     118             : 
     119           5 :     inLoop = false;
     120           5 : }
     121             : 
     122           0 : inline void QTestEventLoop::timerEvent(QTimerEvent *e)
     123             : {
     124           0 :     if (e->timerId() != timerId)
     125           0 :         return;
     126           0 :     _timeout = true;
     127           0 :     exitLoop();
     128             : }
     129             : 
     130             : QT_END_NAMESPACE
     131             : 
     132             : #endif

Generated by: LCOV version 1.11