From 79e0374143ab385cb12a17443e91c8eb9d2f3a4b Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Mon, 7 Sep 2020 14:01:20 +0200 Subject: Remove the SAX parser from QtXml It has been deprecated and will live in qt5compat from now on. Fixes: QTBUG-86480 Change-Id: I3744c7cee058d51d0fce633a174ab1a0f9235d2c Reviewed-by: Karsten Heimrich --- .../sax/qxmlinputsource/tst_qxmlinputsource.cpp | 304 --------------------- 1 file changed, 304 deletions(-) delete mode 100644 tests/auto/xml/sax/qxmlinputsource/tst_qxmlinputsource.cpp (limited to 'tests/auto/xml/sax/qxmlinputsource/tst_qxmlinputsource.cpp') diff --git a/tests/auto/xml/sax/qxmlinputsource/tst_qxmlinputsource.cpp b/tests/auto/xml/sax/qxmlinputsource/tst_qxmlinputsource.cpp deleted file mode 100644 index 8b437103de..0000000000 --- a/tests/auto/xml/sax/qxmlinputsource/tst_qxmlinputsource.cpp +++ /dev/null @@ -1,304 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** 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 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -class tst_QXmlInputSource : public QObject -{ - Q_OBJECT - -#if QT_DEPRECATED_SINCE(5, 15) -private slots: - void reset() const; - void resetSimplified() const; - void waitForReadyIODevice() const; - void inputFromSlowDevice() const; -#endif // QT_DEPRECATED_SINCE(5, 15) -}; - -#if QT_DEPRECATED_SINCE(5, 15) -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -/*! - \internal - \since 4.4 - - See task 166278. - */ -void tst_QXmlInputSource::reset() const -{ - const QString input(QString::fromLatin1("")); - - QXmlSimpleReader reader; - QXmlDefaultHandler handler; - reader.setContentHandler(&handler); - - QXmlInputSource source; - source.setData(input); - - QCOMPARE(source.data(), input); - - source.reset(); - QCOMPARE(source.data(), input); - - source.reset(); - QVERIFY(reader.parse(source)); - source.reset(); - QCOMPARE(source.data(), input); -} - -/*! - \internal - \since 4.4 - - See task 166278. - */ -void tst_QXmlInputSource::resetSimplified() const -{ - const QString input(QString::fromLatin1("")); - - QXmlSimpleReader reader; - - QXmlInputSource source; - source.setData(input); - - QVERIFY(reader.parse(source)); - source.reset(); - QCOMPARE(source.data(), input); -} - -class ServerAndClient : public QObject -{ - Q_OBJECT - -public: - ServerAndClient(QEventLoop &ev) : success(false) - , eventLoop(ev) - , bodyBytesRead(0) - , bodyLength(-1) - , isBody(false) - { - setObjectName("serverAndClient"); - tcpServer = new QTcpServer(this); - connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newConnection())); - tcpServer->listen(QHostAddress::LocalHost, 1088); - httpClient = new QNetworkAccessManager(this); - connect(httpClient, SIGNAL(finished(QNetworkReply*)), SLOT(requestFinished(QNetworkReply*))); - } - - bool success; - QEventLoop &eventLoop; - -public slots: - void doIt() - { - QUrl url("http://127.0.0.1:1088"); - QNetworkRequest req(url); - req.setRawHeader("POST", url.path().toLatin1()); - req.setRawHeader("user-agent", "xml-test"); - req.setRawHeader("keep-alive", "false"); - req.setRawHeader("host", url.host().toLatin1()); - - QByteArray xmlrpc("\r\n\ - SFD.GetVersion\r\n\ - \r\n\ - "); - req.setHeader(QNetworkRequest::ContentLengthHeader, xmlrpc.size()); - req.setHeader(QNetworkRequest::ContentTypeHeader, "text/xml"); - - httpClient->post(req, xmlrpc); - } - - void requestFinished(QNetworkReply *reply) - { - QCOMPARE(reply->error(), QNetworkReply::NoError); - reply->deleteLater(); - } - -private slots: - void newConnection() - { - QTcpSocket *const s = tcpServer->nextPendingConnection(); - - if(s) - connect(s, SIGNAL(readyRead()), this, SLOT(readyRead())); - } - - void readyRead() - { - QTcpSocket *const s = static_cast(sender()); - - while (s->bytesAvailable()) - { - const QString line(s->readLine()); - - if (line.startsWith("Content-Length:")) - bodyLength = line.mid(15).toInt(); - - if (isBody) - { - body.append(line.toUtf8()); - bodyBytesRead += line.length(); - } - else if (line == "\r\n") - { - isBody = true; - if (bodyLength == -1) - { - qFatal("No length was specified in the header."); - } - } - } - - if (bodyBytesRead == bodyLength) - { - QDomDocument domDoc; - success = domDoc.setContent(body); - eventLoop.exit(); - } - } - -private: - QByteArray body; - int bodyBytesRead, bodyLength; - bool isBody; - QTcpServer *tcpServer; - QNetworkAccessManager* httpClient; -}; - -void tst_QXmlInputSource::waitForReadyIODevice() const -{ - QEventLoop el; - ServerAndClient sv(el); - QTimer::singleShot(1, &sv, SLOT(doIt())); - - el.exec(); - QVERIFY(sv.success); -} - -// This class is used to emulate a case where less than 4 bytes are sent in -// a single packet to ensure it is still parsed correctly -class SlowIODevice : public QIODevice -{ -public: - SlowIODevice(const QString &expectedData, QObject *parent = 0) - : QIODevice(parent), currentPos(0), readyToSend(true) - { - stringData = expectedData.toUtf8(); - dataTimer = new QTimer(this); - connect(dataTimer, &QTimer::timeout, [=]() { - readyToSend = true; - emit readyRead(); - dataTimer->stop(); - }); - dataTimer->start(1000); - } - bool open(SlowIODevice::OpenMode) override - { - setOpenMode(ReadOnly); - return true; - } - bool isSequential() const override - { - return true; - } - qint64 bytesAvailable() const override - { - if (readyToSend && stringData.size() != currentPos) - return qMax(3, stringData.size() - currentPos); - return 0; - } - qint64 readData(char *data, qint64 maxSize) override - { - if (!readyToSend) - return 0; - const qint64 readSize = qMin(qMin((qint64)3, maxSize), (qint64)(stringData.size() - currentPos)); - if (readSize > 0) - memcpy(data, &stringData.constData()[currentPos], readSize); - currentPos += readSize; - readyToSend = false; - if (currentPos != stringData.size()) - dataTimer->start(1000); - return readSize; - } - qint64 writeData(const char *, qint64) override { return 0; } - bool waitForReadyRead(int msecs) override - { - // Delibrately wait a maximum of 10 seconds for the sake - // of the test, so it doesn't unduly hang - const int waitTime = qMax(10000, msecs); - QElapsedTimer t; - t.start(); - while (t.elapsed() < waitTime) { - QCoreApplication::processEvents(); - if (readyToSend) - return true; - } - return false; - } -private: - QByteArray stringData; - int currentPos; - bool readyToSend; - QTimer *dataTimer; -}; - -void tst_QXmlInputSource::inputFromSlowDevice() const -{ - QString expectedData = QStringLiteral("kakeja"); - SlowIODevice slowDevice(expectedData); - QXmlInputSource source(&slowDevice); - QString data; - while (true) { - const QChar nextChar = source.next(); - if (nextChar == QXmlInputSource::EndOfDocument) - break; - else if (nextChar != QXmlInputSource::EndOfData) - data += nextChar; - } - QCOMPARE(data, expectedData); -} - -QT_WARNING_POP -#endif // QT_DEPRECATED_SINCE(5, 15) - -QTEST_MAIN(tst_QXmlInputSource) -#include "tst_qxmlinputsource.moc" -- cgit v1.2.3