summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason McDonald <jason.mcdonald@nokia.com>2011-12-12 11:46:45 +1000
committerQt by Nokia <qt-info@nokia.com>2011-12-12 05:01:00 +0100
commitc5ee721795178ce38c61daf0f8bec0e762bdc3d7 (patch)
tree2cbdda475d4854763e3d4967a721ad4b239761ad
parent4c1f5edda6f6b5318a2564cba15551f8108ad264 (diff)
Filter unprintable chars out of all test output.
Previously, unprintable characters were filtered out of test output while the output strings were being formatted by either qt_snprintf() or qt_asprintf(). Any strings not formatted by one of those functions weren't filtered at all, and any strings passed more than once would be filtered more than once. This commit separates the filtering of output strings from their formatting, leaving the filtering until just before the strings are written to the output stream. For now, the filtering is done by a protected method of QAbstractTestLogger, but this could easily be changed to a virtual method in future to allow different filtering for loggers with different output character sets. Change-Id: Ia4bb49cd10d37c84af75d2cf58325d27f0e16d99 Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
-rw-r--r--src/testlib/qabstracttestlogger.cpp20
-rw-r--r--src/testlib/qabstracttestlogger_p.h1
-rw-r--r--src/testlib/qtestcase.cpp12
3 files changed, 18 insertions, 15 deletions
diff --git a/src/testlib/qabstracttestlogger.cpp b/src/testlib/qabstracttestlogger.cpp
index f7d8842c4c..9ac1de9909 100644
--- a/src/testlib/qabstracttestlogger.cpp
+++ b/src/testlib/qabstracttestlogger.cpp
@@ -80,12 +80,28 @@ QAbstractTestLogger::~QAbstractTestLogger()
stream = 0;
}
+void QAbstractTestLogger::filterUnprintable(char *str) const
+{
+ char *idx = str;
+ while (*idx) {
+ if (((*idx < 0x20 && *idx != '\n' && *idx != '\t') || *idx > 0x7e))
+ *idx = '?';
+ ++idx;
+ }
+}
+
void QAbstractTestLogger::outputString(const char *msg)
{
QTEST_ASSERT(stream);
- ::fputs(msg, stream);
+ char *filtered = new char[strlen(msg) + 1];
+ strcpy(filtered, msg);
+ filterUnprintable(filtered);
+
+ ::fputs(filtered, stream);
::fflush(stream);
+
+ delete [] filtered;
}
void QAbstractTestLogger::startLogging()
@@ -135,8 +151,6 @@ int qt_asprintf(QTestCharBuffer *str, const char *format, ...)
break; // out of memory - take what we have
}
- filter_unprintable(str->data());
-
return res;
}
diff --git a/src/testlib/qabstracttestlogger_p.h b/src/testlib/qabstracttestlogger_p.h
index 3e11863012..a217b66df1 100644
--- a/src/testlib/qabstracttestlogger_p.h
+++ b/src/testlib/qabstracttestlogger_p.h
@@ -99,6 +99,7 @@ public:
void outputString(const char *msg);
protected:
+ void filterUnprintable(char *str) const;
FILE *stream;
};
diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp
index b37dbc0203..438b85d91b 100644
--- a/src/testlib/qtestcase.cpp
+++ b/src/testlib/qtestcase.cpp
@@ -980,16 +980,6 @@ namespace QTest
static bool noCrashHandler = false;
#endif
-void filter_unprintable(char *str)
-{
- char *idx = str;
- while (*idx) {
- if (((*idx < 0x20 && *idx != '\n' && *idx != '\t') || *idx > 0x7e))
- *idx = '?';
- ++idx;
- }
-}
-
/*! \internal
*/
int qt_snprintf(char *str, int size, const char *format, ...)
@@ -1002,8 +992,6 @@ int qt_snprintf(char *str, int size, const char *format, ...)
va_end(ap);
str[size - 1] = '\0';
- filter_unprintable(str);
-
return res;
}