File indexing completed on 2024-05-12 05:51:04
0001 /* 0002 SPDX-FileCopyrightText: 2023 Héctor Mesa Jiménez <wmj.py@gmx.com> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "test_gdbbackend.h" 0008 0009 #include "../gdbbackend.h" 0010 0011 #include <QJsonArray> 0012 #include <QJsonObject> 0013 #include <QString> 0014 #include <QTest> 0015 #include <qtestcase.h> 0016 0017 QTEST_MAIN(TestGdbBackend) 0018 0019 void TestGdbBackend::parseBreakpoint() 0020 { 0021 QFETCH(QJsonObject, msg); 0022 QFETCH(int, number); 0023 QFETCH(int, line); 0024 QFETCH(QString, filename); 0025 0026 const auto bpoint = BreakPoint::parse(msg); 0027 0028 QCOMPARE(bpoint.number, number); 0029 QCOMPARE(bpoint.line, line); 0030 QCOMPARE(bpoint.file.toLocalFile(), filename); 0031 } 0032 0033 void TestGdbBackend::parseBreakpoint_data() 0034 { 0035 QTest::addColumn<QJsonObject>("msg"); 0036 QTest::addColumn<int>("number"); 0037 QTest::addColumn<int>("line"); 0038 QTest::addColumn<QString>("filename"); 0039 0040 // GDB: unresolved file (unknown type or unloaded library) 0041 QTest::newRow("gdb_pending") << QJsonObject{{QStringLiteral("number"), QStringLiteral("1")}, 0042 {QStringLiteral("pending"), QStringLiteral("/tests/test.py:44")}, 0043 {QStringLiteral("original-location"), QStringLiteral("/tests/test.py:44")}} 0044 << 1 << 44 << QStringLiteral("/tests/test.py"); 0045 0046 // GDB: available file of a known type 0047 QTest::newRow("gdb_resolved") << QJsonObject{{QStringLiteral("number"), QStringLiteral("2")}, 0048 {QStringLiteral("file"), QStringLiteral("main.cpp")}, 0049 {QStringLiteral("fullname"), QStringLiteral("/tests/main.cpp")}, 0050 {QStringLiteral("line"), QStringLiteral("26")}, 0051 {QStringLiteral("original-location"), QStringLiteral("/tests/main.cpp:25")}} 0052 << 2 << 26 << QStringLiteral("/tests/main.cpp"); 0053 0054 // GDB: resolution of a previous pending breakpoint 0055 QTest::newRow("gdb_pending_resolved") << QJsonObject{{QStringLiteral("number"), QStringLiteral("1")}, 0056 {QStringLiteral("file"), QStringLiteral("main.cpp")}, 0057 {QStringLiteral("fullname"), QStringLiteral("/tests/main.cpp")}, 0058 {QStringLiteral("line"), QStringLiteral("130")}, 0059 {QStringLiteral("original-location"), QStringLiteral("/tests/main.cpp:129")}} 0060 << 1 << 130 << QStringLiteral("/tests/main.cpp"); 0061 0062 // GDB: multiple breakpoints (eg. end of program) 0063 QTest::newRow("gdb_multiple") << QJsonObject{{QStringLiteral("number"), QStringLiteral("2")}, 0064 {QStringLiteral("original-location"), QStringLiteral("/tests/main.cpp:36")}, 0065 {QStringLiteral("locations"), 0066 QJsonArray{ 0067 QJsonObject{ 0068 {QStringLiteral("number"), QStringLiteral("2.1")}, 0069 {QStringLiteral("file"), QStringLiteral("main.cpp")}, 0070 {QStringLiteral("fullname"), QStringLiteral("/tests/main.cpp")}, 0071 {QStringLiteral("line"), QStringLiteral("36")}, 0072 }, 0073 QJsonObject{ 0074 {QStringLiteral("number"), QStringLiteral("2.2")}, 0075 {QStringLiteral("file"), QStringLiteral("main.cpp")}, 0076 {QStringLiteral("fullname"), QStringLiteral("/tests/main.cpp")}, 0077 {QStringLiteral("line"), QStringLiteral("36")}, 0078 }, 0079 }}} 0080 << 2 << 36 << QStringLiteral("/tests/main.cpp"); 0081 0082 // LLDB-MI: unresolved file (unknown type or unloaded library) 0083 QTest::newRow("lldb_pending") << QJsonObject{{QStringLiteral("number"), QStringLiteral("1")}, 0084 {QStringLiteral("pending"), QJsonArray{QStringLiteral("/tests/test.py:42")}}, 0085 {QStringLiteral("file"), QStringLiteral("??")}, 0086 {QStringLiteral("fullname"), QStringLiteral("\?\?/??")}, 0087 {QStringLiteral("original-location"), QStringLiteral("/tests/test.py:42")}} 0088 << 1 << 42 << QStringLiteral("/tests/test.py"); 0089 0090 // LLDB-MI: available file of a known type 0091 QTest::newRow("lldb_resolved") << QJsonObject{{QStringLiteral("number"), QStringLiteral("1")}, 0092 {QStringLiteral("pending"), QJsonArray{QStringLiteral("/tests/main.cpp:25")}}, 0093 {QStringLiteral("line"), QStringLiteral("26")}, 0094 {QStringLiteral("file"), QStringLiteral("test.py")}, 0095 {QStringLiteral("fullname"), QStringLiteral("/tests/main.cpp")}, 0096 {QStringLiteral("original-location"), QStringLiteral("/tests/main.cpp:25")}} 0097 << 1 << 26 << QStringLiteral("/tests/main.cpp"); 0098 0099 // LLDB-MI: resolution of a previous pending breakpoint 0100 QTest::newRow("lldb_resolved") << QJsonObject{{QStringLiteral("number"), QStringLiteral("1")}, 0101 {QStringLiteral("pending"), QJsonArray{QStringLiteral("/tests/solib.cpp:129")}}, 0102 {QStringLiteral("line"), QStringLiteral("130")}, 0103 {QStringLiteral("file"), QStringLiteral("solib.cpp")}, 0104 {QStringLiteral("fullname"), QStringLiteral("/tests/solib.cpp")}, 0105 {QStringLiteral("original-location"), QStringLiteral("/tests/solib.cpp:129")}} 0106 << 1 << 130 << QStringLiteral("/tests/solib.cpp"); 0107 } 0108 0109 #include "moc_test_gdbbackend.cpp"