diff options
author | Harald Fernengel <harald@trolltech.com> | 2009-08-07 13:08:09 (GMT) |
---|---|---|
committer | Harald Fernengel <harald@trolltech.com> | 2009-08-07 13:10:36 (GMT) |
commit | dfa284220498a1e32ab3133f203bcb41cfa136b7 (patch) | |
tree | e6e8a6cae4b2195313258c5001100e2557c6463e /src/testlib/qtestxmlstreamer.cpp | |
parent | 658c30c214070e8ff05ddaf1cb7b161c1b73f5ce (diff) | |
download | Qt-dfa284220498a1e32ab3133f203bcb41cfa136b7.zip Qt-dfa284220498a1e32ab3133f203bcb41cfa136b7.tar.gz Qt-dfa284220498a1e32ab3133f203bcb41cfa136b7.tar.bz2 |
Refactor QTestCharBuffer a bit
Use a static buffer for small strings, and making it oom safe.
We can now see messages up to 512 bytes even if we run out of memory
(important for OOM tests). Also, testlogging (< 512 bytes per line)
should again work without a single allocation.
Reviewed-By: Rohan McGovern <rohan.mcgovern@nokia.com>
Diffstat (limited to 'src/testlib/qtestxmlstreamer.cpp')
-rw-r--r-- | src/testlib/qtestxmlstreamer.cpp | 61 |
1 files changed, 30 insertions, 31 deletions
diff --git a/src/testlib/qtestxmlstreamer.cpp b/src/testlib/qtestxmlstreamer.cpp index 1b6e674..c72d648 100644 --- a/src/testlib/qtestxmlstreamer.cpp +++ b/src/testlib/qtestxmlstreamer.cpp @@ -60,7 +60,7 @@ QTestXmlStreamer::QTestXmlStreamer() QTestXmlStreamer::~QTestXmlStreamer() {} -void QTestXmlStreamer::formatStart(const QTestElement *element, char **formatted) const +void QTestXmlStreamer::formatStart(const QTestElement *element, QTestCharBuffer *formatted) const { if(!element || !formatted) return; @@ -68,20 +68,20 @@ void QTestXmlStreamer::formatStart(const QTestElement *element, char **formatted switch(element->elementType()){ case QTest::LET_TestCase: { QTestCharBuffer quotedTf; - QXmlTestLogger::xmlQuote(quotedTf, element->attributeValue(QTest::AI_Name)); + QXmlTestLogger::xmlQuote("edTf, element->attributeValue(QTest::AI_Name)); QTest::qt_asprintf(formatted, "<TestFunction name=\"%s\">\n", quotedTf.constData()); break; } case QTest::LET_Failure: { QTestCharBuffer cdataDesc; - QXmlTestLogger::xmlCdata(cdataDesc, element->attributeValue(QTest::AI_Description)); + QXmlTestLogger::xmlCdata(&cdataDesc, element->attributeValue(QTest::AI_Description)); QTestCharBuffer location; QTestCharBuffer quotedFile; - QXmlTestLogger::xmlQuote(quotedFile, element->attributeValue(QTest::AI_File)); + QXmlTestLogger::xmlQuote("edFile, element->attributeValue(QTest::AI_File)); - QTest::qt_asprintf(location, "%s=\"%s\" %s=\"%s\"", + QTest::qt_asprintf(&location, "%s=\"%s\" %s=\"%s\"", element->attributeName(QTest::AI_File), quotedFile.constData(), element->attributeName(QTest::AI_Line), @@ -89,7 +89,7 @@ void QTestXmlStreamer::formatStart(const QTestElement *element, char **formatted if (element->attribute(QTest::AI_Tag)) { QTestCharBuffer cdataTag; - QXmlTestLogger::xmlCdata(cdataTag, element->attributeValue(QTest::AI_Tag)); + QXmlTestLogger::xmlCdata(&cdataTag, element->attributeValue(QTest::AI_Tag)); QTest::qt_asprintf(formatted, "<Incident type=\"%s\" %s>\n" " <DataTag><![CDATA[%s]]></DataTag>\n" " <Description><![CDATA[%s]]></Description>\n" @@ -108,8 +108,8 @@ void QTestXmlStreamer::formatStart(const QTestElement *element, char **formatted // assuming type and attribute names don't need quoting QTestCharBuffer quotedFile; QTestCharBuffer cdataDesc; - QXmlTestLogger::xmlQuote(quotedFile, element->attributeValue(QTest::AI_File)); - QXmlTestLogger::xmlCdata(cdataDesc, element->attributeValue(QTest::AI_Description)); + QXmlTestLogger::xmlQuote("edFile, element->attributeValue(QTest::AI_File)); + QXmlTestLogger::xmlCdata(&cdataDesc, element->attributeValue(QTest::AI_Description)); QTest::qt_asprintf(formatted, "<Message type=\"%s\" %s=\"%s\" %s=\"%s\">\n <Description><![CDATA[%s]]></Description>\n</Message>\n", element->attributeValue(QTest::AI_Type), @@ -124,8 +124,8 @@ void QTestXmlStreamer::formatStart(const QTestElement *element, char **formatted // assuming value and iterations don't need quoting QTestCharBuffer quotedMetric; QTestCharBuffer quotedTag; - QXmlTestLogger::xmlQuote(quotedMetric, element->attributeValue(QTest::AI_Metric)); - QXmlTestLogger::xmlQuote(quotedTag, element->attributeValue(QTest::AI_Tag)); + QXmlTestLogger::xmlQuote("edMetric, element->attributeValue(QTest::AI_Metric)); + QXmlTestLogger::xmlQuote("edTag, element->attributeValue(QTest::AI_Tag)); QTest::qt_asprintf(formatted, "<BenchmarkResult %s=\"%s\" %s=\"%s\" %s=\"%s\" %s=\"%s\" />\n", element->attributeName(QTest::AI_Metric), @@ -139,23 +139,23 @@ void QTestXmlStreamer::formatStart(const QTestElement *element, char **formatted break; } default: - QTest::qt_asprintf(formatted, ""); + formatted->data()[0] = '\0'; } } -void QTestXmlStreamer::formatEnd(const QTestElement *element, char **formatted) const +void QTestXmlStreamer::formatEnd(const QTestElement *element, QTestCharBuffer *formatted) const { if(!element || !formatted) return; if (element->elementType() == QTest::LET_TestCase) { QTest::qt_asprintf(formatted, "</TestFunction>\n"); + } else { + formatted->data()[0] = '\0'; } - else - QTest::qt_asprintf(formatted, ""); } -void QTestXmlStreamer::formatBeforeAttributes(const QTestElement *element, char **formatted) const +void QTestXmlStreamer::formatBeforeAttributes(const QTestElement *element, QTestCharBuffer *formatted) const { if(!element || !formatted) return; @@ -163,9 +163,9 @@ void QTestXmlStreamer::formatBeforeAttributes(const QTestElement *element, char if (element->elementType() == QTest::LET_TestCase && element->attribute(QTest::AI_Result)){ QTestCharBuffer buf; QTestCharBuffer quotedFile; - QXmlTestLogger::xmlQuote(quotedFile, element->attributeValue(QTest::AI_File)); + QXmlTestLogger::xmlQuote("edFile, element->attributeValue(QTest::AI_File)); - QTest::qt_asprintf(buf, "%s=\"%s\" %s=\"%s\"", + QTest::qt_asprintf(&buf, "%s=\"%s\" %s=\"%s\"", element->attributeName(QTest::AI_File), quotedFile.constData(), element->attributeName(QTest::AI_Line), @@ -174,12 +174,11 @@ void QTestXmlStreamer::formatBeforeAttributes(const QTestElement *element, char if( !element->childElements() ) { QTest::qt_asprintf(formatted, "<Incident type=\"%s\" %s/>\n", element->attributeValue(QTest::AI_Result), buf.constData()); + } else { + formatted->data()[0] = '\0'; } - else { - QTest::qt_asprintf(formatted, ""); - } - }else{ - QTest::qt_asprintf(formatted, ""); + } else { + formatted->data()[0] = '\0'; } } @@ -187,23 +186,23 @@ void QTestXmlStreamer::output(QTestElement *element) const { QTestCharBuffer buf; QTestCharBuffer quotedTc; - QXmlTestLogger::xmlQuote(quotedTc, QTestResult::currentTestObjectName()); + QXmlTestLogger::xmlQuote("edTc, QTestResult::currentTestObjectName()); - QTest::qt_asprintf(buf, "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<TestCase name=\"%s\">\n", + QTest::qt_asprintf(&buf, "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<TestCase name=\"%s\">\n", quotedTc.constData()); - outputString(buf); + outputString(buf.constData()); - QTest::qt_asprintf(buf, "<Environment>\n <QtVersion>%s</QtVersion>\n <QTestVersion>%s</QTestVersion>\n", + QTest::qt_asprintf(&buf, "<Environment>\n <QtVersion>%s</QtVersion>\n <QTestVersion>%s</QTestVersion>\n", qVersion(), QTEST_VERSION_STR ); - outputString(buf); + outputString(buf.constData()); - QTest::qt_asprintf(buf, "</Environment>\n"); - outputString(buf); + QTest::qt_asprintf(&buf, "</Environment>\n"); + outputString(buf.constData()); QTestBasicStreamer::output(element); - QTest::qt_asprintf(buf, "</TestCase>\n"); - outputString(buf); + QTest::qt_asprintf(&buf, "</TestCase>\n"); + outputString(buf.constData()); } QT_END_NAMESPACE |