109 QTestCharBuffer quotedFile; |
109 QTestCharBuffer quotedFile; |
110 QTestCharBuffer cdataDesc; |
110 QTestCharBuffer cdataDesc; |
111 QXmlTestLogger::xmlQuote("edFile, element->attributeValue(QTest::AI_File)); |
111 QXmlTestLogger::xmlQuote("edFile, 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("edFile, 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; |