summaryrefslogtreecommitdiffstats
path: root/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp')
-rw-r--r--tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp65
1 files changed, 49 insertions, 16 deletions
diff --git a/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp b/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp
index a29b9c25ad..d6bdda76ca 100644
--- a/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp
+++ b/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp
@@ -3,7 +3,9 @@
#include "httptestserver_p.h"
+#if QT_CONFIG(http)
#include <QtNetwork/qhttpmultipart.h>
+#endif
#include <QtNetwork/qrestaccessmanager.h>
#include <QtNetwork/qauthenticator.h>
#include <QtNetwork/qnetworkreply.h>
@@ -13,6 +15,7 @@
#include <QTest>
#include <QtTest/qsignalspy.h>
+#include <QtCore/private/qglobal_p.h> // for access to Qt's feature system
#include <QtCore/qbuffer.h>
#include <QtCore/qjsonobject.h>
#include <QtCore/qjsondocument.h>
@@ -32,7 +35,9 @@ private slots:
void initialization();
void destruction();
void callbacks();
+#if QT_CONFIG(http)
void requests();
+#endif
void reply();
void errors();
void body();
@@ -89,6 +94,7 @@ void tst_QRestAccessManager::reply()
networkReply = nullptr; \
}
+#if QT_CONFIG(http)
void tst_QRestAccessManager::requests()
{
// A basic test for each HTTP method against the local testserver.
@@ -109,7 +115,7 @@ void tst_QRestAccessManager::requests()
HttpData serverSideRequest; // The request data the server received
HttpData serverSideResponse; // The response data the server responds with
serverSideResponse.status = 200;
- server.setHandler([&](HttpData request, HttpData &response, ResponseControl&) {
+ server.setHandler([&](const HttpData &request, HttpData &response, ResponseControl&) {
serverSideRequest = request;
response = serverSideResponse;
@@ -267,6 +273,7 @@ void tst_QRestAccessManager::requests()
//manager.sendCustomRequest(request, this, [](){}); // No verb && no data
//manager.sendCustomRequest(request, "FOOBAR", this, [](){}); // No verb || no data
}
+#endif
void tst_QRestAccessManager::memberHandler(QRestReply &reply)
{
@@ -473,7 +480,7 @@ void tst_QRestAccessManager::errors()
QNetworkRequest request(server.url());
HttpData serverSideResponse; // The response data the server responds with
- server.setHandler([&](HttpData, HttpData &response, ResponseControl &) {
+ server.setHandler([&](const HttpData &, HttpData &response, ResponseControl &) {
response = serverSideResponse;
});
@@ -540,7 +547,7 @@ void tst_QRestAccessManager::body()
HttpData serverSideRequest; // The request data the server received
HttpData serverSideResponse; // The response data the server responds with
- server.setHandler([&](HttpData request, HttpData &response, ResponseControl&) {
+ server.setHandler([&](const HttpData &request, HttpData &response, ResponseControl&) {
serverSideRequest = request;
response = serverSideResponse;
});
@@ -601,7 +608,7 @@ void tst_QRestAccessManager::json()
HttpData serverSideRequest; // The request data the server received
HttpData serverSideResponse; // The response data the server responds with
serverSideResponse.status = 200;
- server.setHandler([&](HttpData request, HttpData &response, ResponseControl&) {
+ server.setHandler([&](const HttpData &request, HttpData &response, ResponseControl&) {
serverSideRequest = request;
response = serverSideResponse;
});
@@ -638,12 +645,13 @@ void tst_QRestAccessManager::json()
QTRY_VERIFY(networkReply);
QRestReply restReply(networkReply);
parseError.error = QJsonParseError::ParseError::DocumentTooLarge;
- QVERIFY(!restReply.readJson(&parseError).has_value()); // std::nullopt returned
+ const auto json = restReply.readJson(&parseError);
+ networkReply->deleteLater();
+ networkReply = nullptr;
+ QCOMPARE_EQ(json, std::nullopt);
QCOMPARE_NE(parseError.error, QJsonParseError::ParseError::NoError);
QCOMPARE_NE(parseError.error, QJsonParseError::ParseError::DocumentTooLarge);
QCOMPARE_GT(parseError.offset, 0);
- networkReply->deleteLater();
- networkReply = nullptr;
}
{
@@ -654,6 +662,8 @@ void tst_QRestAccessManager::json()
QRestReply restReply(networkReply);
parseError.error = QJsonParseError::ParseError::DocumentTooLarge;
json = restReply.readJson(&parseError);
+ networkReply->deleteLater();
+ networkReply = nullptr;
QCOMPARE(parseError.error, QJsonParseError::ParseError::NoError);
QVERIFY(json);
responseJsonDocument = *json;
@@ -661,8 +671,6 @@ void tst_QRestAccessManager::json()
QCOMPARE(responseJsonDocument.array().size(), 2);
QCOMPARE(responseJsonDocument[0].toString(), "foo"_L1);
QCOMPARE(responseJsonDocument[1].toString(), "bar"_L1);
- networkReply->deleteLater();
- networkReply = nullptr;
}
}
@@ -672,9 +680,9 @@ void tst_QRestAccessManager::json()
QTRY_VERIFY(networkReply); \
QRestReply restReply(networkReply); \
responseString = restReply.readText(); \
- QCOMPARE(responseString, sourceString); \
networkReply->deleteLater(); \
networkReply = nullptr; \
+ QCOMPARE(responseString, sourceString); \
}
#define VERIFY_TEXT_REPLY_ERROR(WARNING_MESSAGE) \
@@ -684,9 +692,9 @@ void tst_QRestAccessManager::json()
QTest::ignoreMessage(QtWarningMsg, WARNING_MESSAGE); \
QRestReply restReply(networkReply); \
responseString = restReply.readText(); \
- QVERIFY(responseString.isEmpty()); \
networkReply->deleteLater(); \
networkReply = nullptr; \
+ QVERIFY(responseString.isEmpty()); \
}
void tst_QRestAccessManager::text()
@@ -708,7 +716,7 @@ void tst_QRestAccessManager::text()
HttpData serverSideRequest; // The request data the server received
HttpData serverSideResponse; // The response data the server responds with
serverSideResponse.status = 200;
- server.setHandler([&](HttpData request, HttpData &response, ResponseControl&) {
+ server.setHandler([&](const HttpData &request, HttpData &response, ResponseControl&) {
serverSideRequest = request;
response = serverSideResponse;
});
@@ -722,11 +730,29 @@ void tst_QRestAccessManager::text()
// should consider the indicated charset and convert it to an UTF-16 QString => the returned
// QString from text() should match with the original (UTF-16) QString.
- // Successful UTF-8
+ // Successful UTF-8 (explicit)
serverSideResponse.headers.append(Header::ContentType, "text/plain; charset=UTF-8"_ba);
serverSideResponse.body = encUTF8(sourceString);
VERIFY_TEXT_REPLY_OK;
+ // Successful UTF-8 (obfuscated)
+ serverSideResponse.headers.removeAll(Header::ContentType);
+ serverSideResponse.headers.append(Header::ContentType, "text/plain; charset=\"UT\\F-8\""_ba);
+ serverSideResponse.body = encUTF8(sourceString);
+ VERIFY_TEXT_REPLY_OK;
+
+ // Successful UTF-8 (empty charset)
+ serverSideResponse.headers.removeAll(Header::ContentType);
+ serverSideResponse.headers.append(Header::ContentType, "text/plain; charset=\"\""_ba);
+ serverSideResponse.body = encUTF8(sourceString);
+ VERIFY_TEXT_REPLY_OK;
+
+ // Successful UTF-8 (implicit)
+ serverSideResponse.headers.removeAll(Header::ContentType);
+ serverSideResponse.headers.append(Header::ContentType, "text/plain"_ba);
+ serverSideResponse.body = encUTF8(sourceString);
+ VERIFY_TEXT_REPLY_OK;
+
// Successful UTF-16
serverSideResponse.headers.removeAll(Header::ContentType);
serverSideResponse.headers.append(Header::ContentType, "text/plain; charset=UTF-16"_ba);
@@ -745,10 +771,17 @@ void tst_QRestAccessManager::text()
serverSideResponse.body = encUTF32(sourceString);
VERIFY_TEXT_REPLY_OK;
- // Successful UTF-32 with spec-wise allowed extra content in the Content-Type header value
+ // Successful UTF-32 with spec-wise allowed extra trailing content in the Content-Type header value
+ serverSideResponse.headers.removeAll(Header::ContentType);
+ serverSideResponse.headers.append(Header::ContentType,
+ "text(this is a \\)comment)/ (this (too)) plain; charset = \"UTF-32\";extraparameter=bar"_ba);
+ serverSideResponse.body = encUTF32(sourceString);
+ VERIFY_TEXT_REPLY_OK;
+
+ // Successful UTF-32 with spec-wise allowed extra leading content in the Content-Type header value
serverSideResponse.headers.removeAll(Header::ContentType);
serverSideResponse.headers.append(Header::ContentType,
- "text/plain; charset = \"UTF-32\";extraparameter=bar"_ba);
+ "text/plain; extraparameter=bar;charset = \"UT\\F-32\""_ba);
serverSideResponse.body = encUTF32(sourceString);
VERIFY_TEXT_REPLY_OK;
@@ -800,7 +833,7 @@ void tst_QRestAccessManager::textStreaming()
serverSideResponse.body = encUTF8(expectedData);
serverSideResponse.status = 200;
- server.setHandler([&](HttpData, HttpData &response, ResponseControl &control) {
+ server.setHandler([&](const HttpData &, HttpData &response, ResponseControl &control) {
response = serverSideResponse;
responseControl = &control; // store for later
control.responseChunkSize = 5; // tell testserver to send data in chunks of this size