File indexing completed on 2024-05-12 05:50:54

0001 /* This file is part of the KDE project
0002  *
0003  *  SPDX-FileCopyrightText: 2014 Dominik Haumann <dhaumann@kde.org>
0004  *
0005  *  SPDX-License-Identifier: LGPL-2.0-or-later
0006  */
0007 
0008 #include "btbrowsertest.h"
0009 #include "btparser.h"
0010 
0011 #include <QtTestWidgets>
0012 
0013 QTEST_MAIN(KateBtBrowserTest)
0014 
0015 void KateBtBrowserTest::initTestCase()
0016 {
0017 }
0018 
0019 void KateBtBrowserTest::cleanupTestCase()
0020 {
0021 }
0022 
0023 void KateBtBrowserTest::testParser()
0024 {
0025     // make sure the different types of gdb backtraces are parsed correctly
0026 
0027     // 1) #24 0xb688ff8e in QApplication::notify (this=0xbf997e8c, receiver=0x82607e8, e=0xbf997074) at kernel/qapplication.cpp:3115
0028     // 2) #39 0xb634211c in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
0029     // 3) #41 0x0805e690 in ?? ()
0030     // 4) #5  0xffffe410 in __kernel_vsyscall ()
0031 
0032     QString bt = QStringLiteral("#24 0xb688ff8e in QApplication::notify (this=0xbf997e8c, receiver=0x82607e8, e=0xbf997074) at kernel/qapplication.cpp:3115");
0033     QList<BtInfo> info = KateBtParser::parseBacktrace(bt);
0034 
0035     QVERIFY(info.size() == 1);
0036     QCOMPARE(info[0].type, BtInfo::Source);
0037     QCOMPARE(info[0].original, bt);
0038     QCOMPARE(info[0].filename, QLatin1String("kernel/qapplication.cpp"));
0039     QCOMPARE(info[0].function, QLatin1String("QApplication::notify (this=0xbf997e8c, receiver=0x82607e8, e=0xbf997074)"));
0040     QCOMPARE(info[0].address, QLatin1String("0xb688ff8e"));
0041     QCOMPARE(info[0].line, 3115);
0042     QCOMPARE(info[0].step, 24);
0043 
0044     bt = QStringLiteral("#39 0xb634211c in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0");
0045     info = KateBtParser::parseBacktrace(bt);
0046     QVERIFY(info.size() == 1);
0047     QCOMPARE(info[0].type, BtInfo::Lib);
0048     QCOMPARE(info[0].original, bt);
0049     QCOMPARE(info[0].filename, QLatin1String("/usr/lib/libglib-2.0.so.0"));
0050     QCOMPARE(info[0].function, QLatin1String("g_main_context_dispatch ()"));
0051     QCOMPARE(info[0].address, QLatin1String("0xb634211c"));
0052     QCOMPARE(info[0].line, -1);
0053     QCOMPARE(info[0].step, 39);
0054 
0055     bt = QStringLiteral("#41 0x0805e690 in ?? ()");
0056     info = KateBtParser::parseBacktrace(bt);
0057     QVERIFY(info.size() == 1);
0058     QCOMPARE(info[0].type, BtInfo::Unknown);
0059     QCOMPARE(info[0].original, bt);
0060     QCOMPARE(info[0].filename, QString());
0061     QCOMPARE(info[0].function, QString());
0062     QCOMPARE(info[0].address, QLatin1String("0x0805e690"));
0063     QCOMPARE(info[0].line, -1);
0064     QCOMPARE(info[0].step, 41);
0065 
0066     bt = QStringLiteral("#5  0xffffe410 in __kernel_vsyscall ()");
0067     info = KateBtParser::parseBacktrace(bt);
0068     QVERIFY(info.size() == 1);
0069     QCOMPARE(info[0].type, BtInfo::Unknown);
0070     QCOMPARE(info[0].original, bt);
0071     QCOMPARE(info[0].filename, QString());
0072     QCOMPARE(info[0].function, QLatin1String("__kernel_vsyscall ()"));
0073     QCOMPARE(info[0].address, QLatin1String("0xffffe410"));
0074     QCOMPARE(info[0].line, -1);
0075     QCOMPARE(info[0].step, 5);
0076 
0077     bt = QStringLiteral("    Thread 1 (Thread 0x7fb6ba260780 (LWP 16447)):\n[KCrash Handler]");
0078     info = KateBtParser::parseBacktrace(bt);
0079     QVERIFY(info.empty());
0080 }
0081 
0082 #include "moc_btbrowsertest.cpp"
0083 
0084 // kate: space-indent on; indent-width 4; replace-tabs on;