123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 | // Copyright (C) 2021 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only#include <QtTest/private/qtestjunitstreamer_p.h>#include <QtTest/private/qjunittestlogger_p.h>#include <QtTest/private/qtestelement_p.h>#include <QtTest/private/qtestelementattribute_p.h>#include <QtTest/qtestassert.h>#include <QtTest/private/qtestlog_p.h>#include <QtTest/private/qtestresult_p.h>#include <QtTest/private/qxmltestlogger_p.h> QT_BEGIN_NAMESPACE QTestJUnitStreamer::QTestJUnitStreamer(QJUnitTestLogger *logger):testLogger(logger){QTEST_ASSERT(testLogger);}QTestJUnitStreamer::~QTestJUnitStreamer() =default;voidQTestJUnitStreamer::indentForElement(const QTestElement* element,char* buf,int size){if(size ==0)return; buf[0] =0;if(!element)return;char* endbuf = buf + size; element = element->parentElement();while(element && buf+2< endbuf) {*(buf++) =' ';*(buf++) =' ';*buf =0; element = element->parentElement();}}voidQTestJUnitStreamer::formatStart(const QTestElement *element, QTestCharBuffer *formatted)const{if(!element || !formatted )return;char indent[20];indentForElement(element, indent,sizeof(indent));if(element->elementType() ==QTest::LET_Text) {QTest::qt_asprintf(formatted,"%s<![CDATA[", indent);return;}QTest::qt_asprintf(formatted,"%s<%s", indent, element->elementName());}voidQTestJUnitStreamer::formatEnd(const QTestElement *element, QTestCharBuffer *formatted)const{if(!element || !formatted )return;if(element->childElements().empty()) { formatted->data()[0] ='\0';return;}char indent[20];indentForElement(element, indent,sizeof(indent));QTest::qt_asprintf(formatted,"%s</%s>\n", indent, element->elementName());}boolQTestJUnitStreamer::formatAttributes(const QTestElement* element,const QTestElementAttribute *attribute, QTestCharBuffer *formatted)const{if(!attribute || !formatted )return false;QTest::AttributeIndex attrindex = attribute->index();if(element && element->elementType() ==QTest::LET_Text) {QTEST_ASSERT(attrindex ==QTest::AI_Value);returnQXmlTestLogger::xmlCdata(formatted, attribute->value());} QTestCharBuffer quotedValue;if(QXmlTestLogger::xmlQuote("edValue, attribute->value())) {returnQTest::qt_asprintf(formatted," %s=\"%s\"", attribute->name(), quotedValue.constData()) !=0;}return false;}voidQTestJUnitStreamer::formatAfterAttributes(const QTestElement *element, QTestCharBuffer *formatted)const{if(!element || !formatted )return;if(element->elementType() ==QTest::LET_Text) {QTest::qt_asprintf(formatted,"]]>\n");return;}if(element->childElements().empty())QTest::qt_asprintf(formatted,"/>\n");elseQTest::qt_asprintf(formatted,">\n");}voidQTestJUnitStreamer::output(QTestElement *element)const{QTEST_ASSERT(element);if(!element->parentElement())outputString("<?xml version=\"1.0\"encoding=\"UTF-8\"?>\n"); QTestCharBuffer buf;formatStart(element, &buf);outputString(buf.data());outputElementAttributes(element, element->attributes());formatAfterAttributes(element, &buf);outputString(buf.data());if(!element->childElements().empty())outputElements(element->childElements());formatEnd(element, &buf);outputString(buf.data());}voidQTestJUnitStreamer::outputElements(conststd::vector<QTestElement*> &elements)const{for(auto*element : elements)output(element);}voidQTestJUnitStreamer::outputElementAttributes(const QTestElement* element,conststd::vector<QTestElementAttribute*> &attributes)const{ QTestCharBuffer buf;for(auto*attribute : attributes) {if(formatAttributes(element, attribute, &buf))outputString(buf.data());}}voidQTestJUnitStreamer::outputString(const char*msg)const{ testLogger->outputString(msg);} QT_END_NAMESPACE
|