void QTestBasicStreamer::outputElements(QTestElement *element, bool) const { QTestCharBuffer buf; bool hasChildren; /* Elements are in reverse order of occurrence, so start from the end and work our way backwards. */ while (element && element->nextElement()) { element = element->nextElement(); } while (element) { hasChildren = element->childElements(); formatStart(element, &buf); outputString(buf.data()); formatBeforeAttributes(element, &buf); outputString(buf.data()); outputElementAttributes(element, element->attributes()); formatAfterAttributes(element, &buf); outputString(buf.data()); if(hasChildren) outputElements(element->childElements(), true); formatEnd(element, &buf); outputString(buf.data()); element = element->previousElement(); } }
static void printMessage(const char *type, const char *msg, const char *file = 0, int line = 0) { QTEST_ASSERT(type); QTEST_ASSERT(msg); QTestCharBuffer buf; const char *fn = QTestResult::currentTestFunction() ? QTestResult::currentTestFunction() : "UnknownTestFunc"; const char *tag = QTestResult::currentDataTag() ? QTestResult::currentDataTag() : ""; const char *gtag = QTestResult::currentGlobalDataTag() ? QTestResult::currentGlobalDataTag() : ""; const char *filler = (tag[0] && gtag[0]) ? ":" : ""; if (file) { QTest::qt_asprintf(&buf, "%s: %s::%s(%s%s%s)%s%s\n" #ifdef Q_OS_WIN "%s(%d) : failure location\n" #else " Loc: [%s(%d)]\n" #endif , type, QTestResult::currentTestObjectName(), fn, gtag, filler, tag, msg[0] ? " " : "", msg, file, line); } else { QTest::qt_asprintf(&buf, "%s: %s::%s(%s%s%s)%s%s\n", type, QTestResult::currentTestObjectName(), fn, gtag, filler, tag, msg[0] ? " " : "", msg); } // In colored mode, printf above stripped our nonprintable control characters. // Put them back. memcpy(buf.data(), type, strlen(type)); outputMessage(buf.data()); }
void QTestBasicStreamer::outputElementAttributes(const QTestElement* element, QTestElementAttribute *attribute) const { QTestCharBuffer buf; while(attribute){ formatAttributes(element, attribute, &buf); outputString(buf.data()); attribute = attribute->nextElement(); } }