/**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtTest module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions ** contained in the Technology Preview License Agreement accompanying ** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** ** ** ** ** ** ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include #include #include "QtTest/private/qxmltestlogger_p.h" #include "QtTest/private/qtestresult_p.h" #include "QtTest/private/qbenchmark_p.h" QT_BEGIN_NAMESPACE namespace QTest { static const char* xmlMessageType2String(QAbstractTestLogger::MessageTypes type) { switch (type) { case QAbstractTestLogger::Warn: return "warn"; case QAbstractTestLogger::QSystem: return "system"; case QAbstractTestLogger::QDebug: return "qdebug"; case QAbstractTestLogger::QWarning: return "qwarn"; case QAbstractTestLogger::QFatal: return "qfatal"; case QAbstractTestLogger::Skip: return "skip"; case QAbstractTestLogger::Info: return "info"; } return "??????"; } static const char* xmlIncidentType2String(QAbstractTestLogger::IncidentTypes type) { switch (type) { case QAbstractTestLogger::Pass: return "pass"; case QAbstractTestLogger::XFail: return "xfail"; case QAbstractTestLogger::Fail: return "fail"; case QAbstractTestLogger::XPass: return "xpass"; } return "??????"; } } QXmlTestLogger::QXmlTestLogger(XmlMode mode ): xmlmode(mode) { } QXmlTestLogger::~QXmlTestLogger() { } void QXmlTestLogger::startLogging() { QAbstractTestLogger::startLogging(); char buf[1024]; if (xmlmode == QXmlTestLogger::Complete) { QTest::qt_snprintf(buf, sizeof(buf), "\n" "\n", QTestResult::currentTestObjectName()); outputString(buf); } QTest::qt_snprintf(buf, sizeof(buf), "\n" " %s\n" " "QTEST_VERSION_STR"\n" "\n", qVersion()); outputString(buf); } void QXmlTestLogger::stopLogging() { if (xmlmode == QXmlTestLogger::Complete) { outputString("\n"); } QAbstractTestLogger::stopLogging(); } void QXmlTestLogger::enterTestFunction(const char *function) { char buf[1024]; QTest::qt_snprintf(buf, sizeof(buf), "\n", function); outputString(buf); } void QXmlTestLogger::leaveTestFunction() { outputString("\n"); } namespace QTest { inline static bool isEmpty(const char *str) { return !str || !str[0]; } static const char *incidentFormatString(bool noDescription, bool noTag) { if (noDescription) { if (noTag) return "\n"; else return "\n" " \n" "\n"; } else { if (noTag) return "\n" " \n" "\n"; else return "\n" " \n" " \n" "\n"; } } static const char *benchmarkResultFormatString() { return "\n"; } static const char *messageFormatString(bool noDescription, bool noTag) { if (noDescription) { if (noTag) return "\n"; else return "\n" " \n" "\n"; } else { if (noTag) return "\n" " \n" "\n"; else return "\n" " \n" " \n" "\n"; } } } // namespace void QXmlTestLogger::addIncident(IncidentTypes type, const char *description, const char *file, int line) { char buf[1536]; const char *tag = QTestResult::currentDataTag(); const char *gtag = QTestResult::currentGlobalDataTag(); const char *filler = (tag && gtag) ? ":" : ""; const bool notag = QTest::isEmpty(tag) && QTest::isEmpty(gtag); QTest::qt_snprintf(buf, sizeof(buf), QTest::incidentFormatString(QTest::isEmpty(description), notag), QTest::xmlIncidentType2String(type), file ? file : "", line, gtag ? gtag : "", filler, tag ? tag : "", description ? description : ""); outputString(buf); } void QXmlTestLogger::addBenchmarkResult(const QBenchmarkResult &result) { char buf[1536]; QTest::qt_snprintf( buf, sizeof(buf), QTest::benchmarkResultFormatString(), QBenchmarkGlobalData::current->measurer->metricText().toAscii().data(), result.context.tag.toAscii().data(), QByteArray::number(result.value).constData(), //no 64-bit qt_snprintf support result.iterations); outputString(buf); } void QXmlTestLogger::addMessage(MessageTypes type, const char *message, const char *file, int line) { char buf[1536]; char msgbuf[1024]; const char *tag = QTestResult::currentDataTag(); const char *gtag = QTestResult::currentGlobalDataTag(); const char *filler = (tag && gtag) ? ":" : ""; const bool notag = QTest::isEmpty(tag) && QTest::isEmpty(gtag); QTest::qt_snprintf(msgbuf, sizeof(msgbuf), "%s", message ? message : ""); QTest::qt_snprintf(buf, sizeof(buf), QTest::messageFormatString(QTest::isEmpty(message), notag), QTest::xmlMessageType2String(type), file ? file : "", line, gtag ? gtag : "", filler, tag ? tag : "", msgbuf); outputString(buf); } QT_END_NAMESPACE