summaryrefslogtreecommitdiffstats
path: root/src/testlib/qtestcase.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/testlib/qtestcase.h')
-rw-r--r--src/testlib/qtestcase.h42
1 files changed, 26 insertions, 16 deletions
diff --git a/src/testlib/qtestcase.h b/src/testlib/qtestcase.h
index f95a155ed9..05da33c400 100644
--- a/src/testlib/qtestcase.h
+++ b/src/testlib/qtestcase.h
@@ -129,34 +129,44 @@ do {\
#endif // !QT_NO_EXCEPTIONS
-// Will try to wait for the expression to become true while allowing event processing
-#define QTRY_VERIFY_WITH_TIMEOUT(__expr, __timeout) \
-do { \
- const int __step = 50; \
- const int __timeoutValue = __timeout; \
+#define QTRY_LOOP_IMPL(__expr, __timeoutValue, __step) \
if (!(__expr)) { \
QTest::qWait(0); \
} \
- for (int __i = 0; __i < __timeoutValue && !(__expr); __i+=__step) { \
+ int __i = 0; \
+ for (; __i < __timeoutValue && !(__expr); __i += __step) { \
QTest::qWait(__step); \
- } \
+ }
+
+#define QTRY_TIMEOUT_DEBUG_IMPL(__expr, __timeoutValue, __step)\
+ if (!(__expr)) { \
+ QTRY_LOOP_IMPL(__expr, (2 * __timeoutValue), __step);\
+ if (__expr) { \
+ QString msg = QString::fromUtf8("QTestLib: This test case check (\"%1\") failed because the requested timeout (%2 ms) was too short, %3 ms would have been sufficient this time."); \
+ msg = msg.arg(QString::fromUtf8(#__expr)).arg(__timeoutValue).arg(__timeoutValue + __i); \
+ QFAIL(qPrintable(msg)); \
+ } \
+ }
+
+#define QTRY_IMPL(__expr, __timeout)\
+ const int __step = 50; \
+ const int __timeoutValue = __timeout; \
+ QTRY_LOOP_IMPL(__expr, __timeoutValue, __step); \
+ QTRY_TIMEOUT_DEBUG_IMPL(__expr, __timeoutValue, __step)\
+
+// Will try to wait for the expression to become true while allowing event processing
+#define QTRY_VERIFY_WITH_TIMEOUT(__expr, __timeout) \
+do { \
+ QTRY_IMPL(__expr, __timeout);\
QVERIFY(__expr); \
} while (0)
#define QTRY_VERIFY(__expr) QTRY_VERIFY_WITH_TIMEOUT(__expr, 5000)
// Will try to wait for the comparison to become successful while allowing event processing
-
#define QTRY_COMPARE_WITH_TIMEOUT(__expr, __expected, __timeout) \
do { \
- const int __step = 50; \
- const int __timeoutValue = __timeout; \
- if ((__expr) != (__expected)) { \
- QTest::qWait(0); \
- } \
- for (int __i = 0; __i < __timeoutValue && ((__expr) != (__expected)); __i+=__step) { \
- QTest::qWait(__step); \
- } \
+ QTRY_IMPL(((__expr) == (__expected)), __timeout);\
QCOMPARE(__expr, __expected); \
} while (0)