From f286027e6b8fb89e05d64a2a848ec18a95934526 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 27 Sep 2018 12:46:13 +0200 Subject: [PATCH] Fix QXmlStreamWriter xmlns attribute placement Done-by: Eugenio Rustico Change-Id: Ibd6aa6cc8be9090a4fad4f96628086d8a498b8e0 Fixes: QTBUG-63434 Reviewed-by: Andy Shaw Reviewed-by: Thiago Macieira Reviewed-by: Edward Welbourne --- src/corelib/serialization/qxmlstream.cpp | 2 +- .../qxmlstream/tst_qxmlstream.cpp | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/corelib/serialization/qxmlstream.cpp b/src/corelib/serialization/qxmlstream.cpp index f18c4cc8e7..5002848d83 100644 --- a/src/corelib/serialization/qxmlstream.cpp +++ b/src/corelib/serialization/qxmlstream.cpp @@ -3956,13 +3956,13 @@ void QXmlStreamWriter::writeCurrentToken(const QXmlStreamReader &reader) writeEndDocument(); break; case QXmlStreamReader::StartElement: { + writeStartElement(reader.namespaceUri().toString(), reader.name().toString()); QXmlStreamNamespaceDeclarations namespaceDeclarations = reader.namespaceDeclarations(); for (int i = 0; i < namespaceDeclarations.size(); ++i) { const QXmlStreamNamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.at(i); writeNamespace(namespaceDeclaration.namespaceUri().toString(), namespaceDeclaration.prefix().toString()); } - writeStartElement(reader.namespaceUri().toString(), reader.name().toString()); writeAttributes(reader.attributes()); } break; case QXmlStreamReader::EndElement: diff --git a/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp b/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp index 16a4200b5d..8fdf91b090 100644 --- a/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp +++ b/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp @@ -577,6 +577,8 @@ private slots: void invalidStringCharacters() const; void hasError() const; void readBack() const; + void roundTrip() const; + void roundTrip_data() const; private: static QByteArray readFile(const QString &filename); @@ -1741,5 +1743,35 @@ void tst_QXmlStream::readBack() const } } +void tst_QXmlStream::roundTrip_data() const +{ + QTest::addColumn("in"); + + QTest::newRow("QTBUG-63434") << + "" + "" + "" + "Text" + "" + "\n"; +} + +void tst_QXmlStream::roundTrip() const +{ + QFETCH(QString, in); + QString out; + + QXmlStreamReader reader(in); + QXmlStreamWriter writer(&out); + + while (!reader.atEnd()) { + reader.readNext(); + QVERIFY(!reader.hasError()); + writer.writeCurrentToken(reader); + QVERIFY(!writer.hasError()); + } + QCOMPARE(out, in); +} + #include "tst_qxmlstream.moc" // vim: et:ts=4:sw=4:sts=4