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"