diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2011-12-09 16:16:46 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-12-12 10:43:44 +0100 |
commit | b9ebb65c77ea779d4abbf92e93b8bef5a41c84bc (patch) | |
tree | 707eb23727cdd7b549637fddb7d1e475bdd133e0 | |
parent | 77f41a68b30b93e95808b86fc9d36838e690c8cc (diff) |
Revert "Remove unused overload of QTest::qExec."
The overload is used in Qt Creator
(see src/libs/extensionsystem/pluginmanager.cpp).
The use case here is an application whose internal
QObjects can be tested by passing a command line parameter.
For this use case, it is inconvenient to have to allocate
memory and create a char argv[]- array.
This reverts commit ad80d42f8eefd72d9297c272139acc70e24bfa13.
Change-Id: I2a2f91e2840100fd62743f6d03b33005d67b18f8
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Jason McDonald <jason.mcdonald@nokia.com>
-rw-r--r-- | dist/changes-5.0.0 | 3 | ||||
-rw-r--r-- | src/testlib/qtestcase.cpp | 28 | ||||
-rw-r--r-- | src/testlib/qtestcase.h | 1 | ||||
-rw-r--r-- | tests/auto/testlib/selftests/.gitignore | 1 | ||||
-rw-r--r-- | tests/auto/testlib/selftests/qexecstringlist/qexecstringlist.pro | 8 | ||||
-rw-r--r-- | tests/auto/testlib/selftests/qexecstringlist/tst_qexecstringlist.cpp | 96 | ||||
-rw-r--r-- | tests/auto/testlib/selftests/selftests.pro | 2 | ||||
-rw-r--r-- | tests/auto/testlib/selftests/selftests.qrc | 1 | ||||
-rw-r--r-- | tests/auto/testlib/selftests/tst_selftests.cpp | 4 |
9 files changed, 140 insertions, 4 deletions
diff --git a/dist/changes-5.0.0 b/dist/changes-5.0.0 index 7d9153d46b..daf68eee32 100644 --- a/dist/changes-5.0.0 +++ b/dist/changes-5.0.0 @@ -59,9 +59,6 @@ information about a particular change. like SkipSingle -- skipping a non-data-driven test function or skipping only the current data row of a data-driven test function. Every skipped data row is now reported in the test log. - * The QTest::qExec(QObject*, const QStringList&) overload has been removed - from the API. This function was not used in any of Qt's autotests and did - not provide significant benefits over QTest::qExec(QObject*, int, char**). - The QSsl::TlsV1 enum value was renamed to QSsl::TlsV1_0 . diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 608b2ca2ea..2ddb363888 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -1903,6 +1903,10 @@ FatalSignalHandler::~FatalSignalHandler() test that was executed with qExec() can't run another test via qExec() and threads are not allowed to call qExec() simultaneously. + If you have programatically created the arguments, as opposed to getting them + from the arguments in \c main(), it is likely of interest to use + QTest::qExec(QObject *, const QStringList &) since it is Unicode safe. + \sa QTEST_MAIN() */ @@ -2012,6 +2016,30 @@ int QTest::qExec(QObject *testObject, int argc, char **argv) return qMin(QTestResult::failCount(), 127); } +/*! + \overload + \since 4.4 + + Behaves identically to qExec(QObject *, int, char**) but takes a + QStringList of \a arguments instead of a \c char** list. + */ +int QTest::qExec(QObject *testObject, const QStringList &arguments) +{ + const int argc = arguments.count(); + QVarLengthArray<char *> argv(argc); + + QVector<QByteArray> args; + args.reserve(argc); + + for (int i = 0; i < argc; ++i) + { + args.append(arguments.at(i).toLocal8Bit().constData()); + argv[i] = args.last().data(); + } + + return qExec(testObject, argc, argv.data()); +} + /*! \internal */ void QTest::qFail(const char *statementStr, const char *file, int line) diff --git a/src/testlib/qtestcase.h b/src/testlib/qtestcase.h index 091e9a8d96..dffbedab8e 100644 --- a/src/testlib/qtestcase.h +++ b/src/testlib/qtestcase.h @@ -180,6 +180,7 @@ namespace QTest Q_TESTLIB_EXPORT char *toString(const void *); Q_TESTLIB_EXPORT int qExec(QObject *testObject, int argc = 0, char **argv = 0); + Q_TESTLIB_EXPORT int qExec(QObject *testObject, const QStringList &arguments); Q_TESTLIB_EXPORT bool qVerify(bool statement, const char *statementStr, const char *description, const char *file, int line); diff --git a/tests/auto/testlib/selftests/.gitignore b/tests/auto/testlib/selftests/.gitignore index 98a3f49081..56ba17abd7 100644 --- a/tests/auto/testlib/selftests/.gitignore +++ b/tests/auto/testlib/selftests/.gitignore @@ -13,6 +13,7 @@ fetchbogus/tst_fetchbogus globaldata/tst_globaldata maxwarnings/tst_maxwarnings multiexec/tst_multiexec +qexecstringlist/tst_qexecstringlist singleskip/tst_singleskip skip/tst_skip skipglobal/tst_skipglobal diff --git a/tests/auto/testlib/selftests/qexecstringlist/qexecstringlist.pro b/tests/auto/testlib/selftests/qexecstringlist/qexecstringlist.pro new file mode 100644 index 0000000000..de8a7da37e --- /dev/null +++ b/tests/auto/testlib/selftests/qexecstringlist/qexecstringlist.pro @@ -0,0 +1,8 @@ +SOURCES += tst_qexecstringlist.cpp +QT = core testlib + +mac:CONFIG -= app_bundle +CONFIG -= debug_and_release_target + + +TARGET = qexecstringlist diff --git a/tests/auto/testlib/selftests/qexecstringlist/tst_qexecstringlist.cpp b/tests/auto/testlib/selftests/qexecstringlist/tst_qexecstringlist.cpp new file mode 100644 index 0000000000..aacfab76f1 --- /dev/null +++ b/tests/auto/testlib/selftests/qexecstringlist/tst_qexecstringlist.cpp @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QtCore> +#include <QtTest/QtTest> + +class tst_QExecStringList: public QObject +{ + Q_OBJECT + +private slots: + void testA() const; + void testB() const; + void testB_data() const; + void testC() const; +}; + +void tst_QExecStringList::testA() const +{ +} + +void tst_QExecStringList::testB() const +{ + QFETCH(bool, dummy); + Q_UNUSED(dummy); +} + +void tst_QExecStringList::testB_data() const +{ + QTest::addColumn<bool>("dummy"); + + QTest::newRow("Data1") << false; + QTest::newRow("Data2") << false; + QTest::newRow("Data3") << false; +} + +void tst_QExecStringList::testC() const +{ +} + +int main(int argc,char *argv[]) +{ + QCoreApplication app(argc, argv); + + tst_QExecStringList test; + + QTest::qExec(&test, app.arguments()); + QTest::qExec(&test, QStringList("appName")); + QTest::qExec(&test, QStringList("appName") << "testA"); + QTest::qExec(&test, QStringList("appName") << "testB"); + QTest::qExec(&test, QStringList("appName") << "testB:Data2"); + QTest::qExec(&test, QStringList("appName") << "testC"); + + return 0; +} + +#include "tst_qexecstringlist.moc" diff --git a/tests/auto/testlib/selftests/selftests.pro b/tests/auto/testlib/selftests/selftests.pro index b4c4255dfc..68239754aa 100644 --- a/tests/auto/testlib/selftests/selftests.pro +++ b/tests/auto/testlib/selftests/selftests.pro @@ -3,7 +3,7 @@ TEMPLATE = subdirs SUBDIRS = subtest test warnings maxwarnings cmptest globaldata skip \ strcmp expectfail sleep fetchbogus crashes multiexec failinit failinitdata \ skipinit skipinitdata datetime singleskip assert differentexec \ - exceptionthrow datatable commandlinedata \ + exceptionthrow qexecstringlist datatable commandlinedata\ benchlibwalltime benchlibcallgrind benchlibeventcounter benchlibtickcounter \ benchliboptions xunit badxml longstring float printdatatags \ printdatatagswithglobaltags findtestdata diff --git a/tests/auto/testlib/selftests/selftests.qrc b/tests/auto/testlib/selftests/selftests.qrc index 5090fa7378..fb303af2b5 100644 --- a/tests/auto/testlib/selftests/selftests.qrc +++ b/tests/auto/testlib/selftests/selftests.qrc @@ -95,6 +95,7 @@ <file>expected_multiexec.xunitxml</file> <file>expected_printdatatags.txt</file> <file>expected_printdatatagswithglobaltags.txt</file> + <file>expected_qexecstringlist.txt</file> <file>expected_singleskip.lightxml</file> <file>expected_singleskip.txt</file> <file>expected_singleskip.xml</file> diff --git a/tests/auto/testlib/selftests/tst_selftests.cpp b/tests/auto/testlib/selftests/tst_selftests.cpp index f7a485b857..f3b47389e6 100644 --- a/tests/auto/testlib/selftests/tst_selftests.cpp +++ b/tests/auto/testlib/selftests/tst_selftests.cpp @@ -327,6 +327,7 @@ void tst_Selftests::runSubTest_data() << "multiexec" << "printdatatags" << "printdatatagswithglobaltags" + << "qexecstringlist" << "singleskip" << "skip" << "skipinit" @@ -391,6 +392,9 @@ void tst_Selftests::runSubTest_data() if (subtest == "multiexec") { continue; } + if (subtest == "qexecstringlist") { + continue; + } if (subtest == "benchliboptions") { continue; } |