summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp9
-rw-r--r--tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp18
-rw-r--r--tests/auto/dbus/qdbusconnection/CMakeLists.txt12
-rw-r--r--tests/auto/dbus/qdbusconnection/qdbusdelayeddeliveryreenablehelper.cpp56
-rw-r--r--tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp25
-rw-r--r--tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h2
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);