File indexing completed on 2024-05-05 05:29:36

0001 /*
0002     SPDX-FileCopyrightText: 2009 George Kiagiadakis <gkiagia@users.sourceforge.net>
0003     SPDX-FileCopyrightText: 2021 Harald Sitter <sitter@kde.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 #include "backtraceparsertest.h"
0008 #include <QMetaEnum>
0009 #include <QSharedPointer>
0010 
0011 #define DATA_DIR QFINDTESTDATA("backtraceparsertest_data")
0012 
0013 BacktraceParserTest::BacktraceParserTest(QObject *parent)
0014     : QObject(parent)
0015     , m_settings(DATA_DIR + QLatin1Char('/') + QStringLiteral("data.ini"), QSettings::IniFormat)
0016     , m_generator(new FakeBacktraceGenerator(this))
0017 {
0018 }
0019 
0020 void BacktraceParserTest::fetchData(const QString &group)
0021 {
0022     QTest::addColumn<QString>("filename");
0023     QTest::addColumn<QString>("result");
0024     QTest::addColumn<QString>("debugger");
0025     QTest::addColumn<bool>("compositorCrash");
0026 
0027     m_settings.beginGroup(group);
0028     const QStringList keys = m_settings.allKeys();
0029     m_settings.endGroup();
0030 
0031     for (const QString &key : keys) {
0032         QTest::newRow(qPrintable(key)) << QString(DATA_DIR + QLatin1Char('/') + key) << m_settings.value(group + QLatin1Char('/') + key).toString()
0033                                        << m_settings.value(QStringLiteral("debugger/") + key).toString()
0034                                        << m_settings.value(QStringLiteral("compositorCrash/") + key).toBool();
0035     }
0036 }
0037 
0038 void BacktraceParserTest::btParserUsefulnessTest_data()
0039 {
0040     fetchData(QStringLiteral("usefulness"));
0041 }
0042 
0043 void BacktraceParserTest::btParserUsefulnessTest()
0044 {
0045     QFETCH(QString, filename);
0046     QFETCH(QString, result);
0047     QFETCH(QString, debugger);
0048 
0049     // parse
0050     QSharedPointer<BacktraceParser> parser(BacktraceParser::newParser(debugger));
0051     parser->connectToGenerator(m_generator);
0052     m_generator->sendData(filename);
0053 
0054     // convert usefulness to string
0055     QMetaEnum metaUsefulness = BacktraceParser::staticMetaObject.enumerator(BacktraceParser::staticMetaObject.indexOfEnumerator("Usefulness"));
0056     QString btUsefulness = QString::fromLatin1(metaUsefulness.valueToKey(parser->backtraceUsefulness()));
0057 
0058     // compare
0059     QEXPECT_FAIL("test_e", "Working on it", Continue);
0060     QCOMPARE(btUsefulness, result);
0061 }
0062 
0063 void BacktraceParserTest::btParserBenchmark_data()
0064 {
0065     QTest::addColumn<QString>("filename");
0066     QTest::addColumn<QString>("debugger");
0067 
0068     m_settings.beginGroup(QStringLiteral("debugger"));
0069     const QStringList keys = m_settings.allKeys();
0070     for (const QString &key : keys) {
0071         QTest::newRow(qPrintable(key)) << QString(DATA_DIR + QLatin1Char('/') + key) << m_settings.value(key).toString();
0072     }
0073     m_settings.endGroup();
0074 }
0075 
0076 void BacktraceParserTest::btParserBenchmark()
0077 {
0078     QFETCH(QString, filename);
0079     QFETCH(QString, debugger);
0080 
0081     QSharedPointer<BacktraceParser> parser(BacktraceParser::newParser(debugger));
0082     parser->connectToGenerator(m_generator);
0083 
0084     QBENCHMARK_ONCE {
0085         m_generator->sendData(filename);
0086     }
0087 }
0088 
0089 void BacktraceParserTest::btParserCompositorCrashTest_data()
0090 {
0091     fetchData(QStringLiteral("compositorCrash"));
0092 }
0093 
0094 void BacktraceParserTest::btParserCompositorCrashTest()
0095 {
0096     QFETCH(QString, filename);
0097     QFETCH(QString, debugger);
0098     QFETCH(bool, compositorCrash);
0099     // parse
0100     QSharedPointer<BacktraceParser> parser(BacktraceParser::newParser(debugger));
0101     parser->connectToGenerator(m_generator);
0102     m_generator->sendData(filename);
0103 
0104     // compare
0105     QCOMPARE(parser->hasCompositorCrashed(), compositorCrash);
0106 }
0107 
0108 QTEST_GUILESS_MAIN(BacktraceParserTest)
0109 
0110 #include "moc_backtraceparsertest.cpp"