diff options
author | Sona Kurazyan <sona.kurazyan@qt.io> | 2022-06-30 13:34:44 +0200 |
---|---|---|
committer | Sona Kurazyan <sona.kurazyan@qt.io> | 2022-08-17 17:02:27 +0200 |
commit | e684c25b859cfa1cf2cd93c8c9be374ee6f6a289 (patch) | |
tree | c60bd09d83a32f446473032069ca731052ee54eb | |
parent | 2f7a78cd7b3351bc7a1a209d0822769d111f246b (diff) |
QDomDocument: deprecate old setContent() overloads in favor of new ones
And use the new overloads in examples and tests.
[ChangeLog][QtXml][QDomDocument] Deprecated the old setContent()
overloads in favor of the new ones that take ParseOptions and
ParseError.
Task-number: QTBUG-104507
Change-Id: I61b37eba2fe3002c03bddc90f6877676d539f7ec
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r-- | examples/xml/dombookmarks/xbeltree.cpp | 15 | ||||
-rw-r--r-- | src/xml/dom/qdom.cpp | 14 | ||||
-rw-r--r-- | src/xml/dom/qdom.h | 9 | ||||
-rw-r--r-- | tests/auto/xml/dom/qdom/tst_qdom.cpp | 80 |
4 files changed, 69 insertions, 49 deletions
diff --git a/examples/xml/dombookmarks/xbeltree.cpp b/examples/xml/dombookmarks/xbeltree.cpp index ed3ab791bd..5d2e14f198 100644 --- a/examples/xml/dombookmarks/xbeltree.cpp +++ b/examples/xml/dombookmarks/xbeltree.cpp @@ -53,17 +53,14 @@ void XbelTree::contextMenuEvent(QContextMenuEvent *event) bool XbelTree::read(QIODevice *device) { - QString errorStr; - int errorLine; - int errorColumn; - - if (!domDocument.setContent(device, true, &errorStr, &errorLine, - &errorColumn)) { + QDomDocument::ParseResult result = + domDocument.setContent(device, QDomDocument::ParseOption::UseNamespaceProcessing); + if (!result) { QMessageBox::information(window(), tr("DOM Bookmarks"), tr("Parse error at line %1, column %2:\n%3") - .arg(errorLine) - .arg(errorColumn) - .arg(errorStr)); + .arg(result.errorLine) + .arg(result.errorColumn) + .arg(result.errorMessage)); return false; } diff --git a/src/xml/dom/qdom.cpp b/src/xml/dom/qdom.cpp index b2fcac7f1b..d02f3be7ec 100644 --- a/src/xml/dom/qdom.cpp +++ b/src/xml/dom/qdom.cpp @@ -6031,8 +6031,12 @@ QDomDocument::~QDomDocument() { } +#if QT_DEPRECATED_SINCE(6, 8) +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED /*! \overload + \deprecated [6.8] Use the overloads taking ParseOptions instead. This function reads the XML document from the string \a text, returning true if the content was successfully parsed; otherwise returns \c false. @@ -6048,6 +6052,8 @@ bool QDomDocument::setContent(const QString& text, bool namespaceProcessing, } /*! + \deprecated [6.8] Use the overload taking ParseOptions instead. + This function parses the XML document from the byte array \a data and sets it as the content of the document. It tries to detect the encoding of the document as required by the XML @@ -6125,6 +6131,7 @@ static inline void unpackParseResult(const QDomDocument::ParseResult &parseResul /*! \overload + \deprecated [6.8] Use the overload taking ParseOptions instead. This function reads the XML document from the IO device \a dev, returning true if the content was successfully parsed; otherwise returns \c false. @@ -6144,6 +6151,7 @@ bool QDomDocument::setContent(QIODevice* dev, bool namespaceProcessing, /*! \overload + \deprecated [6.8] Use the overload returning ParseResult instead. This function reads the XML document from the string \a text, returning true if the content was successfully parsed; otherwise returns \c false. @@ -6159,6 +6167,7 @@ bool QDomDocument::setContent(const QString& text, QString *errorMsg, int *error /*! \overload + \deprecated [6.8] Use the overload returning ParseResult instead. This function reads the XML document from the byte array \a buffer, returning true if the content was successfully parsed; otherwise returns @@ -6173,7 +6182,7 @@ bool QDomDocument::setContent(const QByteArray& buffer, QString *errorMsg, int * /*! \overload - \deprecated + \deprecated [6.8] Use the overload returning ParseResult instead. This function reads the XML document from the IO device \a dev, returning true if the content was successfully parsed; otherwise returns \c false. @@ -6188,6 +6197,7 @@ bool QDomDocument::setContent(QIODevice* dev, QString *errorMsg, int *errorLine, /*! \overload \since 5.15 + \deprecated [6.8] Use the overload taking ParseOptions instead. This function reads the XML document from the QXmlStreamReader \a reader and parses it. Returns \c true if the content was successfully parsed; @@ -6211,6 +6221,8 @@ bool QDomDocument::setContent(QXmlStreamReader *reader, bool namespaceProcessing unpackParseResult(result, errorMsg, errorLine, errorColumn); return bool(result); } +QT_WARNING_POP +#endif // QT_DEPRECATED_SINCE(6, 8) /*! \enum QDomDocument::ParseOption diff --git a/src/xml/dom/qdom.h b/src/xml/dom/qdom.h index 390a319553..7333b60774 100644 --- a/src/xml/dom/qdom.h +++ b/src/xml/dom/qdom.h @@ -313,14 +313,23 @@ public: inline QDomNode::NodeType nodeType() const { return DocumentNode; } // Qt extensions +#if QT_DEPRECATED_SINCE(6, 8) + QT_DEPRECATED_VERSION_X_6_8("Use the overload taking ParseOptions instead.") bool setContent(const QByteArray &text, bool namespaceProcessing, QString *errorMsg = nullptr, int *errorLine = nullptr, int *errorColumn = nullptr); + QT_DEPRECATED_VERSION_X_6_8("Use the overload taking ParseOptions instead.") bool setContent(const QString &text, bool namespaceProcessing, QString *errorMsg = nullptr, int *errorLine = nullptr, int *errorColumn = nullptr); + QT_DEPRECATED_VERSION_X_6_8("Use the overload taking ParseOptions instead.") bool setContent(QIODevice *dev, bool namespaceProcessing, QString *errorMsg = nullptr, int *errorLine = nullptr, int *errorColumn = nullptr); + QT_DEPRECATED_VERSION_X_6_8("Use the overload returning ParseResult instead.") bool setContent(const QByteArray &text, QString *errorMsg, int *errorLine = nullptr, int *errorColumn = nullptr); + QT_DEPRECATED_VERSION_X_6_8("Use the overload returning ParseResult instead.") bool setContent(const QString &text, QString *errorMsg, int *errorLine = nullptr, int *errorColumn = nullptr); + QT_DEPRECATED_VERSION_X_6_8("Use the overload returning ParseResult instead.") bool setContent(QIODevice *dev, QString *errorMsg, int *errorLine = nullptr, int *errorColumn = nullptr); + QT_DEPRECATED_VERSION_X_6_8("Use the overload taking ParseOptions instead.") bool setContent(QXmlStreamReader *reader, bool namespaceProcessing, QString *errorMsg = nullptr, int *errorLine = nullptr, int *errorColumn = nullptr); +#endif // QT_DEPRECATED_SINCE(6, 8) Q_WEAK_OVERLOAD ParseResult setContent(const QByteArray &data, ParseOptions options = ParseOption::Default) diff --git a/tests/auto/xml/dom/qdom/tst_qdom.cpp b/tests/auto/xml/dom/qdom/tst_qdom.cpp index 71c65ea78d..47412dc8f0 100644 --- a/tests/auto/xml/dom/qdom/tst_qdom.cpp +++ b/tests/auto/xml/dom/qdom/tst_qdom.cpp @@ -178,7 +178,11 @@ void tst_QDom::setContent() QDomDocument domDoc; QXmlStreamReader reader(doc); - QVERIFY(domDoc.setContent(&reader, true)); +#if QT_DEPRECATED_SINCE(6, 8) + QT_IGNORE_DEPRECATIONS(domDoc.setContent(&reader, true);) +#else + QVERIFY(domDoc.setContent(&reader, QDomDocument::ParseOption::UseNamespaceProcessing)); +#endif // QT_DEPRECATED_SINCE(6, 8) QString eRes; QTextStream ts( &eRes, QIODevice::WriteOnly ); @@ -240,6 +244,9 @@ void tst_QDom::setContentOverloads() QVERIFY(doc.setContent(&buffer, QDomDocument::ParseOption::Default)); buffer.reset(); +#if QT_DEPRECATED_SINCE(6, 8) +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED // With output param QVERIFY(doc.setContent(data, &errorMessage)); QVERIFY(doc.setContent(text, &errorMessage)); @@ -261,6 +268,8 @@ void tst_QDom::setContentOverloads() QVERIFY(doc.setContent(&reader, false, &errorMessage)); QVERIFY(doc.setContent(&buffer, false, &errorMessage)); buffer.reset(); +QT_WARNING_POP +#endif // QT_DEPRECATED_SINCE(6, 8) } void tst_QDom::parseOptions() @@ -409,13 +418,11 @@ void tst_QDom::toString_01() QVERIFY2(f.open(QIODevice::ReadOnly), qPrintable(QString::fromLatin1("Failed to open file %1, file error: %2").arg(fileName).arg(f.error()))); QDomDocument doc; - QString errorMsg; - int errorLine; - int errorCol; - - QVERIFY(doc.setContent( &f, &errorMsg, &errorLine, &errorCol )); /*, - QString("QDomDocument::setContent() failed: %1 in line %2, column %3") - .arg( errorMsg ).arg( errorLine ).arg( errorCol )); */ + QDomDocument::ParseResult result = doc.setContent(&f, QDomDocument::ParseOption::Default); + QVERIFY2(result, + qPrintable(u"QDomDocument::setContent() failed (%1:%2): %3"_s.arg(result.errorLine) + .arg(result.errorColumn) + .arg(result.errorMessage))); // test toString()'s invariant with different indenting depths for ( int i=0; i<5; i++ ) { QString toStr = doc.toString( i ); @@ -675,17 +682,14 @@ void tst_QDom::saveWithSerialization() const QVERIFY(readDevice.open(QIODevice::ReadOnly)); QDomDocument result; + QDomDocument::ParseResult parseResult = + result.setContent(&readDevice, QDomDocument::ParseOption::Default); - QString msg; - int line = 0; - int column = 0; - - QVERIFY2(result.setContent(&readDevice, &msg, &line, &column), + QVERIFY2(parseResult, qPrintable(QString::fromLatin1("Failed: line %2, column %3: %4, content: %5") - .arg(QString::number(line), - QString::number(column), - msg, - QString::fromUtf8(storage)))); + .arg(QString::number(parseResult.errorLine), + QString::number(parseResult.errorColumn), + parseResult.errorMessage, QString::fromUtf8(storage)))); if (!compareDocuments(doc, result)) { QCOMPARE(doc.toString(), result.toString()); @@ -1586,10 +1590,8 @@ void tst_QDom::nonBMPCharacters() const QString input = u"<text>Supplementary Plane: 𝄞 😂 🀄 🀶 🃪 🃋</text>"_qs; - QString errorMsg; QDomDocument doc; - doc.setContent(input, &errorMsg); - QVERIFY(errorMsg.isEmpty()); + QVERIFY(doc.setContent(input, QDomDocument::ParseOption::Default)); QCOMPARE(doc.toString(-1), input); } @@ -1631,10 +1633,8 @@ void tst_QDom::roundTripCDATA() const { const QString input = u"<?xml version='1.0' encoding='UTF-8'?>\n" "<content><![CDATA[]]></content>\n"_s; - QString errorMsg; QDomDocument doc; - QVERIFY(doc.setContent(input, false, &errorMsg)); - QVERIFY(errorMsg.isEmpty()); + QVERIFY(doc.setContent(input, QDomDocument::ParseOption::Default)); QCOMPARE(doc.toString(), input); } @@ -1646,7 +1646,7 @@ void tst_QDom::normalizeEndOfLine() const QVERIFY(buffer.open(QIODevice::ReadOnly)); QDomDocument doc; - QVERIFY(doc.setContent(&buffer, true)); + QVERIFY(doc.setContent(&buffer, QDomDocument::ParseOption::UseNamespaceProcessing)); const QString expected(QLatin1String("<a>\nc\nc\na\na</a>")); @@ -1663,7 +1663,7 @@ void tst_QDom::normalizeAttributes() const QVERIFY(buffer.open(QIODevice::ReadOnly)); QDomDocument doc; - QVERIFY(doc.setContent(&buffer, true)); + QVERIFY(doc.setContent(&buffer, QDomDocument::ParseOption::UseNamespaceProcessing)); QCOMPARE(doc.documentElement().attribute(QLatin1String("attribute")), QString::fromLatin1("a a")); } @@ -1707,17 +1707,18 @@ void tst_QDom::serializeNamespaces() const QDomDocument doc; QByteArray ba(input); QXmlStreamReader streamReader(input); - QVERIFY(doc.setContent(&streamReader, true)); + QVERIFY(doc.setContent(&streamReader, QDomDocument::ParseOption::UseNamespaceProcessing)); const QByteArray serialized(doc.toByteArray()); QDomDocument doc2; - QVERIFY(doc2.setContent(doc.toString(), true)); + QVERIFY(doc2.setContent(doc.toString(), QDomDocument::ParseOption::UseNamespaceProcessing)); /* Here we test that it roundtrips. */ QVERIFY(isDeepEqual(doc2, doc)); QDomDocument doc3; - QVERIFY(doc3.setContent(QString::fromLatin1(serialized.constData()), true)); + QVERIFY(doc3.setContent(QString::fromLatin1(serialized.constData()), + QDomDocument::ParseOption::UseNamespaceProcessing)); QVERIFY(isDeepEqual(doc3, doc)); } @@ -1743,7 +1744,7 @@ void tst_QDom::flagUndeclaredNamespace() const QDomDocument doc; QByteArray ba(input); QXmlStreamReader streamReader(ba); - QVERIFY(!doc.setContent(&streamReader, true)); + QVERIFY(!doc.setContent(&streamReader, QDomDocument::ParseOption::UseNamespaceProcessing)); } void tst_QDom::indentComments() const @@ -1825,12 +1826,12 @@ void tst_QDom::namespacedAttributes() const "</xan:td>\n"; QDomDocument one("document"); - QString error; - bool docParsed = one.setContent(QByteArray(xml), true, &error); - QVERIFY2(docParsed, qPrintable(error)); + QDomDocument::ParseResult result = + one.setContent(QByteArray(xml), QDomDocument::ParseOption::UseNamespaceProcessing); + QVERIFY2(result, qPrintable(result.errorMessage)); QDomDocument two("document2"); - docParsed = two.setContent(one.toByteArray(2), true, &error); - QVERIFY2(docParsed, qPrintable(error)); + result = two.setContent(one.toByteArray(2), QDomDocument::ParseOption::UseNamespaceProcessing); + QVERIFY2(result, qPrintable(result.errorMessage)); QVERIFY(isDeepEqual(one, two)); } @@ -1992,7 +1993,8 @@ void tst_QDom::crashInSetContent() const QDomImplementation::setInvalidDataPolicy(QDomImplementation::ReturnNullNode); QDomDocument docImport; - QCOMPARE(docImport.setContent(QLatin1String("<a:>text</a:>"), true), false); + QVERIFY(!docImport.setContent(QLatin1String("<a:>text</a:>"), + QDomDocument::ParseOption::UseNamespaceProcessing)); QVERIFY(docImport.setContent(QLatin1String("<?xml version=\"1.0\"?><e/>"))); } @@ -2007,7 +2009,7 @@ void tst_QDom::doubleNamespaceDeclarations() const QVERIFY(file.open(QIODevice::ReadOnly)); QXmlStreamReader streamReader(&file); - QVERIFY(doc.setContent(&streamReader, true)); + QVERIFY(doc.setContent(&streamReader, QDomDocument::ParseOption::UseNamespaceProcessing)); // tst_QDom relies on a specific QHash ordering, see QTBUG-25071 QString docAsString = doc.toString(0); @@ -2024,7 +2026,7 @@ void tst_QDom::setContentQXmlReaderOverload() const { QDomDocument doc; QXmlStreamReader streamReader(QByteArray("<e/>")); - doc.setContent(&streamReader, true); + doc.setContent(&streamReader, QDomDocument::ParseOption::UseNamespaceProcessing); QCOMPARE(doc.documentElement().nodeName(), QString::fromLatin1("e")); } @@ -2130,7 +2132,7 @@ void tst_QDom::setContentUnopenedQIODevice() const // Note: the check below is expected to fail in Qt 7. // Fix the test and remove the obsolete code from setContent(). - QVERIFY(doc.setContent(&buffer, true)); + QVERIFY(doc.setContent(&buffer, QDomDocument::ParseOption::UseNamespaceProcessing)); QCOMPARE(doc.toString().trimmed(), data); } @@ -2236,7 +2238,7 @@ void tst_QDom::DTDInternalSubset() const QFETCH( QString, internalSubset ); QXmlStreamReader reader(doc); QDomDocument document; - QVERIFY(document.setContent(&reader, true)); + QVERIFY(document.setContent(&reader, QDomDocument::ParseOption::UseNamespaceProcessing)); QCOMPARE(document.doctype().internalSubset(), internalSubset); } |