src/testlib/qtestxmlstreamer.cpp
branchRCL_3
changeset 13 c0432d11811c
parent 4 3b1da2848fc7
equal deleted inserted replaced
12:cc75c76972ee 13:c0432d11811c
   109         QTestCharBuffer quotedFile;
   109         QTestCharBuffer quotedFile;
   110         QTestCharBuffer cdataDesc;
   110         QTestCharBuffer cdataDesc;
   111         QXmlTestLogger::xmlQuote(&quotedFile, element->attributeValue(QTest::AI_File));
   111         QXmlTestLogger::xmlQuote(&quotedFile, element->attributeValue(QTest::AI_File));
   112         QXmlTestLogger::xmlCdata(&cdataDesc, element->attributeValue(QTest::AI_Description));
   112         QXmlTestLogger::xmlCdata(&cdataDesc, element->attributeValue(QTest::AI_Description));
   113 
   113 
   114         QTest::qt_asprintf(formatted, "<Message type=\"%s\" %s=\"%s\" %s=\"%s\">\n    <Description><![CDATA[%s]]></Description>\n</Message>\n",
   114         QTestCharBuffer tagbuf;
       
   115         if (element->attribute(QTest::AI_Tag)) {
       
   116             QTestCharBuffer cdataTag;
       
   117             QXmlTestLogger::xmlCdata(&cdataTag, element->attributeValue(QTest::AI_Tag));
       
   118             QTest::qt_asprintf(&tagbuf, "    <DataTag><![CDATA[%s]]></DataTag>\n", cdataTag.constData());
       
   119         }
       
   120 
       
   121         QTest::qt_asprintf(formatted, "<Message type=\"%s\" %s=\"%s\" %s=\"%s\">\n%s    <Description><![CDATA[%s]]></Description>\n</Message>\n",
   115                            element->attributeValue(QTest::AI_Type),
   122                            element->attributeValue(QTest::AI_Type),
   116                            element->attributeName(QTest::AI_File),
   123                            element->attributeName(QTest::AI_File),
   117                            quotedFile.constData(),
   124                            quotedFile.constData(),
   118                            element->attributeName(QTest::AI_Line),
   125                            element->attributeName(QTest::AI_Line),
   119                            element->attributeValue(QTest::AI_Line),
   126                            element->attributeValue(QTest::AI_Line),
       
   127                            tagbuf.constData(),
   120                            cdataDesc.constData());
   128                            cdataDesc.constData());
   121         break;
   129         break;
   122     }
   130     }
   123     case QTest::LET_Benchmark: {
   131     case QTest::LET_Benchmark: {
   124         // assuming value and iterations don't need quoting
   132         // assuming value and iterations don't need quoting
   147 {
   155 {
   148     if(!element || !formatted)
   156     if(!element || !formatted)
   149         return;
   157         return;
   150 
   158 
   151     if (element->elementType() == QTest::LET_TestCase) {
   159     if (element->elementType() == QTest::LET_TestCase) {
   152         QTest::qt_asprintf(formatted, "</TestFunction>\n");
   160         bool failed = false;
       
   161         for (QTestElement* child = element->childElements(); child; child = child->nextElement()) {
       
   162             if (   child->elementType() == QTest::LET_Failure
       
   163                 && child->attribute(QTest::AI_Result)
       
   164                 && (    !strcmp(child->attributeValue(QTest::AI_Result), "fail")
       
   165                     ||  !strcmp(child->attributeValue(QTest::AI_Result), "xpass"))
       
   166                 )
       
   167             {
       
   168                 failed = true;
       
   169                 break;
       
   170             }
       
   171         }
       
   172 
       
   173         // For passing functions, no Incident has been output yet.
       
   174         // For failing functions, we already output one.
       
   175         // Please note: we are outputting "pass" even if there was an xfail etc.
       
   176         // This is by design (arguably bad design, but dangerous to change now!)
       
   177         if (element->attribute(QTest::AI_Result) && !failed) {
       
   178             QTest::qt_asprintf(formatted, "<Incident type=\"pass\" file=\"\" line=\"0\" />\n</TestFunction>\n");
       
   179         }
       
   180         else {
       
   181             QTest::qt_asprintf(formatted, "</TestFunction>\n");
       
   182         }
   153     } else {
   183     } else {
   154         formatted->data()[0] = '\0';
   184         formatted->data()[0] = '\0';
   155     }
   185     }
   156 }
   186 }
   157 
   187 
   158 void QTestXmlStreamer::formatBeforeAttributes(const QTestElement *element, QTestCharBuffer *formatted) const
   188 void QTestXmlStreamer::formatBeforeAttributes(const QTestElement *element, QTestCharBuffer *formatted) const
   159 {
   189 {
   160     if(!element || !formatted)
   190     Q_UNUSED(element);
       
   191     if (!formatted)
   161         return;
   192         return;
   162 
   193 
   163     if (element->elementType() == QTest::LET_TestCase && element->attribute(QTest::AI_Result)){
   194     formatted->data()[0] = '\0';
   164         QTestCharBuffer buf;
       
   165         QTestCharBuffer quotedFile;
       
   166         QXmlTestLogger::xmlQuote(&quotedFile, element->attributeValue(QTest::AI_File));
       
   167 
       
   168         QTest::qt_asprintf(&buf, "%s=\"%s\" %s=\"%s\"",
       
   169                            element->attributeName(QTest::AI_File),
       
   170                            quotedFile.constData(),
       
   171                            element->attributeName(QTest::AI_Line),
       
   172                            element->attributeValue(QTest::AI_Line));
       
   173 
       
   174         if( !element->childElements() ) {
       
   175             QTest::qt_asprintf(formatted, "<Incident type=\"%s\" %s/>\n",
       
   176                                element->attributeValue(QTest::AI_Result), buf.constData());
       
   177         } else {
       
   178             formatted->data()[0] = '\0';
       
   179         }
       
   180     } else {
       
   181         formatted->data()[0] = '\0';
       
   182     }
       
   183 }
   195 }
   184 
   196 
   185 void QTestXmlStreamer::output(QTestElement *element) const
   197 void QTestXmlStreamer::output(QTestElement *element) const
   186 {
   198 {
   187     QTestCharBuffer buf;
   199     QTestCharBuffer buf;