void ParserTests::testMemcheckSample3() { MSKIP_SINGLE("testfile does not exist"); initTest(QLatin1String("memcheck-output-sample3.xml")); Valgrind::XmlProtocol::Parser parser; Recorder rec(&parser); parser.parse(m_socket); m_process->waitForFinished(); QCOMPARE(m_process->exitStatus(), QProcess::NormalExit); QCOMPARE(m_process->state(), QProcess::NotRunning); QVERIFY2(parser.errorString().isEmpty(), qPrintable(parser.errorString())); const QList<Error> errors = rec.errors; QCOMPARE(errors.size(), 6); { const Error error = errors.at(0); const QVector<Stack> stacks = error.stacks(); QCOMPARE(error.unique(), 0x1ll); QCOMPARE(error.what(), QLatin1String("Conditional jump or move depends on uninitialised value(s)")); QCOMPARE(error.kind(), UninitCondition); QCOMPARE(stacks.size(), 1); QCOMPARE(stacks.first().frames().size(), 12); QVERIFY(!error.suppression().isNull()); QCOMPARE(error.suppression().frames().count(), stacks.first().frames().size()); QCOMPARE(error.suppression().kind(), QLatin1String("Memcheck:Cond")); QVERIFY(!error.suppression().rawText().trimmed().isEmpty()); // rawtext contains <...> while <name></name> does not QCOMPARE(error.suppression().name(), QLatin1String("insert_a_suppression_name_here")); Suppression sup = error.suppression(); sup.setName(QLatin1String("<insert_a_suppression_name_here>")); QCOMPARE(sup.toString().trimmed(), sup.rawText().trimmed()); QCOMPARE(error.suppression().frames().first().object(), QLatin1String("/usr/lib/kde4/plugins/styles/qtcurve.so")); QVERIFY(error.suppression().frames().first().function().isEmpty()); QCOMPARE(error.suppression().frames().last().function(), QLatin1String("main")); QVERIFY(error.suppression().frames().last().object().isEmpty()); } QCOMPARE(rec.suppcounts.count(), 3); QCOMPARE(rec.suppcounts.at(0).second, qint64(1)); QCOMPARE(rec.suppcounts.at(1).second, qint64(2)); QCOMPARE(rec.suppcounts.at(2).second, qint64(3)); }
Suppression Parser::Private::parseSuppression() { Suppression supp; SuppressionFrames frames; while (notAtEnd()) { blockingReadNext(); if (reader.isEndElement()) break; if (reader.isStartElement()) { const QStringRef name = reader.name(); if (name == QLatin1String("sname")) supp.setName(blockingReadElementText()); else if (name == QLatin1String("skind")) supp.setKind(blockingReadElementText()); else if (name == QLatin1String("skaux")) supp.setAuxKind(blockingReadElementText()); else if (name == QLatin1String("rawtext")) supp.setRawText(blockingReadElementText()); else if (name == QLatin1String("sframe")) frames.push_back(parseSuppressionFrame()); } } supp.setFrames(frames); return supp; }