diff options
-rw-r--r-- | tests/auto/wasm/CMakeLists.txt | 12 | ||||
-rw-r--r-- | tests/auto/wasm/tst_fetchapi.cpp | 85 |
2 files changed, 97 insertions, 0 deletions
diff --git a/tests/auto/wasm/CMakeLists.txt b/tests/auto/wasm/CMakeLists.txt index 124ef86633..5036678bf6 100644 --- a/tests/auto/wasm/CMakeLists.txt +++ b/tests/auto/wasm/CMakeLists.txt @@ -11,6 +11,18 @@ if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) endif() +qt_internal_add_test(tst_fetchapi + SOURCES + tst_fetchapi.cpp + DEFINES + QT_NO_FOREACH + LIBRARIES + Qt::GuiPrivate + Qt::Network + PUBLIC_LIBRARIES + Qt::Core +) + qt_internal_add_test(tst_localfileapi SOURCES tst_localfileapi.cpp diff --git a/tests/auto/wasm/tst_fetchapi.cpp b/tests/auto/wasm/tst_fetchapi.cpp new file mode 100644 index 0000000000..7bbb8104d7 --- /dev/null +++ b/tests/auto/wasm/tst_fetchapi.cpp @@ -0,0 +1,85 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// Copyright (C) 2016 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#include <QTest> +#include <QEventLoop> +#include <QNetworkReply> +#include <QNetworkRequest> +#include <QScopedPointer> + +#include <memory> + +namespace { + +const QUrl URL = QUrl("http://localhost:6931/test_batch.html"); + +class BackgroundThread : public QThread +{ + Q_OBJECT + void run() override + { + manager = std::make_unique<QNetworkAccessManager>(); + eventLoop = std::make_unique<QEventLoop>(); + reply = manager->get(request); + QObject::connect(reply, &QNetworkReply::finished, this, &BackgroundThread::requestFinished); + eventLoop->exec(); + } + + void requestFinished() + { + eventLoop->quit(); + } + +public: + QNetworkReply *reply{ nullptr }; + +private: + std::unique_ptr<QNetworkAccessManager> manager; + std::unique_ptr<QEventLoop> eventLoop; + QNetworkRequest request{ URL }; +}; + +} // namespace + +class tst_FetchApi : public QObject +{ + Q_OBJECT +public: + tst_FetchApi() = default; + +private Q_SLOTS: + void sendRequestOnMainThread(); + void sendRequestOnBackgroundThread(); +}; + +void tst_FetchApi::sendRequestOnMainThread() +{ + QNetworkAccessManager manager; + QNetworkRequest request(URL); + QNetworkReply *reply = manager.get(request); + + QEventLoop loop; + QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); + loop.exec(); + + QVERIFY(reply != nullptr); + QVERIFY(reply->error() == QNetworkReply::NoError); +} + +void tst_FetchApi::sendRequestOnBackgroundThread() +{ + QEventLoop mainEventLoop; + BackgroundThread *backgroundThread = new BackgroundThread(); + connect(backgroundThread, &BackgroundThread::finished, &mainEventLoop, &QEventLoop::quit); + connect(backgroundThread, &BackgroundThread::finished, backgroundThread, &QObject::deleteLater); + backgroundThread->start(); + mainEventLoop.exec(); + + QVERIFY(backgroundThread != nullptr); + QVERIFY(backgroundThread->reply != nullptr); + QVERIFY(backgroundThread->reply->error() == QNetworkReply::NoError); +} + +QTEST_MAIN(tst_FetchApi); +#include "tst_fetchapi.moc" |