mirror of
https://github.com/crystalidea/qt6windows7.git
synced 2025-07-06 09:15:23 +08:00
6.5.3 clean
This commit is contained in:
@ -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}
|
||||
)
|
||||
|
@ -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 "∪">
|
||||
|
||||
<!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>
|
@ -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 "⇔">
|
||||
|
||||
<!ATTLIST CASE CLASS CDATA #REQUIRED>
|
||||
]>
|
||||
<!-- invalid second DTD follows -->
|
||||
<!DOCTYPE SECOND [
|
||||
<!ELEMENT SECONDATTRIBUTE (#PCDATA)>
|
||||
<!ENTITY on "∘">
|
||||
]>
|
||||
<TEST>
|
||||
<CASE>
|
||||
<CLASS>tst_QXmlStream</CLASS>
|
||||
</CASE>
|
||||
</TEST>
|
@ -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 "∪">
|
||||
|
||||
<!ATTLIST CASE CLASS CDATA #REQUIRED>
|
||||
]>
|
||||
<TEST>
|
||||
<CASE>
|
||||
<CLASS>tst_QXmlStream</CLASS>
|
||||
</CASE>
|
||||
</TEST>
|
@ -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
|
||||
|
Reference in New Issue
Block a user