summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2014-03-04 15:20:07 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-29 12:40:05 +0100
commitde10bf4955fda698e87bbbfee4461554a2fa876a (patch)
treeace59813e509f69cd925acd27c63deb98a585b38
parentecdeaa436929e7fe8ebf6063bfb83ba2c4e9383a (diff)
QEvent: document and check when registerEventTypes() returns -1
In tst_QEvent, add a check that exhausts the available event type ids and verifies that registerEventTypes() returns -1 in that case, as documented. I haven't found a way to test the other case in which -1 is returned. Since this test operates on a global write-only registry the new test case needs to keep track of whether the earlier test cases have run successfully. If they didn't, skip this test case. Change-Id: I68ea9d17d10dcec22175994aba269dd09c9adf43 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r--src/corelib/kernel/qcoreevent.cpp3
-rw-r--r--tests/auto/gui/kernel/qevent/tst_qevent.cpp26
2 files changed, 29 insertions, 0 deletions
diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp
index 62c76c1a40..edf262b8af 100644
--- a/src/corelib/kernel/qcoreevent.cpp
+++ b/src/corelib/kernel/qcoreevent.cpp
@@ -406,6 +406,9 @@ Q_GLOBAL_STATIC(QEventUserEventRegistration, userEventRegistrationHelper)
between QEvent::User and QEvent::MaxUser that has not yet been
registered. The \a hint is ignored if its value is not between
QEvent::User and QEvent::MaxUser.
+
+ Returns -1 if all available values are already taken or the
+ program is shutting down.
*/
int QEvent::registerEventType(int hint)
{
diff --git a/tests/auto/gui/kernel/qevent/tst_qevent.cpp b/tests/auto/gui/kernel/qevent/tst_qevent.cpp
index 46025e444d..73f9486752 100644
--- a/tests/auto/gui/kernel/qevent/tst_qevent.cpp
+++ b/tests/auto/gui/kernel/qevent/tst_qevent.cpp
@@ -55,9 +55,14 @@ public:
private slots:
void registerEventType_data();
void registerEventType();
+ void exhaustEventTypeRegistration(); // keep behind registerEventType() test
+
+private:
+ bool registerEventTypeSucceeded; // track success of registerEventType for use by exhaustEventTypeRegistration()
};
tst_QEvent::tst_QEvent()
+ : registerEventTypeSucceeded(true)
{ }
tst_QEvent::~tst_QEvent()
@@ -82,9 +87,30 @@ void tst_QEvent::registerEventType_data()
void tst_QEvent::registerEventType()
{
+ const bool oldRegisterEventTypeSucceeded = registerEventTypeSucceeded;
+ registerEventTypeSucceeded = false;
QFETCH(int, hint);
QFETCH(int, expected);
QCOMPARE(QEvent::registerEventType(hint), expected);
+ registerEventTypeSucceeded = oldRegisterEventTypeSucceeded;
+}
+
+void tst_QEvent::exhaustEventTypeRegistration()
+{
+ if (!registerEventTypeSucceeded)
+ QSKIP("requires the previous test (registerEventType) to have finished successfully");
+
+ int i = QEvent::User;
+ int result;
+ while ((result = QEvent::registerEventType(i)) == i)
+ ++i;
+ QCOMPARE(i, int(QEvent::User + 1000));
+ QCOMPARE(result, int(QEvent::MaxUser - 4));
+ i = QEvent::User + 1001;
+ while ((result = QEvent::registerEventType(i)) == i)
+ ++i;
+ QCOMPARE(result, -1);
+ QCOMPARE(i, int(QEvent::MaxUser - 4));
}
QTEST_MAIN(tst_QEvent)