From ec89755f9c0a79d09ac31d6a7f112285a2dd5888 Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Tue, 9 Jun 2009 15:59:43 +0200 Subject: QXmlStreamWriter: indent comments correctly before, there was no newline between a comment and a start element. Now, there is and the comment is correctly indented. Task: 256468 Reviewed-by: Frans Englich --- src/corelib/xml/qxmlstream.cpp | 3 +- tests/auto/qxmlstream/tst_qxmlstream.cpp | 52 ++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/corelib/xml/qxmlstream.cpp b/src/corelib/xml/qxmlstream.cpp index f1487f7..1fc2a9f 100644 --- a/src/corelib/xml/qxmlstream.cpp +++ b/src/corelib/xml/qxmlstream.cpp @@ -3410,11 +3410,12 @@ void QXmlStreamWriter::writeComment(const QString &text) { Q_D(QXmlStreamWriter); Q_ASSERT(!text.contains(QLatin1String("--")) && !text.endsWith(QLatin1Char('-'))); - if (!d->finishStartElement() && d->autoFormatting) + if (!d->finishStartElement(false) && d->autoFormatting) d->indent(d->tagStack.size()); d->write(""); + d->inStartElement = d->lastWasStartElement = false; } diff --git a/tests/auto/qxmlstream/tst_qxmlstream.cpp b/tests/auto/qxmlstream/tst_qxmlstream.cpp index 32fdb91..1533913 100644 --- a/tests/auto/qxmlstream/tst_qxmlstream.cpp +++ b/tests/auto/qxmlstream/tst_qxmlstream.cpp @@ -561,6 +561,8 @@ private slots: void garbageInXMLPrologDefaultCodec() const; void garbageInXMLPrologUTF8Explicitly() const; void clear() const; + void checkCommentIndentation() const; + void checkCommentIndentation_data() const; private: static QByteArray readFile(const QString &filename); @@ -1392,5 +1394,55 @@ void tst_QXmlStream::clear() const // task 228768 QCOMPARE(reader.tokenType(), QXmlStreamReader::EndDocument); } +void tst_QXmlStream::checkCommentIndentation_data() const +{ + + QTest::addColumn("input"); + QTest::addColumn("expectedOutput"); + + QString simpleInput = ""; + QString simpleOutput = "\n" + "\n" + " \n" + "\n"; + QTest::newRow("simple-comment") << simpleInput << simpleOutput; + + QString advancedInput = ""; + QString advancedOutput = "\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; + QTest::newRow("advanced-comment") << advancedInput << advancedOutput; +} + +void tst_QXmlStream::checkCommentIndentation() const // task 256468 +{ + QFETCH(QString, input); + QFETCH(QString, expectedOutput); + QString output; + QXmlStreamReader reader(input); + QXmlStreamWriter writer(&output); + writer.setAutoFormatting(true); + writer.setAutoFormattingIndent(3); + + while (!reader.atEnd()) { + reader.readNext(); + if (reader.error()) { + QFAIL("error reading XML input"); + } else { + writer.writeCurrentToken(reader); + } + } + QCOMPARE(output, expectedOutput); +} + #include "tst_qxmlstream.moc" // vim: et:ts=4:sw=4:sts=4 -- cgit v0.12