summaryrefslogtreecommitdiffstats
path: root/tests/auto/xml/dom/qdom/tst_qdom.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/xml/dom/qdom/tst_qdom.cpp')
-rw-r--r--tests/auto/xml/dom/qdom/tst_qdom.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/tests/auto/xml/dom/qdom/tst_qdom.cpp b/tests/auto/xml/dom/qdom/tst_qdom.cpp
index c537b8ec70..71c65ea78d 100644
--- a/tests/auto/xml/dom/qdom/tst_qdom.cpp
+++ b/tests/auto/xml/dom/qdom/tst_qdom.cpp
@@ -32,6 +32,8 @@ private slots:
void setContent();
void setContentOverloads();
void parseOptions();
+ void spacingOnlyNodes_data() const;
+ void spacingOnlyNodes() const;
void parseResult();
void toString_01_data();
void toString_01();
@@ -292,6 +294,65 @@ void tst_QDom::parseOptions()
}
}
+void tst_QDom::spacingOnlyNodes_data() const
+{
+ QTest::addColumn<QString>("input");
+ QTest::addColumn<QString>("expected");
+ QTest::addColumn<QDomDocument::ParseOption>("options");
+
+ QTest::newRow("spacing-only-remove")
+ << u"<a> \t \n \r</a>"_s
+ << u"<a/>"_s
+ << QDomDocument::ParseOption::Default;
+ // \r is translated to \n, see https://www.w3.org/TR/xml11/#sec-line-ends
+ QTest::newRow("spacing-only-preserve")
+ << u"<a> \t \n \r</a>"_s
+ << u"<a> \t \n \n</a>"_s
+ << QDomDocument::ParseOption::PreserveSpacingOnlyNodes;
+ QTest::newRow("mixed-text-remove")
+ << u"<a> abc \t \n \r</a>"_s
+ << u"<a> abc \t \n \n</a>"_s
+ << QDomDocument::ParseOption::Default;
+ QTest::newRow("mixed-text-preserve")
+ << u"<a> abc \t \n \r</a>"_s
+ << u"<a> abc \t \n \n</a>"_s
+ << QDomDocument::ParseOption::PreserveSpacingOnlyNodes;
+
+ // QDomDocument treats all chacarcters below as spaces (see QTBUG-105348)
+ static constexpr char16_t spaces[] = {
+ QChar::Space, QChar::Tabulation, QChar::LineFeed,
+ QChar::CarriageReturn, QChar::Nbsp,
+ 0x2002, // EN SPACE
+ 0x2003, // EM SPACE
+ 0x2009 // THIN SPACE
+ };
+
+ for (char16_t space : spaces) {
+ QTest::addRow("spacing-remove-u%04x", space)
+ << u"<a>"_s + space + u"</a>"_s
+ << u"<a/>"_s
+ << QDomDocument::ParseOption::Default;
+
+ // \r is translated to \n, see https://www.w3.org/TR/xml11/#sec-line-ends
+ char16_t expected = (space == QChar::CarriageReturn) ? char16_t(QChar::LineFeed) : space;
+ QTest::addRow("spacing-preserve-u%04x", space)
+ << u"<a>"_s + space + u"</a>"_s
+ << u"<a>"_s + expected + u"</a>"_s
+ << QDomDocument::ParseOption::PreserveSpacingOnlyNodes;
+ }
+}
+
+void tst_QDom::spacingOnlyNodes() const
+{
+ QFETCH(QString, input);
+ QFETCH(QString, expected);
+ QFETCH(QDomDocument::ParseOption, options);
+
+ QDomDocument doc;
+ QVERIFY(doc.setContent(input, options));
+ QCOMPARE(doc.toString(-1), expected);
+}
+
void tst_QDom::parseResult()
{
QString input = u"<doc xmlns:b='http://example.com/'>"