|
21 | 21 | #include "erroritem.h" |
22 | 22 | #include "xmlreportv2.h" |
23 | 23 |
|
| 24 | +#include <QFile> |
24 | 25 | #include <QList> |
| 26 | +#include <QTemporaryDir> |
25 | 27 | #include <QtTest> |
26 | 28 |
|
27 | 29 | void TestXmlReportV2::readXml() const |
@@ -53,4 +55,52 @@ void TestXmlReportV2::readXml() const |
53 | 55 | QCOMPARE(item2.message, QString("Mismatching allocation and deallocation: k")); |
54 | 56 | } |
55 | 57 |
|
| 58 | +void TestXmlReportV2::writeXmlEscaping() const |
| 59 | +{ |
| 60 | + QTemporaryDir tmpdir; |
| 61 | + const QString path = tmpdir.path() + "/results.xml"; |
| 62 | + |
| 63 | + ErrorItem item; |
| 64 | + item.errorId = "unusedVariable"; |
| 65 | + item.severity = Severity::style; |
| 66 | + item.summary = "Unused variable: \"x\" & <y>"; |
| 67 | + item.message = item.summary; |
| 68 | + |
| 69 | + QErrorPathItem loc; |
| 70 | + loc.file = "test.cpp"; |
| 71 | + loc.line = 1; |
| 72 | + loc.column = 1; |
| 73 | + loc.info = item.summary; |
| 74 | + item.errorPath << loc; |
| 75 | + loc.line = 2; |
| 76 | + item.errorPath << loc; |
| 77 | + |
| 78 | + { |
| 79 | + XmlReportV2 report(path, QString()); |
| 80 | + QVERIFY(report.create()); |
| 81 | + report.writeHeader(); |
| 82 | + report.writeError(item); |
| 83 | + report.writeFooter(); |
| 84 | + } |
| 85 | + |
| 86 | + // Each special character must be escaped exactly once |
| 87 | + QFile file(path); |
| 88 | + QVERIFY(file.open(QIODevice::ReadOnly)); |
| 89 | + |
| 90 | + const QString xml = QString::fromUtf8(file.readAll()); |
| 91 | + QVERIFY(xml.contains("msg=\"Unused variable: "x" & <y>\"")); |
| 92 | + QVERIFY(xml.contains("info=\"Unused variable: "x" & <y>\"")); |
| 93 | + QVERIFY(!xml.contains("&quot;")); |
| 94 | + |
| 95 | + XmlReportV2 report(path, QString()); |
| 96 | + QVERIFY(report.open()); |
| 97 | + |
| 98 | + const QList<ErrorItem> errors = report.read(); |
| 99 | + QCOMPARE(errors.size(), 1); |
| 100 | + QCOMPARE(errors[0].summary, item.summary); |
| 101 | + QCOMPARE(errors[0].message, item.message); |
| 102 | + QCOMPARE(errors[0].errorPath.size(), 2); |
| 103 | + QCOMPARE(errors[0].errorPath[0].info, item.summary); |
| 104 | +} |
| 105 | + |
56 | 106 | QTEST_MAIN(TestXmlReportV2) |
0 commit comments