summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Hartmann <peter.hartmann@trolltech.com>2009-06-09 13:59:43 (GMT)
committerPeter Hartmann <peter.hartmann@trolltech.com>2009-06-24 12:25:43 (GMT)
commitec89755f9c0a79d09ac31d6a7f112285a2dd5888 (patch)
tree5804303dbc8e1196a8562483d1f7151b9c3ecf82
parent127e68d3dc4ff83293d7e364af870e019fe7cd17 (diff)
downloadQt-ec89755f9c0a79d09ac31d6a7f112285a2dd5888.zip
Qt-ec89755f9c0a79d09ac31d6a7f112285a2dd5888.tar.gz
Qt-ec89755f9c0a79d09ac31d6a7f112285a2dd5888.tar.bz2
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
-rw-r--r--src/corelib/xml/qxmlstream.cpp3
-rw-r--r--tests/auto/qxmlstream/tst_qxmlstream.cpp52
2 files changed, 54 insertions, 1 deletions
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->write(text);
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<QString>("input");
+ QTest::addColumn<QString>("expectedOutput");
+
+ QString simpleInput = "<a><!-- bla --></a>";
+ QString simpleOutput = "<?xml version=\"1.0\"?>\n"
+ "<a>\n"
+ " <!-- bla -->\n"
+ "</a>\n";
+ QTest::newRow("simple-comment") << simpleInput << simpleOutput;
+
+ QString advancedInput = "<a><!-- bla --><!-- bla --><b><!-- bla --><c><!-- bla --></c><!-- bla --></b></a>";
+ QString advancedOutput = "<?xml version=\"1.0\"?>\n"
+ "<a>\n"
+ " <!-- bla -->\n"
+ " <!-- bla -->\n"
+ " <b>\n"
+ " <!-- bla -->\n"
+ " <c>\n"
+ " <!-- bla -->\n"
+ " </c>\n"
+ " <!-- bla -->\n"
+ " </b>\n"
+ "</a>\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