source: trunk/src/3rdparty/webkit/WebKit/qt/tests/util.h

Last change on this file was 846, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

  • Property svn:eol-style set to native
File size: 2.6 KB
Line 
1/*
2 Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 Boston, MA 02110-1301, USA.
18*/
19// Functions and macros that really need to be in QTestLib
20
21#include <QEventLoop>
22#include <QSignalSpy>
23#include <QTimer>
24
25#if !defined(TESTS_SOURCE_DIR)
26#define TESTS_SOURCE_DIR ""
27#endif
28
29/**
30 * Starts an event loop that runs until the given signal is received.
31 * Optionally the event loop
32 * can return earlier on a timeout.
33 *
34 * \return \p true if the requested signal was received
35 * \p false on timeout
36 */
37static bool waitForSignal(QObject* obj, const char* signal, int timeout = 10000)
38{
39 QEventLoop loop;
40 QObject::connect(obj, signal, &loop, SLOT(quit()));
41 QTimer timer;
42 QSignalSpy timeoutSpy(&timer, SIGNAL(timeout()));
43 if (timeout > 0) {
44 QObject::connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
45 timer.setSingleShot(true);
46 timer.start(timeout);
47 }
48 loop.exec();
49 return timeoutSpy.isEmpty();
50}
51
52// Will try to wait for the condition while allowing event processing
53#define QTRY_VERIFY(__expr) \
54 do { \
55 const int __step = 50; \
56 const int __timeout = 5000; \
57 if (!(__expr)) { \
58 QTest::qWait(0); \
59 } \
60 for (int __i = 0; __i < __timeout && !(__expr); __i+=__step) { \
61 QTest::qWait(__step); \
62 } \
63 QVERIFY(__expr); \
64 } while(0)
65
66// Will try to wait for the condition while allowing event processing
67#define QTRY_COMPARE(__expr, __expected) \
68 do { \
69 const int __step = 50; \
70 const int __timeout = 5000; \
71 if ((__expr) != (__expected)) { \
72 QTest::qWait(0); \
73 } \
74 for (int __i = 0; __i < __timeout && ((__expr) != (__expected)); __i+=__step) { \
75 QTest::qWait(__step); \
76 } \
77 QCOMPARE(__expr, __expected); \
78 } while(0)
Note: See TracBrowser for help on using the repository browser.