From 4f64330b39bd528a84241e976baa464c6dc89de1 Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Sat, 13 Apr 2019 02:57:22 +0900 Subject: Find proper mime type for QByteArray data MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QByteArray can be used for any data that QMimeDatabase understands Change-Id: I17d8f0060065c0a93fc4a8cf6450bdd11aed49d0 Reviewed-by: Edward Welbourne Reviewed-by: MÃ¥rten Nordheim Reviewed-by: Mikhail Svetkin Reviewed-by: Jesus Fernandez --- src/httpserver/qhttpserverresponse.cpp | 7 +- tests/auto/auto.pro | 3 +- tests/auto/qhttpserver/tst_qhttpserver.cpp | 4 +- tests/auto/qhttpserverresponder/index.html | 2 +- tests/auto/qhttpserverresponse/data/empty | 0 tests/auto/qhttpserverresponse/data/image.jpeg | Bin 0 -> 5514 bytes tests/auto/qhttpserverresponse/data/image.png | Bin 0 -> 1032 bytes tests/auto/qhttpserverresponse/data/image.svg | 67 +++++++++++++++ tests/auto/qhttpserverresponse/data/text.html | 1 + tests/auto/qhttpserverresponse/data/text.plain | 1 + .../qhttpserverresponse/qhttpserverresponse.pro | 7 ++ .../tst_qhttpserverresponse.cpp | 93 +++++++++++++++++++++ 12 files changed, 178 insertions(+), 7 deletions(-) create mode 100644 tests/auto/qhttpserverresponse/data/empty create mode 100644 tests/auto/qhttpserverresponse/data/image.jpeg create mode 100644 tests/auto/qhttpserverresponse/data/image.png create mode 100644 tests/auto/qhttpserverresponse/data/image.svg create mode 100644 tests/auto/qhttpserverresponse/data/text.html create mode 100644 tests/auto/qhttpserverresponse/data/text.plain create mode 100644 tests/auto/qhttpserverresponse/qhttpserverresponse.pro create mode 100644 tests/auto/qhttpserverresponse/tst_qhttpserverresponse.cpp diff --git a/src/httpserver/qhttpserverresponse.cpp b/src/httpserver/qhttpserverresponse.cpp index cf02795..870be8d 100644 --- a/src/httpserver/qhttpserverresponse.cpp +++ b/src/httpserver/qhttpserverresponse.cpp @@ -33,6 +33,7 @@ #include #include +#include QT_BEGIN_NAMESPACE @@ -54,17 +55,17 @@ QHttpServerResponse::QHttpServerResponse(const QHttpServerResponse::StatusCode s } QHttpServerResponse::QHttpServerResponse(const char *data) - : QHttpServerResponse(mimeTextHtml, QByteArray(data)) + : QHttpServerResponse(QByteArray(data)) { } QHttpServerResponse::QHttpServerResponse(const QString &data) - : QHttpServerResponse(mimeTextHtml, data.toUtf8()) + : QHttpServerResponse(data.toUtf8()) { } QHttpServerResponse::QHttpServerResponse(const QByteArray &data) - : QHttpServerResponse(mimeTextHtml, data) + : QHttpServerResponse(QMimeDatabase().mimeTypeForData(data).name().toLocal8Bit(), data) { } diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index d95dca9..473a337 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -5,4 +5,5 @@ SUBDIRS = \ qabstracthttpserver \ qhttpserver \ qhttpserverresponder \ - qhttpserverrouter + qhttpserverrouter \ + qhttpserverresponse diff --git a/tests/auto/qhttpserver/tst_qhttpserver.cpp b/tests/auto/qhttpserver/tst_qhttpserver.cpp index 9fb33d1..f8c4aa3 100644 --- a/tests/auto/qhttpserver/tst_qhttpserver.cpp +++ b/tests/auto/qhttpserver/tst_qhttpserver.cpp @@ -452,7 +452,7 @@ void tst_QHttpServer::routePost_data() QTest::addRow("post-body") << "/post-body" << 200 - << "text/html" + << "text/plain" << "some post data" << "some post data"; @@ -463,7 +463,7 @@ void tst_QHttpServer::routePost_data() QTest::addRow("post-body - huge body, chunk test") << "/post-body" << 200 - << "text/html" + << "text/plain" << body << body; } diff --git a/tests/auto/qhttpserverresponder/index.html b/tests/auto/qhttpserverresponder/index.html index 6c70bcf..18ecdcb 100644 --- a/tests/auto/qhttpserverresponder/index.html +++ b/tests/auto/qhttpserverresponder/index.html @@ -1 +1 @@ - \ No newline at end of file + diff --git a/tests/auto/qhttpserverresponse/data/empty b/tests/auto/qhttpserverresponse/data/empty new file mode 100644 index 0000000..e69de29 diff --git a/tests/auto/qhttpserverresponse/data/image.jpeg b/tests/auto/qhttpserverresponse/data/image.jpeg new file mode 100644 index 0000000..a5ee3e1 Binary files /dev/null and b/tests/auto/qhttpserverresponse/data/image.jpeg differ diff --git a/tests/auto/qhttpserverresponse/data/image.png b/tests/auto/qhttpserverresponse/data/image.png new file mode 100644 index 0000000..39a4a26 Binary files /dev/null and b/tests/auto/qhttpserverresponse/data/image.png differ diff --git a/tests/auto/qhttpserverresponse/data/image.svg b/tests/auto/qhttpserverresponse/data/image.svg new file mode 100644 index 0000000..cb8989b --- /dev/null +++ b/tests/auto/qhttpserverresponse/data/image.svg @@ -0,0 +1,67 @@ + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/tests/auto/qhttpserverresponse/data/text.html b/tests/auto/qhttpserverresponse/data/text.html new file mode 100644 index 0000000..18ecdcb --- /dev/null +++ b/tests/auto/qhttpserverresponse/data/text.html @@ -0,0 +1 @@ + diff --git a/tests/auto/qhttpserverresponse/data/text.plain b/tests/auto/qhttpserverresponse/data/text.plain new file mode 100644 index 0000000..980a0d5 --- /dev/null +++ b/tests/auto/qhttpserverresponse/data/text.plain @@ -0,0 +1 @@ +Hello World! diff --git a/tests/auto/qhttpserverresponse/qhttpserverresponse.pro b/tests/auto/qhttpserverresponse/qhttpserverresponse.pro new file mode 100644 index 0000000..dc0b359 --- /dev/null +++ b/tests/auto/qhttpserverresponse/qhttpserverresponse.pro @@ -0,0 +1,7 @@ +CONFIG += testcase +TARGET = tst_qhttpserverresponse +SOURCES += tst_qhttpserverresponse.cpp + +QT = httpserver testlib + +TESTDATA += data/ diff --git a/tests/auto/qhttpserverresponse/tst_qhttpserverresponse.cpp b/tests/auto/qhttpserverresponse/tst_qhttpserverresponse.cpp new file mode 100644 index 0000000..e531c48 --- /dev/null +++ b/tests/auto/qhttpserverresponse/tst_qhttpserverresponse.cpp @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2019 Tasuku Suzuki +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtHttpServer module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include +#include + +QT_BEGIN_NAMESPACE + +class tst_QHttpServerResponse : public QObject +{ + Q_OBJECT + +private slots: + void mimeTypeDetection_data(); + void mimeTypeDetection(); +}; + +void tst_QHttpServerResponse::mimeTypeDetection_data() +{ + QTest::addColumn("content"); + QTest::addColumn("mimeType"); + + QTest::addRow("application/x-zerosize") + << QFINDTESTDATA("data/empty") + << QByteArrayLiteral("application/x-zerosize"); + + QTest::addRow("text/plain") + << QFINDTESTDATA("data/text.plain") + << QByteArrayLiteral("text/plain"); + + QTest::addRow("text/html") + << QFINDTESTDATA("data/text.html") + << QByteArrayLiteral("text/html"); + + QTest::addRow("image/png") + << QFINDTESTDATA("data/image.png") + << QByteArrayLiteral("image/png"); + + QTest::addRow("image/jpeg") + << QFINDTESTDATA("data/image.jpeg") + << QByteArrayLiteral("image/jpeg"); + + QTest::addRow("image/svg+xml") + << QFINDTESTDATA("data/image.svg") + << QByteArrayLiteral("image/svg+xml"); +} + +void tst_QHttpServerResponse::mimeTypeDetection() +{ + QFETCH(QString, content); + QFETCH(QByteArray, mimeType); + + QFile file(content); + file.open(QFile::ReadOnly); + QHttpServerResponse response(file.readAll()); + file.close(); + + QCOMPARE(response.mimeType(), mimeType); +} + +QT_END_NAMESPACE + +QTEST_MAIN(tst_QHttpServerResponse) + +#include "tst_qhttpserverresponse.moc" -- cgit v1.2.3