From c35eff2ace00a8d4b8cc31ab5b63ec79b96cc07c Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 25 Aug 2016 09:06:54 +0200 Subject: [PATCH] Add qtest_network.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ... and move toString() implementations there which were repeated in network tests, or #ifdef'ed in qtest.h. Since the functions moved from network tests are now in a public header, had to massage them a bit to pass headersclean: - replace Q_FOREACH with C++11 range-for - avoid implicit conversion from QByteArray -> const char* (done by re-using toString(QByteArray) instead of calling strdup() manually) Also made the functions overloads instead of specializations. This allows to pass the enum by value instead of by const-&. Like the existing QHostAddress, the newly-added toString() overloads are marked as \internal. We can decide later whether to turn them into public API. Change-Id: I8c23db7a0a6575273567017d42d7b2a957acece8 Reviewed-by: Jędrzej Nowacki Reviewed-by: Timur Pocheptsov --- src/testlib/qtest.h | 28 +--- src/testlib/qtest_network.h | 126 ++++++++++++++++++ src/testlib/testlib.pro | 1 + .../qnetworkcookie/tst_qnetworkcookie.cpp | 27 ---- .../tst_qnetworkcookiejar.cpp | 28 ---- .../qnetworkreply/tst_qnetworkreply.cpp | 39 ------ .../qnetworkrequest/tst_qnetworkrequest.cpp | 27 ---- 7 files changed, 131 insertions(+), 145 deletions(-) create mode 100644 src/testlib/qtest_network.h diff --git a/src/testlib/qtest.h b/src/testlib/qtest.h index 63e79c777f..b9bb10818e 100644 --- a/src/testlib/qtest.h +++ b/src/testlib/qtest.h @@ -58,10 +58,6 @@ #include #include -#ifdef QT_NETWORK_LIB -# include -#endif - QT_BEGIN_NAMESPACE @@ -192,26 +188,6 @@ template<> inline char *toString(const QVariant &v) return qstrdup(vstring.constData()); } -#ifdef QT_NETWORK_LIB -/*! - \internal - */ -template<> inline char *toString(const QHostAddress &addr) -{ - switch (addr.protocol()) { - case QAbstractSocket::UnknownNetworkLayerProtocol: - return qstrdup(""); - case QAbstractSocket::AnyIPProtocol: - return qstrdup("QHostAddress::Any"); - case QAbstractSocket::IPv4Protocol: - case QAbstractSocket::IPv6Protocol: - break; - } - - return qstrdup(addr.toString().toLatin1().constData()); -} -#endif - inline char *toString(std::nullptr_t) { return toString(QLatin1String("nullptr")); @@ -357,6 +333,10 @@ int main(int argc, char *argv[]) \ # define QTEST_ADD_GPU_BLACKLIST_SUPPORT #endif +#if defined(QT_NETWORK_LIB) +# include +#endif + #if defined(QT_WIDGETS_LIB) #include diff --git a/src/testlib/qtest_network.h b/src/testlib/qtest_network.h new file mode 100644 index 0000000000..6f6b4c1b8e --- /dev/null +++ b/src/testlib/qtest_network.h @@ -0,0 +1,126 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtTest module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTEST_NETWORK_H +#define QTEST_NETWORK_H + +#include + +// enable NETWORK features +#ifndef QT_NETWORK_LIB +#define QT_NETWORK_LIB +#endif + +#if 0 +#pragma qt_class(QtTestNetwork) +#endif + +#include +#include +#include + +#if 0 +// inform syncqt +#pragma qt_no_master_include +#endif + +QT_BEGIN_NAMESPACE + +namespace QTest +{ +/*! + \internal + */ +inline char *toString(const QHostAddress &addr) +{ + switch (addr.protocol()) { + case QAbstractSocket::UnknownNetworkLayerProtocol: + return qstrdup(""); + case QAbstractSocket::AnyIPProtocol: + return qstrdup("QHostAddress::Any"); + case QAbstractSocket::IPv4Protocol: + case QAbstractSocket::IPv6Protocol: + break; + } + + return toString(addr.toString()); +} + +/*! + \internal + */ +inline char *toString(QNetworkReply::NetworkError code) +{ + const QMetaObject *mo = &QNetworkReply::staticMetaObject; + int index = mo->indexOfEnumerator("NetworkError"); + if (index == -1) + return qstrdup(""); + + QMetaEnum qme = mo->enumerator(index); + return qstrdup(qme.valueToKey(code)); +} + +/*! + \internal + */ +inline char *toString(const QNetworkCookie &cookie) +{ + return toString(cookie.toRawForm()); +} + +/*! + \internal + */ +inline char *toString(const QList &list) +{ + QByteArray result = "QList("; + if (!list.isEmpty()) { + for (const QNetworkCookie &cookie : list) + result += "QNetworkCookie(" + cookie.toRawForm() + "), "; + result.chop(2); // remove trailing ", " + } + result.append(')'); + return toString(result); +} + +} // namespace QTest + +QT_END_NAMESPACE + +#endif diff --git a/src/testlib/testlib.pro b/src/testlib/testlib.pro index 3fe1aeea96..d76dbb8c75 100644 --- a/src/testlib/testlib.pro +++ b/src/testlib/testlib.pro @@ -28,6 +28,7 @@ HEADERS = qbenchmark.h \ qtesteventloop.h \ qtest_global.h \ qtest_gui.h \ + qtest_network.h \ qtest_widgets.h \ qtest.h \ qtestkeyboard.h \ diff --git a/tests/auto/network/access/qnetworkcookie/tst_qnetworkcookie.cpp b/tests/auto/network/access/qnetworkcookie/tst_qnetworkcookie.cpp index 0424fc47ed..96c4917473 100644 --- a/tests/auto/network/access/qnetworkcookie/tst_qnetworkcookie.cpp +++ b/tests/auto/network/access/qnetworkcookie/tst_qnetworkcookie.cpp @@ -46,33 +46,6 @@ private slots: void parseMultipleCookies(); }; -QT_BEGIN_NAMESPACE - -namespace QTest { - template<> - char *toString(const QNetworkCookie &cookie) - { - return qstrdup(cookie.toRawForm()); - } - - template<> - char *toString(const QList &list) - { - QByteArray result = "QList("; - bool first = true; - foreach (QNetworkCookie cookie, list) { - if (!first) - result += ", "; - first = false; - result += "QNetworkCookie(" + cookie.toRawForm() + ')'; - } - result.append(')'); - return qstrdup(result.constData()); - } -} - -QT_END_NAMESPACE - void tst_QNetworkCookie::getterSetter() { QNetworkCookie cookie; diff --git a/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp b/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp index 8a1a5b8369..f9cc33fb26 100644 --- a/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp +++ b/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp @@ -55,34 +55,6 @@ private slots: void rfc6265(); }; -QT_BEGIN_NAMESPACE - -namespace QTest { - template<> - char *toString(const QNetworkCookie &cookie) - { - return qstrdup(cookie.toRawForm()); - } - - template<> - char *toString(const QList &list) - { - QByteArray result = "QList("; - bool first = true; - foreach (QNetworkCookie cookie, list) { - if (!first) - result += ", "; - first = false; - result += "QNetworkCookie(" + cookie.toRawForm() + ')'; - } - - result.append(')'); - return qstrdup(result.constData()); - } -} - -QT_END_NAMESPACE - class MyCookieJar: public QNetworkCookieJar { public: diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index 43e05c95f9..38c3b47aae 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -490,45 +490,6 @@ private: bool tst_QNetworkReply::seedCreated = false; -QT_BEGIN_NAMESPACE - -namespace QTest { - template<> - char *toString(const QNetworkReply::NetworkError& code) - { - const QMetaObject *mo = &QNetworkReply::staticMetaObject; - int index = mo->indexOfEnumerator("NetworkError"); - if (index == -1) - return qstrdup(""); - - QMetaEnum qme = mo->enumerator(index); - return qstrdup(qme.valueToKey(code)); - } - - template<> - char *toString(const QNetworkCookie &cookie) - { - return qstrdup(cookie.toRawForm()); - } - - template<> - char *toString(const QList &list) - { - QByteArray result = "QList("; - bool first = true; - foreach (QNetworkCookie cookie, list) { - if (!first) - result += ", "; - first = false; - result += "QNetworkCookie(" + cookie.toRawForm() + ')'; - } - result.append(')'); - return qstrdup(result.constData()); - } -} - -QT_END_NAMESPACE - #define RUN_REQUEST(call) \ do { \ QString errorMsg = call; \ diff --git a/tests/auto/network/access/qnetworkrequest/tst_qnetworkrequest.cpp b/tests/auto/network/access/qnetworkrequest/tst_qnetworkrequest.cpp index a14aaf3cb1..bc9144e40e 100644 --- a/tests/auto/network/access/qnetworkrequest/tst_qnetworkrequest.cpp +++ b/tests/auto/network/access/qnetworkrequest/tst_qnetworkrequest.cpp @@ -56,33 +56,6 @@ private slots: void removeHeader(); }; -QT_BEGIN_NAMESPACE - -namespace QTest { - template<> - char *toString(const QNetworkCookie &cookie) - { - return qstrdup(cookie.toRawForm()); - } - - template<> - char *toString(const QList &list) - { - QByteArray result = "QList("; - bool first = true; - foreach (QNetworkCookie cookie, list) { - if (!first) - result += ", "; - first = false; - result += "QNetworkCookie(" + cookie.toRawForm() + ')'; - } - result.append(')'); - return qstrdup(result.constData()); - } -} - -QT_END_NAMESPACE - void tst_QNetworkRequest::ctor_data() { QTest::addColumn("url");