File indexing completed on 2024-05-05 17:33:31

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::btParserFunctionsTest_data()
0064 {
0065     fetchData(QStringLiteral("firstValidFunctions"));
0066 }
0067 
0068 void BacktraceParserTest::btParserFunctionsTest()
0069 {
0070     QFETCH(QString, filename);
0071     QFETCH(QString, result);
0072     QFETCH(QString, debugger);
0073 
0074     // parse
0075     QSharedPointer<BacktraceParser> parser(BacktraceParser::newParser(debugger));
0076     parser->connectToGenerator(m_generator);
0077     m_generator->sendData(filename);
0078 
0079     // compare
0080     QString functions = parser->firstValidFunctions().join(QLatin1Char('|'));
0081     QCOMPARE(functions, result);
0082 }
0083 
0084 void BacktraceParserTest::btParserBenchmark_data()
0085 {
0086     QTest::addColumn<QString>("filename");
0087     QTest::addColumn<QString>("debugger");
0088 
0089     m_settings.beginGroup(QStringLiteral("debugger"));
0090     const QStringList keys = m_settings.allKeys();
0091     for (const QString &key : keys) {
0092         QTest::newRow(qPrintable(key)) << QString(DATA_DIR + QLatin1Char('/') + key) << m_settings.value(key).toString();
0093     }
0094     m_settings.endGroup();
0095 }
0096 
0097 void BacktraceParserTest::btParserBenchmark()
0098 {
0099     QFETCH(QString, filename);
0100     QFETCH(QString, debugger);
0101 
0102     QSharedPointer<BacktraceParser> parser(BacktraceParser::newParser(debugger));
0103     parser->connectToGenerator(m_generator);
0104 
0105     QBENCHMARK_ONCE {
0106         m_generator->sendData(filename);
0107     }
0108 }
0109 
0110 void BacktraceParserTest::btParserCompositorCrashTest_data()
0111 {
0112     fetchData(QStringLiteral("compositorCrash"));
0113 }
0114 
0115 void BacktraceParserTest::btParserCompositorCrashTest()
0116 {
0117     QFETCH(QString, filename);
0118     QFETCH(QString, debugger);
0119     QFETCH(bool, compositorCrash);
0120     // parse
0121     QSharedPointer<BacktraceParser> parser(BacktraceParser::newParser(debugger));
0122     parser->connectToGenerator(m_generator);
0123     m_generator->sendData(filename);
0124 
0125     // compare
0126     QCOMPARE(parser->hasCompositorCrashed(), compositorCrash);
0127 }
0128 
0129 QTEST_GUILESS_MAIN(BacktraceParserTest)