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)