Add JSON utility functions to QObjectHandler.
This commit is contained in:
@@ -20,6 +20,8 @@
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
#include <QObject>
|
||||
#include <QTest>
|
||||
|
||||
@@ -40,6 +42,12 @@ public Q_SLOTS:
|
||||
void valid(QHttpSocket *socket) {
|
||||
socket->writeError(QHttpSocket::OK);
|
||||
}
|
||||
void echo(QHttpSocket *socket) {
|
||||
QJsonDocument document;
|
||||
if (QObjectHandler::readJson(socket, document)) {
|
||||
QObjectHandler::writeJson(socket, document);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class TestQObjectHandler : public QObject
|
||||
@@ -55,24 +63,46 @@ private Q_SLOTS:
|
||||
|
||||
void TestQObjectHandler::testOldConnection_data()
|
||||
{
|
||||
QTest::addColumn<bool>("sendObject");
|
||||
QTest::addColumn<QJsonObject>("object");
|
||||
QTest::addColumn<QByteArray>("slot");
|
||||
QTest::addColumn<int>("statusCode");
|
||||
|
||||
QTest::newRow("invalid slot")
|
||||
<< false
|
||||
<< QJsonObject()
|
||||
<< QByteArray(SLOT(invalid()))
|
||||
<< static_cast<int>(QHttpSocket::InternalServerError);
|
||||
|
||||
QTest::newRow("wrong argument count")
|
||||
<< false
|
||||
<< QJsonObject()
|
||||
<< QByteArray(SLOT(wrongArgumentCount()))
|
||||
<< static_cast<int>(QHttpSocket::InternalServerError);
|
||||
|
||||
QTest::newRow("wrong argument type")
|
||||
<< false
|
||||
<< QJsonObject()
|
||||
<< QByteArray(SLOT(wrongArgumentType(int)))
|
||||
<< static_cast<int>(QHttpSocket::InternalServerError);
|
||||
|
||||
QTest::newRow("valid")
|
||||
<< false
|
||||
<< QJsonObject()
|
||||
<< QByteArray(SLOT(valid(QHttpSocket*)))
|
||||
<< static_cast<int>(QHttpSocket::OK);
|
||||
|
||||
QTest::newRow("json")
|
||||
<< true
|
||||
<< QJsonObject{{"a", "b"}, {"c", 1}}
|
||||
<< QByteArray(SLOT(echo(QHttpSocket*)))
|
||||
<< static_cast<int>(QHttpSocket::OK);
|
||||
}
|
||||
|
||||
void TestQObjectHandler::testOldConnection()
|
||||
{
|
||||
QFETCH(bool, sendObject);
|
||||
QFETCH(QJsonObject, object);
|
||||
QFETCH(QByteArray, slot);
|
||||
QFETCH(int, statusCode);
|
||||
|
||||
@@ -87,11 +117,28 @@ void TestQObjectHandler::testOldConnection()
|
||||
QSimpleHttpClient client(pair.client());
|
||||
QHttpSocket socket(pair.server(), &pair);
|
||||
|
||||
client.sendHeaders("GET", "test");
|
||||
if (sendObject) {
|
||||
QByteArray data = QJsonDocument(object).toJson();
|
||||
client.sendHeaders("POST", "test", QHttpSocket::QHttpHeaderMap{
|
||||
{"Content-Length", QByteArray::number(data.length())},
|
||||
{"Content-Type", "application/json"}
|
||||
});
|
||||
client.sendData(data);
|
||||
} else {
|
||||
client.sendHeaders("GET", "test");
|
||||
}
|
||||
|
||||
QTRY_VERIFY(socket.isHeadersParsed());
|
||||
|
||||
handler.route(&socket, socket.path());
|
||||
QTRY_COMPARE(client.statusCode(), statusCode);
|
||||
|
||||
if (sendObject) {
|
||||
QTRY_VERIFY(client.isDataReceived());
|
||||
|
||||
QJsonObject outObject = QJsonDocument::fromJson(client.data()).object();
|
||||
QCOMPARE(object, outObject);
|
||||
}
|
||||
}
|
||||
|
||||
void TestQObjectHandler::testNewConnection()
|
||||
|
||||
@@ -66,3 +66,9 @@ void QSimpleHttpClient::onReadyRead()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool QSimpleHttpClient::isDataReceived() const
|
||||
{
|
||||
return mHeaders.contains("Content-Length") &&
|
||||
mData.length() >= mHeaders.value("Content-Length").toInt();
|
||||
}
|
||||
|
||||
@@ -64,6 +64,8 @@ public:
|
||||
return mData;
|
||||
}
|
||||
|
||||
bool isDataReceived() const;
|
||||
|
||||
private Q_SLOTS:
|
||||
|
||||
void onReadyRead();
|
||||
|
||||
Reference in New Issue
Block a user