6.5.3 clean

This commit is contained in:
kleuter
2023-11-01 18:02:52 +01:00
parent bbe896803b
commit 7018d9e6c8
2170 changed files with 57471 additions and 43550 deletions

View File

@ -10,11 +10,17 @@ file(GLOB_RECURSE test_data
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
data/* XML-Test-Suite/*)
file(GLOB_RECURSE tokenError
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
tokenError/*)
qt_internal_add_test(tst_qxmlstream
SOURCES
tst_qxmlstream.cpp
LIBRARIES
Qt::Network
Qt::GuiPrivate
TESTDATA ${test_data}
TESTDATA
${test_data}
${tokenError}
)

View File

@ -0,0 +1,20 @@
<!DOCTYPE TEST [
<!ELEMENT TESTATTRIBUTE (CASE+)>
<!ELEMENT CASE (CLASS, FUNCTION)>
<!ELEMENT CLASS (#PCDATA)>
<!-- adding random ENTITY statement, as this is typical DTD content -->
<!ENTITY unite "&#x222a;">
<!ATTLIST CASE CLASS CDATA #REQUIRED>
]>
<TEST>
<CASE>
<CLASS>tst_QXmlStream</CLASS>
</CASE>
<!-- invalid DTD in XML body follows -->
<!DOCTYPE DTDTEST [
<!ELEMENT RESULT (CASE+)>
<!ATTLIST RESULT OUTPUT CDATA #REQUIRED>
]>
</TEST>

View File

@ -0,0 +1,20 @@
<!DOCTYPE TEST [
<!ELEMENT TESTATTRIBUTE (CASE+)>
<!ELEMENT CASE (CLASS, FUNCTION, DATASET, COMMENTS)>
<!ELEMENT CLASS (#PCDATA)>
<!-- adding random ENTITY statements, as this is typical DTD content -->
<!ENTITY iff "&hArr;">
<!ATTLIST CASE CLASS CDATA #REQUIRED>
]>
<!-- invalid second DTD follows -->
<!DOCTYPE SECOND [
<!ELEMENT SECONDATTRIBUTE (#PCDATA)>
<!ENTITY on "&#8728;">
]>
<TEST>
<CASE>
<CLASS>tst_QXmlStream</CLASS>
</CASE>
</TEST>

View File

@ -0,0 +1,15 @@
<!DOCTYPE TEST [
<!ELEMENT TESTATTRIBUTE (CASE+)>
<!ELEMENT CASE (CLASS, FUNCTION, DATASET, COMMENTS)>
<!ELEMENT CLASS (#PCDATA)>
<!-- adding random ENTITY statements, as this is typical DTD content -->
<!ENTITY unite "&#x222a;">
<!ATTLIST CASE CLASS CDATA #REQUIRED>
]>
<TEST>
<CASE>
<CLASS>tst_QXmlStream</CLASS>
</CASE>
</TEST>

View File

@ -585,9 +585,14 @@ private slots:
void readBack() const;
void roundTrip() const;
void roundTrip_data() const;
void test_fastScanName_data() const;
void test_fastScanName() const;
void entityExpansionLimit() const;
void tokenErrorHandling_data() const;
void tokenErrorHandling() const;
private:
static QByteArray readFile(const QString &filename);
@ -1138,6 +1143,10 @@ void tst_QXmlStream::readNextStartElement() const
}
QCOMPARE(amountOfB, 2);
// well-formed document end follows
QVERIFY(!reader.readNextStartElement());
QCOMPARE(reader.error(), QXmlStreamReader::NoError);
}
void tst_QXmlStream::readElementText() const
@ -1816,5 +1825,79 @@ void tst_QXmlStream::roundTrip() const
QCOMPARE(out, in);
}
void tst_QXmlStream::test_fastScanName_data() const
{
QTest::addColumn<QByteArray>("data");
QTest::addColumn<QXmlStreamReader::Error>("errorType");
// 4096 is the limit in QXmlStreamReaderPrivate::fastScanName()
QByteArray arr = "<a:" + QByteArray("b").repeated(4096 - 1);
QTest::newRow("data1") << arr << QXmlStreamReader::PrematureEndOfDocumentError;
arr = "<a:" + QByteArray("b").repeated(4096);
QTest::newRow("data2") << arr << QXmlStreamReader::NotWellFormedError;
arr = "<" + QByteArray("a").repeated(4000) + ":" + QByteArray("b").repeated(96);
QTest::newRow("data3") << arr << QXmlStreamReader::PrematureEndOfDocumentError;
arr = "<" + QByteArray("a").repeated(4000) + ":" + QByteArray("b").repeated(96 + 1);
QTest::newRow("data4") << arr << QXmlStreamReader::NotWellFormedError;
arr = "<" + QByteArray("a").repeated(4000 + 1) + ":" + QByteArray("b").repeated(96);
QTest::newRow("data5") << arr << QXmlStreamReader::NotWellFormedError;
}
void tst_QXmlStream::test_fastScanName() const
{
QFETCH(QByteArray, data);
QFETCH(QXmlStreamReader::Error, errorType);
QXmlStreamReader reader(data);
QXmlStreamReader::TokenType tokenType;
while (!reader.atEnd())
tokenType = reader.readNext();
QCOMPARE(tokenType, QXmlStreamReader::Invalid);
QCOMPARE(reader.error(), errorType);
}
void tst_QXmlStream::tokenErrorHandling_data() const
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<QXmlStreamReader::Error>("expectedError");
QTest::addColumn<QString>("errorKeyWord");
constexpr auto invalid = QXmlStreamReader::Error::UnexpectedElementError;
constexpr auto valid = QXmlStreamReader::Error::NoError;
QTest::newRow("DtdInBody") << "dtdInBody.xml" << invalid << "DTD";
QTest::newRow("multipleDTD") << "multipleDtd.xml" << invalid << "second DTD";
QTest::newRow("wellFormed") << "wellFormed.xml" << valid << "";
}
void tst_QXmlStream::tokenErrorHandling() const
{
QFETCH(const QString, fileName);
QFETCH(const QXmlStreamReader::Error, expectedError);
QFETCH(const QString, errorKeyWord);
const QDir dir(QFINDTESTDATA("tokenError"));
QFile file(dir.absoluteFilePath(fileName));
// Cross-compiling: Files may not be found when running test standalone
// QSKIP in that case, because the tested functionality is platform independent.
if (!file.exists())
QSKIP(QObject::tr("Testfile %1 not found.").arg(fileName).toUtf8().constData());
file.open(QIODevice::ReadOnly);
QXmlStreamReader reader(&file);
while (!reader.atEnd())
reader.readNext();
QCOMPARE(reader.error(), expectedError);
if (expectedError != QXmlStreamReader::Error::NoError)
QVERIFY(reader.errorString().contains(errorKeyWord));
}
#include "tst_qxmlstream.moc"
// vim: et:ts=4:sw=4:sts=4