summaryrefslogtreecommitdiffstats
path: root/tests/auto/xml
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/xml')
-rw-r--r--tests/auto/xml/CMakeLists.txt2
-rw-r--r--tests/auto/xml/dom/CMakeLists.txt4
-rw-r--r--tests/auto/xml/dom/qdom/CMakeLists.txt11
-rw-r--r--tests/auto/xml/dom/qdom/tst_qdom.cpp139
4 files changed, 99 insertions, 57 deletions
diff --git a/tests/auto/xml/CMakeLists.txt b/tests/auto/xml/CMakeLists.txt
index 4b8cc88d78..92ac1870f6 100644
--- a/tests/auto/xml/CMakeLists.txt
+++ b/tests/auto/xml/CMakeLists.txt
@@ -1 +1,3 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(dom)
diff --git a/tests/auto/xml/dom/CMakeLists.txt b/tests/auto/xml/dom/CMakeLists.txt
index a19aa5c576..daa837c2cf 100644
--- a/tests/auto/xml/dom/CMakeLists.txt
+++ b/tests/auto/xml/dom/CMakeLists.txt
@@ -1,6 +1,4 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-# Generated from dom.pro.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qdom)
diff --git a/tests/auto/xml/dom/qdom/CMakeLists.txt b/tests/auto/xml/dom/qdom/CMakeLists.txt
index 98e0139b2a..4eea988cc3 100644
--- a/tests/auto/xml/dom/qdom/CMakeLists.txt
+++ b/tests/auto/xml/dom/qdom/CMakeLists.txt
@@ -1,12 +1,16 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-# Generated from qdom.pro.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdom Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdom LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -20,5 +24,6 @@ qt_internal_add_test(tst_qdom
tst_qdom.cpp
LIBRARIES
Qt::Xml
+ Qt::XmlPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/xml/dom/qdom/tst_qdom.cpp b/tests/auto/xml/dom/qdom/tst_qdom.cpp
index 71c65ea78d..b73dbc49e2 100644
--- a/tests/auto/xml/dom/qdom/tst_qdom.cpp
+++ b/tests/auto/xml/dom/qdom/tst_qdom.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QBuffer>
@@ -15,6 +15,7 @@
#include <QtXml>
#include <QVariant>
#include <cmath>
+#include <QtXml/private/qdom_p.h>
QT_FORWARD_DECLARE_CLASS(QDomDocument)
QT_FORWARD_DECLARE_CLASS(QDomNode)
@@ -105,6 +106,8 @@ private slots:
void DTDInternalSubset() const;
void DTDInternalSubset_data() const;
void QTBUG49113_dontCrashWithNegativeIndex() const;
+ void standalone();
+ void splitTextLeakMemory() const;
void cleanupTestCase() const;
@@ -178,7 +181,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 +247,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 +271,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 +421,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 +685,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());
@@ -1584,12 +1591,10 @@ void tst_QDom::nonBMPCharacters()
[invalidDataPolicy] { QDomImplementation::setInvalidDataPolicy(invalidDataPolicy); });
QDomImplementation::setInvalidDataPolicy(QDomImplementation::DropInvalidChars);
- const QString input = u"<text>Supplementary Plane: 𝄞 😂 🀄 🀶 🃪 🃋</text>"_qs;
+ const QString input = u"<text>Supplementary Plane: 𝄞 😂 🀄 🀶 🃪 🃋</text>"_s;
- 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 +1636,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 +1649,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 +1666,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 +1710,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 +1747,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 +1829,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));
}
@@ -1948,7 +1952,7 @@ void tst_QDom::germanUmlautToFile() const
QString name(QLatin1String("german"));
name += QChar(0xFC);
name += QLatin1String("umlaut");
- QCOMPARE(name.length(), 13);
+ QCOMPARE(name.size(), 13);
QDomDocument d("test");
d.appendChild(d.createElement(name));
@@ -1967,7 +1971,7 @@ void tst_QDom::germanUmlautToFile() const
const QByteArray in(inFile.readAll());
/* Check that it was wwritten out correctly. */
- QCOMPARE(in.length(), 34);
+ QCOMPARE(in.size(), 34);
QCOMPARE(in, baseline.toUtf8());
inFile.close();
@@ -1992,7 +1996,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,24 +2012,17 @@ 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);
- QVERIFY(docAsString == QString::fromLatin1("<a>\n<b p:c=\"\" xmlns:p=\"NS\" p:d=\"\"/>\n</a>\n") ||
- docAsString == QString::fromLatin1("<a>\n<b p:c=\"\" p:d=\"\" xmlns:p=\"NS\"/>\n</a>\n") ||
- docAsString == QString::fromLatin1("<a>\n<b p:d=\"\" p:c=\"\" xmlns:p=\"NS\"/>\n</a>\n") ||
- docAsString == QString::fromLatin1("<a>\n<b p:d=\"\" xmlns:p=\"NS\" p:c=\"\"/>\n</a>\n") ||
- docAsString == QString::fromLatin1("<a>\n<b xmlns:p=\"NS\" p:c=\"\" p:d=\"\"/>\n</a>\n") ||
- docAsString == QString::fromLatin1("<a>\n<b xmlns:p=\"NS\" p:d=\"\" p:c=\"\"/>\n</a>\n")
- );
+ QCOMPARE(docAsString, "<a>\n<b p:c=\"\" p:d=\"\" xmlns:p=\"NS\"/>\n</a>\n");
}
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 +2128,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);
}
@@ -2230,13 +2228,38 @@ void tst_QDom::QTBUG49113_dontCrashWithNegativeIndex() const
QVERIFY(node.isNull());
}
+void tst_QDom::standalone()
+{
+ {
+ QDomDocument doc;
+ const QString dtd("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
+ "<Test/>\n");
+ doc.setContent(dtd);
+ QVERIFY(doc.toString().contains("standalone=\'no\'"));
+ }
+ {
+ QDomDocument doc;
+ const QString dtd("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<Test/>\n");
+ doc.setContent(dtd);
+ QVERIFY(!doc.toString().contains("standalone"));
+ }
+ {
+ QDomDocument doc;
+ const QString dtd("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n"
+ "<Test/>\n");
+ doc.setContent(dtd);
+ QVERIFY(doc.toString().contains("standalone=\'yes\'"));
+ }
+}
+
void tst_QDom::DTDInternalSubset() const
{
QFETCH( QString, doc );
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);
}
@@ -2294,5 +2317,19 @@ void tst_QDom::DTDInternalSubset_data() const
<< internalSubset0;
}
+void tst_QDom::splitTextLeakMemory() const
+{
+ QDomDocument doc;
+ QDomElement top = doc.createElement("top");
+ QDomText text = doc.createTextNode("abcdefgh");
+ top.appendChild(text);
+ QDomText end = text.splitText(2);
+ QCOMPARE(text.data(), "ab"_L1);
+ QCOMPARE(end.data(), "cdefgh"_L1);
+ // only the parent node and the document have a reference on the nodes
+ QCOMPARE(text.impl->ref.loadRelaxed(), 2);
+ QCOMPARE(end.impl->ref.loadRelaxed(), 2);
+}
+
QTEST_MAIN(tst_QDom)
#include "tst_qdom.moc"