From 8cf7cf0cb96188b42e10958711f8c3aa016396c3 Mon Sep 17 00:00:00 2001 From: David Faure Date: Fri, 27 Jul 2012 13:53:16 +0200 Subject: QDebug: Add getter/setter for auto-insert-spaces. This is useful for inserting a string without space-handling, given that dbg.nospace() followed by dbg.space() inserts a space. It's also useful for QDebug operators for custom types, so that they can disable space handling and then restore to whatever it was before (rather than forcing it to space() mode). Change-Id: I9d72e9ffbcbc581ed093168752c29af924405b33 Reviewed-by: Thiago Macieira --- src/corelib/io/qdebug.cpp | 18 ++++++++++++++++++ src/corelib/io/qdebug.h | 3 +++ tests/auto/corelib/io/qdebug/tst_qdebug.cpp | 21 +++++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/src/corelib/io/qdebug.cpp b/src/corelib/io/qdebug.cpp index 2b5dac8801..07f359672c 100644 --- a/src/corelib/io/qdebug.cpp +++ b/src/corelib/io/qdebug.cpp @@ -161,6 +161,24 @@ \sa space(), nospace() */ +/*! + \fn bool QDebug::autoInsertSpaces() + + Returns true if this QDebug instance will automatically insert spaces + between writes. + + \since 5.0 +*/ + +/*! + \fn void QDebug::setAutoInsertSpaces(bool b) + + Enables automatic insertion of spaces between writes if \a b is true; otherwise + automatic insertion of spaces is disabled. + + \since 5.0 +*/ + /*! \fn QDebug &QDebug::operator<<(QChar t) diff --git a/src/corelib/io/qdebug.h b/src/corelib/io/qdebug.h index 4d546a9ca1..8bc4128a95 100644 --- a/src/corelib/io/qdebug.h +++ b/src/corelib/io/qdebug.h @@ -97,6 +97,9 @@ public: inline QDebug &nospace() { stream->space = false; return *this; } inline QDebug &maybeSpace() { if (stream->space) stream->ts << ' '; return *this; } + bool autoInsertSpaces() const { return stream->space; } + void setAutoInsertSpaces(bool b) { stream->space = b; } + inline QDebug &operator<<(QChar t) { stream->ts << '\'' << t << '\''; return maybeSpace(); } inline QDebug &operator<<(bool t) { stream->ts << (t ? "true" : "false"); return maybeSpace(); } inline QDebug &operator<<(char t) { stream->ts << t; return maybeSpace(); } diff --git a/tests/auto/corelib/io/qdebug/tst_qdebug.cpp b/tests/auto/corelib/io/qdebug/tst_qdebug.cpp index 035c781e4a..3e3204a162 100644 --- a/tests/auto/corelib/io/qdebug/tst_qdebug.cpp +++ b/tests/auto/corelib/io/qdebug/tst_qdebug.cpp @@ -52,6 +52,7 @@ private slots: void warningWithoutDebug() const; void criticalWithoutDebug() const; void debugWithBool() const; + void debugNoSpaces() const; void veryLongWarningMessage() const; void qDebugQStringRef() const; void qDebugQLatin1String() const; @@ -149,6 +150,26 @@ void tst_QDebug::debugWithBool() const QCOMPARE(QString::fromLatin1(s_function), function); } +void tst_QDebug::debugNoSpaces() const +{ + MessageHandlerSetter mhs(myMessageHandler); + { + QDebug d = qDebug(); + QVERIFY(d.autoInsertSpaces()); + d.setAutoInsertSpaces(false); + QVERIFY(!d.autoInsertSpaces()); + d << " "; + d.setAutoInsertSpaces(true); + QVERIFY(d.autoInsertSpaces()); + d << "foo"; + d.nospace(); + d << "key=" << "value"; + d.space(); + d << 1 << 2; + } + QCOMPARE(s_msg, QString::fromLatin1(" foo key=value 1 2 ")); +} + void tst_QDebug::veryLongWarningMessage() const { MessageHandlerSetter mhs(myMessageHandler); -- cgit v1.2.3