summaryrefslogtreecommitdiffstats
path: root/tests/auto/qcoreapplication
diff options
context:
space:
mode:
authorBenjamin Poulain <benjamin.poulain@nokia.com>2009-09-21 11:58:21 +0200
committerBenjamin Poulain <benjamin.poulain@nokia.com>2009-09-21 12:07:34 +0200
commitb0016ea9a6b225757e3ee06b50e8f7d05463ddf7 (patch)
tree7a4f640566155323bf900cc5fa7bb9fb2e93260a /tests/auto/qcoreapplication
parent74bd11b55388ca6a8e5cfdbdcfb044bb538fafa0 (diff)
On Mac, the posted events are processed on the first time in the loop
On Mac OS X, we use a custom source for posted events. The first time the event loop is entered, the custom source is added to the native event dispatcher but the events are not processed. In Qt, we expect those events to be processed. To work around the problem, a new observer is added to the event loop. This observer is only triggered the first time the event loop is entered. When the observer is triggered, the posted events are sent. Task-number: QTBUG-4521 Reviewed-by: Richard Moe Gustavsen Reviewed-by: João Abecasis
Diffstat (limited to 'tests/auto/qcoreapplication')
-rw-r--r--tests/auto/qcoreapplication/tst_qcoreapplication.cpp45
1 files changed, 32 insertions, 13 deletions
diff --git a/tests/auto/qcoreapplication/tst_qcoreapplication.cpp b/tests/auto/qcoreapplication/tst_qcoreapplication.cpp
index 9ddd54ae70..4b38044e84 100644
--- a/tests/auto/qcoreapplication/tst_qcoreapplication.cpp
+++ b/tests/auto/qcoreapplication/tst_qcoreapplication.cpp
@@ -47,6 +47,7 @@ class tst_QCoreApplication: public QObject
{
Q_OBJECT
private slots:
+ void sendEventsOnProcessEvents(); // this must be the first test
void getSetCheck();
void qAppName();
void argc();
@@ -59,6 +60,35 @@ private slots:
void globalPostedEventsCount();
};
+class EventSpy : public QObject
+{
+ Q_OBJECT
+
+public:
+ QList<int> recordedEvents;
+ bool eventFilter(QObject *, QEvent *event)
+ {
+ recordedEvents.append(event->type());
+ return false;
+ }
+};
+
+void tst_QCoreApplication::sendEventsOnProcessEvents()
+{
+ int argc = 1;
+ char *argv[] = { "tst_qcoreapplication" };
+ QCoreApplication app(argc, argv);
+
+ EventSpy spy;
+ app.installEventFilter(&spy);
+
+ QCoreApplication::postEvent(&app, new QEvent(QEvent::Type(QEvent::User + 1)));
+ QCoreApplication::processEvents();
+ QList<int> expected;
+ expected << QEvent::User + 1;
+ QCOMPARE(expected, spy.recordedEvents);
+}
+
void tst_QCoreApplication::getSetCheck()
{
// do not crash
@@ -114,19 +144,6 @@ void tst_QCoreApplication::argc()
}
}
-class EventSpy : public QObject
-{
- Q_OBJECT
-
-public:
- QList<int> recordedEvents;
- bool eventFilter(QObject *, QEvent *event)
- {
- recordedEvents.append(event->type());
- return false;
- }
-};
-
class EventGenerator : public QObject
{
Q_OBJECT
@@ -394,6 +411,8 @@ public:
}
case QEvent::User + 1:
break;
+ default:
+ break;
}
return QObject::event(event);
}