summaryrefslogtreecommitdiffstats
path: root/src/testlib/qtestlog.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@digia.com>2013-11-12 15:03:54 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-11-17 19:10:22 +0100
commit943ae8bb701a8187d295b747ba82025c55ca9add (patch)
treec851d2d4d82d53a5df7f32a175996d425821cc17 /src/testlib/qtestlog.cpp
parent331bc16afd23414493b842819e0b747e8f364243 (diff)
Add overload of QTest::ignoreMessage() taking a QRegularExpression.
Make it possible to match messages by a pattern. Change-Id: I713312e86db5471755459f1ecc43e8f1ac7a95fb Reviewed-by: Jason McDonald <macadder1@gmail.com>
Diffstat (limited to 'src/testlib/qtestlog.cpp')
-rw-r--r--src/testlib/qtestlog.cpp59
1 files changed, 42 insertions, 17 deletions
diff --git a/src/testlib/qtestlog.cpp b/src/testlib/qtestlog.cpp
index 5b6cbe658c..d0cc3895c3 100644
--- a/src/testlib/qtestlog.cpp
+++ b/src/testlib/qtestlog.cpp
@@ -49,6 +49,8 @@
#include <QtTest/private/qxmltestlogger_p.h>
#include <QtCore/qatomic.h>
#include <QtCore/qbytearray.h>
+#include <QtCore/QVariant>
+#include <QtCore/QRegularExpression>
#include <stdlib.h>
#include <string.h>
@@ -84,11 +86,8 @@ namespace QTest {
struct IgnoreResultList
{
- inline IgnoreResultList(QtMsgType tp, const char *message)
- : type(tp), next(0)
- { msg = qstrdup(message); }
- inline ~IgnoreResultList()
- { delete [] msg; }
+ inline IgnoreResultList(QtMsgType tp, const QVariant &patternIn)
+ : type(tp), pattern(patternIn), next(0) {}
static inline void clearList(IgnoreResultList *&list)
{
@@ -99,8 +98,29 @@ namespace QTest {
}
}
+ static void append(IgnoreResultList *&list, QtMsgType type, const QVariant &patternIn)
+ {
+ QTest::IgnoreResultList *item = new QTest::IgnoreResultList(type, patternIn);
+
+ if (!list) {
+ list = item;
+ return;
+ }
+ IgnoreResultList *last = list;
+ for ( ; last->next; last = last->next) ;
+ last->next = item;
+ }
+
+ inline bool matches(QtMsgType tp, const QString &message) const
+ {
+ return tp == type
+ && (pattern.type() == QVariant::String ?
+ pattern.toString() == message :
+ pattern.toRegularExpression().match(message).hasMatch());
+ }
+
QtMsgType type;
- char *msg;
+ QVariant pattern;
IgnoreResultList *next;
};
@@ -208,10 +228,13 @@ namespace QTest {
static bool handleIgnoredMessage(QtMsgType type, const char *msg)
{
+ if (!ignoreResultList)
+ return false;
+ const QString message = QString::fromLocal8Bit(msg);
IgnoreResultList *last = 0;
IgnoreResultList *list = ignoreResultList;
while (list) {
- if (list->type == type && strcmp(msg, list->msg) == 0) {
+ if (list->matches(type, message)) {
// remove the item from the list
if (last)
last->next = list->next;
@@ -316,7 +339,11 @@ void QTestLog::printUnhandledIgnoreMessages()
char msg[1024];
QTest::IgnoreResultList *list = QTest::ignoreResultList;
while (list) {
- qsnprintf(msg, 1024, "Did not receive message: \"%s\"", list->msg);
+ if (list->pattern.type() == QVariant::String) {
+ qsnprintf(msg, 1024, "Did not receive message: \"%s\"", qPrintable(list->pattern.toString()));
+ } else {
+ qsnprintf(msg, 1024, "Did not receive any message matching: \"%s\"", qPrintable(list->pattern.toRegularExpression().pattern()));
+ }
QTest::TestLoggers::addMessage(QAbstractTestLogger::Info, msg);
list = list->next;
@@ -462,16 +489,14 @@ void QTestLog::ignoreMessage(QtMsgType type, const char *msg)
{
QTEST_ASSERT(msg);
- QTest::IgnoreResultList *item = new QTest::IgnoreResultList(type, msg);
+ QTest::IgnoreResultList::append(QTest::ignoreResultList, type, QString::fromLocal8Bit(msg));
+}
- QTest::IgnoreResultList *list = QTest::ignoreResultList;
- if (!list) {
- QTest::ignoreResultList = item;
- return;
- }
- while (list->next)
- list = list->next;
- list->next = item;
+void QTestLog::ignoreMessage(QtMsgType type, const QRegularExpression &expression)
+{
+ QTEST_ASSERT(expression.isValid());
+
+ QTest::IgnoreResultList::append(QTest::ignoreResultList, type, QVariant(expression));
}
void QTestLog::setMaxWarnings(int m)