diff options
Diffstat (limited to 'tests/auto/corelib/io')
-rw-r--r-- | tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp | 62 | ||||
-rw-r--r-- | tests/auto/corelib/io/qfilesystemwatcher/BLACKLIST | 3 | ||||
-rw-r--r-- | tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp | 9 | ||||
-rw-r--r-- | tests/auto/corelib/io/qprocess/tst_qprocess.cpp | 93 | ||||
-rw-r--r-- | tests/auto/corelib/io/qurl/tst_qurl.cpp | 2 |
5 files changed, 132 insertions, 37 deletions
diff --git a/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp b/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp index 66720d28e0..011af527b4 100644 --- a/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp +++ b/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp @@ -35,43 +35,45 @@ class tst_QDataUrl : public QObject Q_OBJECT private slots: - void nonData(); - void emptyData(); - void alreadyPercentageEncoded(); + void decode_data(); + void decode(); }; -void tst_QDataUrl::nonData() +void tst_QDataUrl::decode_data() { - QLatin1String data("http://test.com"); - QUrl url(data); - QString mimeType; - QByteArray payload; - bool result = qDecodeDataUrl(url, mimeType, payload); - QVERIFY(!result); -} + QTest::addColumn<QString>("input"); + QTest::addColumn<bool>("result"); + QTest::addColumn<QString>("mimeType"); + QTest::addColumn<QByteArray>("payload"); -void tst_QDataUrl::emptyData() -{ - QLatin1String data("data:text/plain"); - QUrl url(data); - QString mimeType; - QByteArray payload; - bool result = qDecodeDataUrl(url, mimeType, payload); - QVERIFY(result); - QCOMPARE(mimeType, QLatin1String("text/plain;charset=US-ASCII")); - QVERIFY(payload.isNull()); + auto row = [](const char *tag, const char *url, bool success, QString mimeType = {}, QByteArray payload = {}) { + QTest::newRow(tag) << url << success <<mimeType << payload; + }; + + row("nonData", "http://test.com", false); + row("emptyData", "data:text/plain", true, + QLatin1String("text/plain;charset=US-ASCII")); + row("alreadyPercentageEncoded", "data:text/plain,%E2%88%9A", true, + QLatin1String("text/plain"), QByteArray::fromPercentEncoding("%E2%88%9A")); } -void tst_QDataUrl::alreadyPercentageEncoded() +void tst_QDataUrl::decode() { - QLatin1String data("data:text/plain,%E2%88%9A"); - QUrl url(data); - QString mimeType; - QByteArray payload; - bool result = qDecodeDataUrl(url, mimeType, payload); - QVERIFY(result); - QCOMPARE(mimeType, QLatin1String("text/plain")); - QCOMPARE(payload, QByteArray::fromPercentEncoding("%E2%88%9A")); + QFETCH(const QString, input); + QFETCH(const bool, result); + QFETCH(const QString, mimeType); + QFETCH(const QByteArray, payload); + + QString actualMimeType; + QByteArray actualPayload; + + QUrl url(input); + const bool actualResult = qDecodeDataUrl(url, actualMimeType, actualPayload); + + QCOMPARE(actualResult, result); + QCOMPARE(actualMimeType, mimeType); + QCOMPARE(actualPayload, payload); + QCOMPARE(actualPayload.isNull(), payload.isNull()); // assume nullness is significant } QTEST_MAIN(tst_QDataUrl) diff --git a/tests/auto/corelib/io/qfilesystemwatcher/BLACKLIST b/tests/auto/corelib/io/qfilesystemwatcher/BLACKLIST index 457499591d..90b714758a 100644 --- a/tests/auto/corelib/io/qfilesystemwatcher/BLACKLIST +++ b/tests/auto/corelib/io/qfilesystemwatcher/BLACKLIST @@ -1,7 +1,6 @@ # QTBUG-33574 QTBUG-30943 [signalsEmittedAfterFileMoved] -windows-7sp1 -windows-10 +windows [watchFileAndItsDirectory:native backend-testfile] osx windows diff --git a/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp b/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp index da5327594c..4a04e0f7c6 100644 --- a/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp +++ b/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp @@ -561,7 +561,8 @@ protected: qint64 readData(char *data, qint64 maxSize) override { maxSize = qMin(maxSize, qint64(buf->size() - offset)); - memcpy(data, buf->constData() + offset, maxSize); + if (maxSize > 0) + memcpy(data, buf->constData() + offset, maxSize); offset += maxSize; return maxSize; } @@ -604,13 +605,15 @@ protected: qint64 readData(char *data, qint64 maxSize) override { maxSize = qMin(maxSize, qint64(buf.size() - pos())); - memcpy(data, buf.constData() + pos(), maxSize); + if (maxSize > 0) + memcpy(data, buf.constData() + pos(), maxSize); return maxSize; } qint64 writeData(const char *data, qint64 maxSize) override { maxSize = qMin(maxSize, qint64(buf.size() - pos())); - memcpy(buf.data() + pos(), data, maxSize); + if (maxSize > 0) + memcpy(buf.data() + pos(), data, maxSize); return maxSize; } diff --git a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp index db60bead64..ac3b998218 100644 --- a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp +++ b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2021 The Qt Company Ltd. -** Copyright (C) 2020 Intel Corporation. +** Copyright (C) 2022 Intel Corporation. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the test suite of the Qt Toolkit. @@ -150,6 +150,8 @@ private slots: void startStopStartStopBuffers(); void processEventsInAReadyReadSlot_data(); void processEventsInAReadyReadSlot(); + void startFromCurrentWorkingDir_data(); + void startFromCurrentWorkingDir(); // keep these at the end, since they use lots of processes and sometimes // caused obscure failures to occur in tests that followed them (esp. on the Mac) @@ -2731,5 +2733,94 @@ void tst_QProcess::finishProcessBeforeReadingDone_deprecated() #endif +enum class ChdirMode { + None = 0, + InParent, + InChild +}; +Q_DECLARE_METATYPE(ChdirMode) + +void tst_QProcess::startFromCurrentWorkingDir_data() +{ + qRegisterMetaType<ChdirMode>(); + QTest::addColumn<QString>("programPrefix"); + QTest::addColumn<ChdirMode>("chdirMode"); + QTest::addColumn<bool>("success"); + + constexpr bool IsWindows = true +#ifdef Q_OS_UNIX + && false +#endif + ; + + // baseline: trying to execute the directory, this can't possibly succeed! + QTest::newRow("plain-same-cwd") << QString() << ChdirMode::None << false; + + // cross-platform behavior: neither OS searches the setWorkingDirectory() + // dir without "./" + QTest::newRow("plain-child-chdir") << QString() << ChdirMode::InChild << false; + + // cross-platform behavior: both OSes search the parent's CWD with "./" + QTest::newRow("prefixed-parent-chdir") << "./" << ChdirMode::InParent << true; + + // opposite behaviors: Windows searches the parent's CWD and Unix searches + // the child's with "./" + QTest::newRow("prefixed-child-chdir") << "./" << ChdirMode::InChild << !IsWindows; + + // Windows searches the parent's CWD without "./" + QTest::newRow("plain-parent-chdir") << QString() << ChdirMode::InParent << IsWindows; +} + +void tst_QProcess::startFromCurrentWorkingDir() +{ + QFETCH(QString, programPrefix); + QFETCH(ChdirMode, chdirMode); + QFETCH(bool, success); + + QProcess process; + qRegisterMetaType<QProcess::ProcessError>(); + QSignalSpy errorSpy(&process, &QProcess::errorOccurred); + QVERIFY(errorSpy.isValid()); + + // both the dir name and the executable name + const QString target = QStringLiteral("testProcessNormal"); + process.setProgram(programPrefix + target); + +#ifdef Q_OS_UNIX + // Reset PATH, to be sure it doesn't contain . or the empty path. + // We can't do this on Windows because DLLs are searched in PATH + // and Windows always searches "." anyway. + auto restoreEnv = qScopeGuard([old = qgetenv("PATH")] { + qputenv("PATH", old); + }); + qputenv("PATH", "/"); +#endif + + switch (chdirMode) { + case ChdirMode::InParent: { + auto restoreCwd = qScopeGuard([old = QDir::currentPath()] { + QDir::setCurrent(old); + }); + QVERIFY(QDir::setCurrent(target)); + process.start(); + break; + } + case ChdirMode::InChild: + process.setWorkingDirectory(target); + Q_FALLTHROUGH(); + case ChdirMode::None: + process.start(); + break; + } + + QCOMPARE(process.waitForStarted(), success); + QCOMPARE(errorSpy.count(), int(!success)); + if (success) { + QVERIFY(process.waitForFinished()); + } else { + QCOMPARE(process.error(), QProcess::FailedToStart); + } +} + QTEST_MAIN(tst_QProcess) #include "tst_qprocess.moc" diff --git a/tests/auto/corelib/io/qurl/tst_qurl.cpp b/tests/auto/corelib/io/qurl/tst_qurl.cpp index 5687a63314..780b6165c3 100644 --- a/tests/auto/corelib/io/qurl/tst_qurl.cpp +++ b/tests/auto/corelib/io/qurl/tst_qurl.cpp @@ -3497,7 +3497,7 @@ void tst_QUrl::effectiveTLDs_data() << ".app.os.stg.fedoraproject.org"; QTest::newRow("development.run") << QUrl::fromEncoded("http://test.development.run") << ".development.run"; QTest::newRow("crafting.xyz") << QUrl::fromEncoded("http://test.crafting.xyz") << ".crafting.xyz"; - QTest::newRow("nym.ie") << QUrl::fromEncoded("http://shamus.nym.ie") << ".nym.ie"; + QTest::newRow("nym.ie") << QUrl::fromEncoded("http://shamus.nym.ie") << ".ie"; QTest::newRow("vapor.cloud") << QUrl::fromEncoded("http://test.vapor.cloud") << ".vapor.cloud"; QTest::newRow("official.academy") << QUrl::fromEncoded("http://acredited.official.academy") << ".official.academy"; } |