diff options
Diffstat (limited to 'tests')
6 files changed, 114 insertions, 8 deletions
diff --git a/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp b/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp index 170c38d57c1..820a7b4bdb5 100644 --- a/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp +++ b/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp @@ -7,7 +7,6 @@ #include <qfile.h> #include <qdatetime.h> #include <qdir.h> -#include <qset.h> #include <qstandardpaths.h> #include <qstring.h> #include <qtemporarydir.h> @@ -15,6 +14,7 @@ #include <QtTest/private/qtesthelpers_p.h> +#include <QtCore/private/qduplicatetracker_p.h> #include <QtCore/qscopeguard.h> #if defined(Q_OS_WIN) @@ -551,9 +551,9 @@ void tst_QTemporaryFile::openOnRootDrives() void tst_QTemporaryFile::stressTest() { - const int iterations = 1000; + constexpr int iterations = 1000; - QSet<QString> names; + QDuplicateTracker<QString, iterations> names; const auto remover = qScopeGuard([&] { for (const QString &s : std::as_const(names)) @@ -564,8 +564,7 @@ void tst_QTemporaryFile::stressTest() QTemporaryFile file; file.setAutoRemove(false); QVERIFY2(file.open(), qPrintable(file.errorString())); - QVERIFY(!names.contains(file.fileName())); - names.insert(file.fileName()); + QVERIFY(!names.hasSeen(file.fileName())); } } diff --git a/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp b/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp index 0254cbd1360..e41a4760e6a 100644 --- a/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp +++ b/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp @@ -23,6 +23,8 @@ #include "../../../network-settings.h" #include <QtTest/private/qemulationdetector_p.h> +using namespace Qt::StringLiterals; + QT_BEGIN_NAMESPACE template<> struct QMetaTypeId<QIODevice::OpenModeFlag> { enum { Defined = 1 }; static inline int qt_metatype_id() { return QMetaType::Int; } }; @@ -1379,12 +1381,12 @@ void tst_QTextStream::pos2() // ------------------------------------------------------------------------------ void tst_QTextStream::pos3LargeFile() { + // NOTE: The unusual spacing is to ensure non-1-character whitespace. + constexpr auto lineString = " 0 1 2\t3 4\t \t5 6 7 8 9 \n"_L1; { QFile file(testFileName); QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text)); QTextStream out( &file ); - // NOTE: The unusual spacing is to ensure non-1-character whitespace. - QString lineString = " 0 1 2\t3 4\t \t5 6 7 8 9 \n"; // Approximately 5kb text file (more is too slow (QTBUG-138435)) const int NbLines = (5 * 1024) / lineString.size() + 1; for (int line = 0; line < NbLines; ++line) @@ -1395,8 +1397,15 @@ void tst_QTextStream::pos3LargeFile() QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text)); QTextStream in( &file ); constexpr int testValues[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + qint64 expectedLineEnd = 0; +#ifdef Q_OS_WIN // CRLF platform + constexpr int crlfAdjustment = 1; +#else + constexpr int crlfAdjustment = 0; +#endif + const auto expectedLineLength = lineString.size() + crlfAdjustment; + QCOMPARE(in.pos(), 0); while (true) { - in.pos(); for (size_t i = 0; i < std::size(testValues); ++i) { int value = -42; if (!(in >> value)) { @@ -1407,6 +1416,9 @@ void tst_QTextStream::pos3LargeFile() } QCOMPARE(value, testValues[i]); } + expectedLineEnd += expectedLineLength; + // Final space and newline are not consumed until next read. + QCOMPARE(in.pos(), expectedLineEnd - 2 - crlfAdjustment); } } diff --git a/tests/auto/dbus/qdbusconnection/CMakeLists.txt b/tests/auto/dbus/qdbusconnection/CMakeLists.txt index 56ae21f2911..cbbe76a7dc7 100644 --- a/tests/auto/dbus/qdbusconnection/CMakeLists.txt +++ b/tests/auto/dbus/qdbusconnection/CMakeLists.txt @@ -19,3 +19,15 @@ qt_internal_add_test(tst_qdbusconnection TESTDATA tst_qdbusconnection.conf ) + +qt_internal_add_executable(qdbusdelayeddeliveryreenablehelper + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + SOURCES + qdbusdelayeddeliveryreenablehelper.cpp + LIBRARIES + Qt::DBus +) + +add_dependencies(tst_qdbusconnection + qdbusdelayeddeliveryreenablehelper +) diff --git a/tests/auto/dbus/qdbusconnection/qdbusdelayeddeliveryreenablehelper.cpp b/tests/auto/dbus/qdbusconnection/qdbusdelayeddeliveryreenablehelper.cpp new file mode 100644 index 00000000000..cd916d5b639 --- /dev/null +++ b/tests/auto/dbus/qdbusconnection/qdbusdelayeddeliveryreenablehelper.cpp @@ -0,0 +1,56 @@ +// Copyright (C) 2025 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QtCore/QTimer> +#include <QtCore/QCoreApplication> +#include <QtDBus/QDBusConnection> +#include <QtDBus/QDBusMessage> + +#include <stdio.h> + +using namespace Qt::StringLiterals; +using namespace std::chrono_literals; + +static QString myInterface() +{ + return u"local.qdbusdelayeddeliveryreenablehelper"_s; +} + +static void makeSynchronousCall(QDBusConnection &conn) +{ + QDBusMessage msg = QDBusMessage::createMethodCall("org.freedesktop.DBus", "/", + "org.freedesktop.DBus.Peer", "Ping"); + conn.call(msg); +} + +static void emitSignal(QDBusConnection &conn) +{ + QDBusMessage msg = QDBusMessage::createSignal("/", myInterface(), "quit"); + conn.send(msg); +} + +int main(int argc, char **argv) +{ + // Open a connection to the bus *before* QCoreApplication exists; + // this will put the connection in delayed delivery mode + QDBusConnection session = QDBusConnection::sessionBus(); + if (!session.isConnected()) { + fprintf(stderr, "Session bus did not connect!"); + return 1; + } + makeSynchronousCall(session); + + QCoreApplication app(argc, argv); + QTimer::singleShot(15s, qApp, [] { + fprintf(stderr, "Did not receive signal.\n"); + qApp->exit(1); + }); + + // connect a remote, wildcard signal to qApp->quit() + session.connect(QString(), QString(), myInterface(), "quit", &app, SLOT(quit())); + + // send ourselves the signal to quit, via D-Bus + emitSignal(session); + + return app.exec(); +} diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp index 5c07b6ad37b..fe9214c5513 100644 --- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp +++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp @@ -1468,6 +1468,31 @@ void tst_QDBusConnection::parentClassSignal() QTRY_COMPARE(recv.signalsReceived, 2); } +// see also tst_qdbusconnection_delayed +void tst_QDBusConnection::delayedDeliveryReenabledAfterUsedInMainThread() +{ +#if !QT_CONFIG(process) + QSKIP("Test requires QProcess"); +#elif defined(HAS_HOOKSETUPFUNCTION) + QSKIP("No difference to run by tst_QDBusConnection"); +#else +# if defined(Q_OS_WIN) +# define EXE ".exe" +# else +# define EXE "" +# endif + if (!QCoreApplication::instance()) + QSKIP("Test requires a QCoreApplication"); + + QProcess process; + process.start(QFINDTESTDATA("qdbusdelayeddeliveryreenablehelper" EXE)); + QVERIFY2(process.waitForFinished(25000), qPrintable(process.errorString())); + QCOMPARE(process.readAllStandardError(), QString()); + QCOMPARE(process.exitCode(), 0); +# undef EXE +#endif +} + QString MyObject::path; QString MyObjectWithoutInterface::path; QString MyObjectWithoutInterface::interface; diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h index 4137859414c..dc37e3157b4 100644 --- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h +++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h @@ -126,6 +126,8 @@ private slots: void parentClassSignal(); + void delayedDeliveryReenabledAfterUsedInMainThread(); + public: QString serviceName() const { return "org.qtproject.Qt.Autotests.QDBusConnection"; } bool callMethod(const QDBusConnection &conn, const QString &path); |