| Line | Source Code | Coverage |
|---|
| 1 | | - |
| 2 | | - |
| 3 | | - |
| 4 | namespace QTest { | - |
| 5 | | - |
| 6 | static const char *incidentType2String(QAbstractTestLogger::IncidentTypes type) | - |
| 7 | { | - |
| 8 | switch (type) { | - |
| 9 | case QAbstractTestLogger::Pass: | - |
| 10 | return "PASS "; executed: return "PASS ";Execution Count:66746 | 66746 |
| 11 | case QAbstractTestLogger::XFail: | - |
| 12 | return "XFAIL "; executed: return "XFAIL ";Execution Count:339 | 339 |
| 13 | case QAbstractTestLogger::Fail: | - |
| 14 | return "FAIL! "; executed: return "FAIL! ";Execution Count:237 | 237 |
| 15 | case QAbstractTestLogger::XPass: | - |
| 16 | return "XPASS "; never executed: return "XPASS "; | 0 |
| 17 | } | - |
| 18 | return "??????"; never executed: return "??????"; | 0 |
| 19 | } | - |
| 20 | | - |
| 21 | static const char *benchmarkResult2String() | - |
| 22 | { | - |
| 23 | return "RESULT "; executed: return "RESULT ";Execution Count:8 | 8 |
| 24 | } | - |
| 25 | | - |
| 26 | static const char *messageType2String(QAbstractTestLogger::MessageTypes type) | - |
| 27 | { | - |
| 28 | switch (type) { | - |
| 29 | case QAbstractTestLogger::Skip: | - |
| 30 | return "SKIP "; executed: return "SKIP ";Execution Count:315 | 315 |
| 31 | case QAbstractTestLogger::Warn: | - |
| 32 | return "WARNING"; executed: return "WARNING";Execution Count:8 | 8 |
| 33 | case QAbstractTestLogger::QWarning: | - |
| 34 | return "QWARN "; executed: return "QWARN ";Execution Count:445 | 445 |
| 35 | case QAbstractTestLogger::QDebug: | - |
| 36 | return "QDEBUG "; executed: return "QDEBUG ";Execution Count:1076 | 1076 |
| 37 | case QAbstractTestLogger::QSystem: | - |
| 38 | return "QSYSTEM"; never executed: return "QSYSTEM"; | 0 |
| 39 | case QAbstractTestLogger::QFatal: | - |
| 40 | return "QFATAL "; executed: return "QFATAL ";Execution Count:5 | 5 |
| 41 | case QAbstractTestLogger::Info: | - |
| 42 | return "INFO "; never executed: return "INFO "; | 0 |
| 43 | } | - |
| 44 | return "??????"; never executed: return "??????"; | 0 |
| 45 | } | - |
| 46 | | - |
| 47 | template <typename T> | - |
| 48 | static int countSignificantDigits(T num) | - |
| 49 | { | - |
| 50 | if (num <= 0) evaluated: num <= 0| yes Evaluation Count:10 | yes Evaluation Count:6 |
| 6-10 |
| 51 | return 0; executed: return 0;Execution Count:10 | 10 |
| 52 | | - |
| 53 | int digits = 0; | - |
| 54 | qreal divisor = 1; | - |
| 55 | | - |
| 56 | while (num / divisor >= 1) { evaluated: num / divisor >= 1| yes Evaluation Count:6 | yes Evaluation Count:6 |
| 6 |
| 57 | divisor *= 10; | - |
| 58 | ++digits; | - |
| 59 | } executed: }Execution Count:6 | 6 |
| 60 | | - |
| 61 | return digits; executed: return digits;Execution Count:6 | 6 |
| 62 | } | - |
| 63 | | - |
| 64 | | - |
| 65 | template <typename T> QString formatResult(T number, int significantDigits) | - |
| 66 | { | - |
| 67 | if (number < T(0)) partially evaluated: number < T(0)| no Evaluation Count:0 | yes Evaluation Count:16 |
| 0-16 |
| 68 | return QLatin1String("NAN"); never executed: return QLatin1String("NAN"); | 0 |
| 69 | if (number == T(0)) evaluated: number == T(0)| yes Evaluation Count:10 | yes Evaluation Count:6 |
| 6-10 |
| 70 | return QLatin1String("0"); executed: return QLatin1String("0");Execution Count:10 | 10 |
| 71 | | - |
| 72 | QString beforeDecimalPoint = QString::number(qint64(number), 'f', 0); | - |
| 73 | QString afterDecimalPoint = QString::number(number, 'f', 20); | - |
| 74 | afterDecimalPoint.remove(0, beforeDecimalPoint.count() + 1); | - |
| 75 | | - |
| 76 | int beforeUse = qMin(beforeDecimalPoint.count(), significantDigits); | - |
| 77 | int beforeRemove = beforeDecimalPoint.count() - beforeUse; | - |
| 78 | | - |
| 79 | | - |
| 80 | beforeDecimalPoint.chop(beforeRemove); | - |
| 81 | for (int i = 0; i < beforeRemove; ++i) { partially evaluated: i < beforeRemove| no Evaluation Count:0 | yes Evaluation Count:6 |
| 0-6 |
| 82 | beforeDecimalPoint.append(QLatin1Char('0')); | - |
| 83 | } | 0 |
| 84 | | - |
| 85 | int afterUse = significantDigits - beforeUse; | - |
| 86 | | - |
| 87 | | - |
| 88 | if (beforeDecimalPoint == QLatin1String("0") && afterDecimalPoint.isEmpty() == false) { partially evaluated: beforeDecimalPoint == QLatin1String("0")| no Evaluation Count:0 | yes Evaluation Count:6 |
never evaluated: afterDecimalPoint.isEmpty() == false | 0-6 |
| 89 | ++afterUse; | - |
| 90 | | - |
| 91 | int i = 0; | - |
| 92 | while (i < afterDecimalPoint.count() && afterDecimalPoint.at(i) == QLatin1Char('0')) { never evaluated: i < afterDecimalPoint.count() never evaluated: afterDecimalPoint.at(i) == QLatin1Char('0') | 0 |
| 93 | ++i; | - |
| 94 | } | 0 |
| 95 | | - |
| 96 | afterUse += i; | - |
| 97 | } | 0 |
| 98 | | - |
| 99 | int afterRemove = afterDecimalPoint.count() - afterUse; | - |
| 100 | afterDecimalPoint.chop(afterRemove); | - |
| 101 | | - |
| 102 | QChar separator = QLatin1Char(','); | - |
| 103 | QChar decimalPoint = QLatin1Char('.'); | - |
| 104 | | - |
| 105 | | - |
| 106 | int length = beforeDecimalPoint.length(); | - |
| 107 | for (int i = beforeDecimalPoint.length() -1; i >= 1; --i) { partially evaluated: i >= 1| no Evaluation Count:0 | yes Evaluation Count:6 |
| 0-6 |
| 108 | if ((length - i) % 3 == 0) never evaluated: (length - i) % 3 == 0 | 0 |
| 109 | beforeDecimalPoint.insert(i, separator); never executed: beforeDecimalPoint.insert(i, separator); | 0 |
| 110 | } | 0 |
| 111 | | - |
| 112 | QString print; | - |
| 113 | print = beforeDecimalPoint; | - |
| 114 | if (afterUse > 0) partially evaluated: afterUse > 0| no Evaluation Count:0 | yes Evaluation Count:6 |
| 0-6 |
| 115 | print.append(decimalPoint); never executed: print.append(decimalPoint); | 0 |
| 116 | | - |
| 117 | print += afterDecimalPoint; | - |
| 118 | | - |
| 119 | | - |
| 120 | return print; executed: return print;Execution Count:6 | 6 |
| 121 | } | - |
| 122 | | - |
| 123 | template <typename T> | - |
| 124 | int formatResult(char * buffer, int bufferSize, T number, int significantDigits) | - |
| 125 | { | - |
| 126 | QString result = formatResult(number, significantDigits); | - |
| 127 | qstrncpy(buffer, result.toLatin1().constData(), bufferSize); | - |
| 128 | int size = result.count(); | - |
| 129 | return size; executed: return size;Execution Count:16 | 16 |
| 130 | } | - |
| 131 | } | - |
| 132 | | - |
| 133 | void QPlainTestLogger::outputMessage(const char *str) | - |
| 134 | { | - |
| 135 | outputString(str); | - |
| 136 | } executed: }Execution Count:69974 | 69974 |
| 137 | | - |
| 138 | void QPlainTestLogger::printMessage(const char *type, const char *msg, const char *file, int line) | - |
| 139 | { | - |
| 140 | do { if (!(type)) qt_assert("type","qplaintestlogger.cpp",215); } while (0); never executed: qt_assert("type","qplaintestlogger.cpp",215); executed: }Execution Count:69171 partially evaluated: !(type)| no Evaluation Count:0 | yes Evaluation Count:69171 |
partially evaluated: 0| no Evaluation Count:0 | yes Evaluation Count:69171 |
| 0-69171 |
| 141 | do { if (!(msg)) qt_assert("msg","qplaintestlogger.cpp",216); } while (0); never executed: qt_assert("msg","qplaintestlogger.cpp",216); executed: }Execution Count:69171 partially evaluated: !(msg)| no Evaluation Count:0 | yes Evaluation Count:69171 |
partially evaluated: 0| no Evaluation Count:0 | yes Evaluation Count:69171 |
| 0-69171 |
| 142 | | - |
| 143 | QTestCharBuffer buf; | - |
| 144 | | - |
| 145 | const char *fn = QTestResult::currentTestFunction() ? QTestResult::currentTestFunction() partially evaluated: QTestResult::currentTestFunction()| yes Evaluation Count:69171 | no Evaluation Count:0 |
| 0-69171 |
| 146 | : "UnknownTestFunc"; | - |
| 147 | const char *tag = QTestResult::currentDataTag() ? QTestResult::currentDataTag() : ""; evaluated: QTestResult::currentDataTag()| yes Evaluation Count:62195 | yes Evaluation Count:6976 |
| 6976-62195 |
| 148 | const char *gtag = QTestResult::currentGlobalDataTag() evaluated: QTestResult::currentGlobalDataTag()| yes Evaluation Count:804 | yes Evaluation Count:68367 |
| 804-68367 |
| 149 | ? QTestResult::currentGlobalDataTag() | - |
| 150 | : ""; | - |
| 151 | const char *filler = (tag[0] && gtag[0]) ? ":" : ""; evaluated: tag[0]| yes Evaluation Count:62180 | yes Evaluation Count:6991 |
evaluated: gtag[0]| yes Evaluation Count:700 | yes Evaluation Count:61480 |
| 700-62180 |
| 152 | if (file) { evaluated: file| yes Evaluation Count:895 | yes Evaluation Count:68276 |
| 895-68276 |
| 153 | QTest::qt_asprintf(&buf, "%s: %s::%s(%s%s%s)%s%s\n" | - |
| 154 | | - |
| 155 | | - |
| 156 | | - |
| 157 | " Loc: [%s(%d)]\n" | - |
| 158 | | - |
| 159 | , type, QTestResult::currentTestObjectName(), fn, gtag, filler, tag, | - |
| 160 | msg[0] ? " " : "", msg, file, line); | - |
| 161 | } else { executed: }Execution Count:895 | 895 |
| 162 | QTest::qt_asprintf(&buf, "%s: %s::%s(%s%s%s)%s%s\n", | - |
| 163 | type, QTestResult::currentTestObjectName(), fn, gtag, filler, tag, | - |
| 164 | msg[0] ? " " : "", msg); | - |
| 165 | } executed: }Execution Count:68276 | 68276 |
| 166 | | - |
| 167 | | - |
| 168 | memcpy(buf.data(), type, strlen(type)); | - |
| 169 | outputMessage(buf.data()); | - |
| 170 | } executed: }Execution Count:69171 | 69171 |
| 171 | | - |
| 172 | void QPlainTestLogger::printBenchmarkResult(const QBenchmarkResult &result) | - |
| 173 | { | - |
| 174 | const char *bmtag = QTest::benchmarkResult2String(); | - |
| 175 | | - |
| 176 | char buf1[1024]; | - |
| 177 | qsnprintf( | - |
| 178 | buf1, sizeof(buf1), "%s: %s::%s", | - |
| 179 | bmtag, | - |
| 180 | QTestResult::currentTestObjectName(), | - |
| 181 | result.context.slotName.toLatin1().data()); | - |
| 182 | | - |
| 183 | char bufTag[1024]; | - |
| 184 | bufTag[0] = 0; | - |
| 185 | QByteArray tag = result.context.tag.toLocal8Bit(); | - |
| 186 | if (tag.isEmpty() == false) { partially evaluated: tag.isEmpty() == false| yes Evaluation Count:8 | no Evaluation Count:0 |
| 0-8 |
| 187 | qsnprintf(bufTag, sizeof(bufTag), ":\"%s\"", tag.data()); | - |
| 188 | } executed: }Execution Count:8 | 8 |
| 189 | | - |
| 190 | | - |
| 191 | char fillFormat[8]; | - |
| 192 | int fillLength = 5; | - |
| 193 | qsnprintf(fillFormat, sizeof(fillFormat), ":\n%%%ds", fillLength); | - |
| 194 | char fill[1024]; | - |
| 195 | qsnprintf(fill, sizeof(fill), fillFormat, ""); | - |
| 196 | | - |
| 197 | const char * unitText = QTest::benchmarkMetricUnit(result.metric); | - |
| 198 | | - |
| 199 | qreal valuePerIteration = qreal(result.value) / qreal(result.iterations); | - |
| 200 | char resultBuffer[100] = ""; | - |
| 201 | QTest::formatResult(resultBuffer, 100, valuePerIteration, QTest::countSignificantDigits(result.value)); | - |
| 202 | | - |
| 203 | char buf2[1024]; | - |
| 204 | qsnprintf(buf2, sizeof(buf2), "%s %s", resultBuffer, unitText); | - |
| 205 | | - |
| 206 | char buf2_[1024]; | - |
| 207 | QByteArray iterationText = " per iteration"; | - |
| 208 | qt_noop(); | - |
| 209 | qsnprintf(buf2_, sizeof(buf2_), "%s", iterationText.data()); | - |
| 210 | | - |
| 211 | char buf3[1024]; | - |
| 212 | qt_noop(); | - |
| 213 | QTest::formatResult(resultBuffer, 100, result.value, QTest::countSignificantDigits(result.value)); | - |
| 214 | qsnprintf(buf3, sizeof(buf3), " (total: %s, iterations: %d)", resultBuffer, result.iterations); | - |
| 215 | | - |
| 216 | char buf[1024]; | - |
| 217 | | - |
| 218 | if (result.setByMacro) { partially evaluated: result.setByMacro| yes Evaluation Count:8 | no Evaluation Count:0 |
| 0-8 |
| 219 | qsnprintf(buf, sizeof(buf), "%s%s%s%s%s%s\n", buf1, bufTag, fill, buf2, buf2_, buf3); | - |
| 220 | } else { executed: }Execution Count:8 | 8 |
| 221 | qsnprintf(buf, sizeof(buf), "%s%s%s%s\n", buf1, bufTag, fill, buf2); | - |
| 222 | } | 0 |
| 223 | | - |
| 224 | memcpy(buf, bmtag, strlen(bmtag)); | - |
| 225 | outputMessage(buf); | - |
| 226 | } executed: }Execution Count:8 | 8 |
| 227 | | - |
| 228 | QPlainTestLogger::QPlainTestLogger(const char *filename) | - |
| 229 | : QAbstractTestLogger(filename) | - |
| 230 | { | - |
| 231 | } executed: }Execution Count:399 | 399 |
| 232 | | - |
| 233 | QPlainTestLogger::~QPlainTestLogger() | - |
| 234 | { | - |
| 235 | } | - |
| 236 | | - |
| 237 | void QPlainTestLogger::startLogging() | - |
| 238 | { | - |
| 239 | QAbstractTestLogger::startLogging(); | - |
| 240 | | - |
| 241 | char buf[1024]; | - |
| 242 | if (QTestLog::verboseLevel() < 0) { partially evaluated: QTestLog::verboseLevel() < 0| no Evaluation Count:0 | yes Evaluation Count:399 |
| 0-399 |
| 243 | qsnprintf(buf, sizeof(buf), "Testing %s\n", QTestResult::currentTestObjectName()); | - |
| 244 | } else { | 0 |
| 245 | qsnprintf(buf, sizeof(buf), | - |
| 246 | "********* Start testing of %s *********\n" | - |
| 247 | "Config: Using QTest library " "5.0.2" | - |
| 248 | ", Qt %s\n", QTestResult::currentTestObjectName(), qVersion()); | - |
| 249 | } executed: }Execution Count:399 | 399 |
| 250 | outputMessage(buf); | - |
| 251 | } executed: }Execution Count:399 | 399 |
| 252 | | - |
| 253 | void QPlainTestLogger::stopLogging() | - |
| 254 | { | - |
| 255 | char buf[1024]; | - |
| 256 | if (QTestLog::verboseLevel() < 0) { partially evaluated: QTestLog::verboseLevel() < 0| no Evaluation Count:0 | yes Evaluation Count:396 |
| 0-396 |
| 257 | qsnprintf(buf, sizeof(buf), "Totals: %d passed, %d failed, %d skipped\n", | - |
| 258 | QTestLog::passCount(), QTestLog::failCount(), | - |
| 259 | QTestLog::skipCount()); | - |
| 260 | } else { | 0 |
| 261 | qsnprintf(buf, sizeof(buf), | - |
| 262 | "Totals: %d passed, %d failed, %d skipped\n" | - |
| 263 | "********* Finished testing of %s *********\n", | - |
| 264 | QTestLog::passCount(), QTestLog::failCount(), | - |
| 265 | QTestLog::skipCount(), QTestResult::currentTestObjectName()); | - |
| 266 | } executed: }Execution Count:396 | 396 |
| 267 | outputMessage(buf); | - |
| 268 | | - |
| 269 | QAbstractTestLogger::stopLogging(); | - |
| 270 | } executed: }Execution Count:396 | 396 |
| 271 | | - |
| 272 | | - |
| 273 | void QPlainTestLogger::enterTestFunction(const char * ) | - |
| 274 | { | - |
| 275 | if (QTestLog::verboseLevel() >= 1) partially evaluated: QTestLog::verboseLevel() >= 1| no Evaluation Count:0 | yes Evaluation Count:7610 |
| 0-7610 |
| 276 | printMessage(QTest::messageType2String(Info), "entering"); never executed: printMessage(QTest::messageType2String(Info), "entering"); | 0 |
| 277 | } executed: }Execution Count:7610 | 7610 |
| 278 | | - |
| 279 | void QPlainTestLogger::leaveTestFunction() | - |
| 280 | { | - |
| 281 | } | - |
| 282 | | - |
| 283 | void QPlainTestLogger::addIncident(IncidentTypes type, const char *description, | - |
| 284 | const char *file, int line) | - |
| 285 | { | - |
| 286 | | - |
| 287 | if ((type == QAbstractTestLogger::Pass || type == QAbstractTestLogger::XFail) evaluated: type == QAbstractTestLogger::Pass| yes Evaluation Count:66746 | yes Evaluation Count:576 |
evaluated: type == QAbstractTestLogger::XFail| yes Evaluation Count:339 | yes Evaluation Count:237 |
| 237-66746 |
| 288 | && QTestLog::verboseLevel() < 0) partially evaluated: QTestLog::verboseLevel() < 0| no Evaluation Count:0 | yes Evaluation Count:67085 |
| 0-67085 |
| 289 | return; | 0 |
| 290 | | - |
| 291 | printMessage(QTest::incidentType2String(type), description, file, line); | - |
| 292 | } executed: }Execution Count:67322 | 67322 |
| 293 | | - |
| 294 | void QPlainTestLogger::addBenchmarkResult(const QBenchmarkResult &result) | - |
| 295 | { | - |
| 296 | | - |
| 297 | if (QTestLog::verboseLevel() < 0) partially evaluated: QTestLog::verboseLevel() < 0| no Evaluation Count:0 | yes Evaluation Count:8 |
| 0-8 |
| 298 | return; | 0 |
| 299 | | - |
| 300 | printBenchmarkResult(result); | - |
| 301 | } executed: }Execution Count:8 | 8 |
| 302 | | - |
| 303 | void QPlainTestLogger::addMessage(MessageTypes type, const char *message, | - |
| 304 | const char *file, int line) | - |
| 305 | { | - |
| 306 | | - |
| 307 | if (type != QAbstractTestLogger::QFatal && QTestLog::verboseLevel() < 0) evaluated: type != QAbstractTestLogger::QFatal| yes Evaluation Count:1844 | yes Evaluation Count:5 |
partially evaluated: QTestLog::verboseLevel() < 0| no Evaluation Count:0 | yes Evaluation Count:1844 |
| 0-1844 |
| 308 | return; | 0 |
| 309 | | - |
| 310 | printMessage(QTest::messageType2String(type), message, file, line); | - |
| 311 | } executed: }Execution Count:1849 | 1849 |
| 312 | | - |
| 313 | | - |
| 314 | | - |
| | |