[Lldb-commits] [lldb] [lldb-dap] Splitting ProtocolTypesTest into parts. (PR #144595)
John Harrison via lldb-commits
lldb-commits at lists.llvm.org
Tue Jun 17 13:13:34 PDT 2025
https://github.com/ashgti updated https://github.com/llvm/llvm-project/pull/144595
>From 212d503e9cde2c715b6f4d372ea3be8383a5fc1d Mon Sep 17 00:00:00 2001
From: John Harrison <harjohn at google.com>
Date: Tue, 17 Jun 2025 13:10:07 -0700
Subject: [PATCH 1/2] [lldb-dap] Splitting ProtocolTypesTest into parts.
Splitting ProtocolTypesTest into separate files for ProtocolBase, ProtocolEvent, ProtocolRequests and ProtocolTypes.
---
lldb/tools/lldb-dap/DAPError.cpp | 3 +-
lldb/tools/lldb-dap/DAPError.h | 12 +-
lldb/tools/lldb-dap/Protocol/ProtocolBase.cpp | 16 +--
lldb/tools/lldb-dap/Protocol/ProtocolBase.h | 6 +-
lldb/unittests/DAP/CMakeLists.txt | 3 +
lldb/unittests/DAP/ProtocolBaseTest.cpp | 131 ++++++++++++++++++
lldb/unittests/DAP/ProtocolEventsTest.cpp | 37 +++++
lldb/unittests/DAP/ProtocolRequestsTest.cpp | 82 +++++++++++
lldb/unittests/DAP/ProtocolTypesTest.cpp | 96 +------------
.../TestingSupport/TestUtilities.cpp | 5 +
lldb/unittests/TestingSupport/TestUtilities.h | 15 ++
11 files changed, 294 insertions(+), 112 deletions(-)
create mode 100644 lldb/unittests/DAP/ProtocolBaseTest.cpp
create mode 100644 lldb/unittests/DAP/ProtocolEventsTest.cpp
create mode 100644 lldb/unittests/DAP/ProtocolRequestsTest.cpp
diff --git a/lldb/tools/lldb-dap/DAPError.cpp b/lldb/tools/lldb-dap/DAPError.cpp
index 60347d577f821..c60e8bcc11fa4 100644
--- a/lldb/tools/lldb-dap/DAPError.cpp
+++ b/lldb/tools/lldb-dap/DAPError.cpp
@@ -16,8 +16,7 @@ namespace lldb_dap {
char DAPError::ID;
DAPError::DAPError(std::string message, std::error_code EC, bool show_user,
- std::optional<std::string> url,
- std::optional<std::string> url_label)
+ std::string url, std::string url_label)
: m_message(message), m_ec(EC), m_show_user(show_user), m_url(url),
m_url_label(url_label) {}
diff --git a/lldb/tools/lldb-dap/DAPError.h b/lldb/tools/lldb-dap/DAPError.h
index 4c94bdd6ac3d6..f44361f7be641 100644
--- a/lldb/tools/lldb-dap/DAPError.h
+++ b/lldb/tools/lldb-dap/DAPError.h
@@ -21,23 +21,23 @@ class DAPError : public llvm::ErrorInfo<DAPError> {
DAPError(std::string message,
std::error_code EC = llvm::inconvertibleErrorCode(),
- bool show_user = true, std::optional<std::string> url = std::nullopt,
- std::optional<std::string> url_label = std::nullopt);
+ bool show_user = true, std::string url = "",
+ std::string url_label = "");
void log(llvm::raw_ostream &OS) const override;
std::error_code convertToErrorCode() const override;
const std::string &getMessage() const { return m_message; }
bool getShowUser() const { return m_show_user; }
- const std::optional<std::string> &getURL() const { return m_url; }
- const std::optional<std::string> &getURLLabel() const { return m_url; }
+ const std::string &getURL() const { return m_url; }
+ const std::string &getURLLabel() const { return m_url; }
private:
std::string m_message;
std::error_code m_ec;
bool m_show_user;
- std::optional<std::string> m_url;
- std::optional<std::string> m_url_label;
+ std::string m_url;
+ std::string m_url_label;
};
/// An error that indicates the current request handler cannot execute because
diff --git a/lldb/tools/lldb-dap/Protocol/ProtocolBase.cpp b/lldb/tools/lldb-dap/Protocol/ProtocolBase.cpp
index bc4fee4aa8b8d..2b23d9c43aadc 100644
--- a/lldb/tools/lldb-dap/Protocol/ProtocolBase.cpp
+++ b/lldb/tools/lldb-dap/Protocol/ProtocolBase.cpp
@@ -180,9 +180,9 @@ bool fromJSON(json::Value const &Params, Response &R, json::Path P) {
json::Value toJSON(const ErrorMessage &EM) {
json::Object Result{{"id", EM.id}, {"format", EM.format}};
- if (EM.variables) {
+ if (!EM.variables.empty()) {
json::Object variables;
- for (auto &var : *EM.variables)
+ for (auto &var : EM.variables)
variables[var.first] = var.second;
Result.insert({"variables", std::move(variables)});
}
@@ -190,9 +190,9 @@ json::Value toJSON(const ErrorMessage &EM) {
Result.insert({"sendTelemetry", EM.sendTelemetry});
if (EM.showUser)
Result.insert({"showUser", EM.showUser});
- if (EM.url)
+ if (!EM.url.empty())
Result.insert({"url", EM.url});
- if (EM.urlLabel)
+ if (!EM.urlLabel.empty())
Result.insert({"urlLabel", EM.urlLabel});
return std::move(Result);
@@ -201,10 +201,10 @@ json::Value toJSON(const ErrorMessage &EM) {
bool fromJSON(json::Value const &Params, ErrorMessage &EM, json::Path P) {
json::ObjectMapper O(Params, P);
return O && O.map("id", EM.id) && O.map("format", EM.format) &&
- O.map("variables", EM.variables) &&
- O.map("sendTelemetry", EM.sendTelemetry) &&
- O.map("showUser", EM.showUser) && O.map("url", EM.url) &&
- O.map("urlLabel", EM.urlLabel);
+ O.mapOptional("variables", EM.variables) &&
+ O.mapOptional("sendTelemetry", EM.sendTelemetry) &&
+ O.mapOptional("showUser", EM.showUser) &&
+ O.mapOptional("url", EM.url) && O.mapOptional("urlLabel", EM.urlLabel);
}
json::Value toJSON(const Event &E) {
diff --git a/lldb/tools/lldb-dap/Protocol/ProtocolBase.h b/lldb/tools/lldb-dap/Protocol/ProtocolBase.h
index 81496380d412f..2017258b72618 100644
--- a/lldb/tools/lldb-dap/Protocol/ProtocolBase.h
+++ b/lldb/tools/lldb-dap/Protocol/ProtocolBase.h
@@ -119,7 +119,7 @@ struct ErrorMessage {
/// An object used as a dictionary for looking up the variables in the format
/// string.
- std::optional<std::map<std::string, std::string>> variables;
+ std::map<std::string, std::string> variables;
/// If true send to telemetry.
bool sendTelemetry = false;
@@ -128,10 +128,10 @@ struct ErrorMessage {
bool showUser = false;
/// A url where additional information about this message can be found.
- std::optional<std::string> url;
+ std::string url;
/// A label that is presented to the user as the UI for opening the url.
- std::optional<std::string> urlLabel;
+ std::string urlLabel;
};
bool fromJSON(const llvm::json::Value &, ErrorMessage &, llvm::json::Path);
llvm::json::Value toJSON(const ErrorMessage &);
diff --git a/lldb/unittests/DAP/CMakeLists.txt b/lldb/unittests/DAP/CMakeLists.txt
index ee623d341ec69..0806e1a28eb85 100644
--- a/lldb/unittests/DAP/CMakeLists.txt
+++ b/lldb/unittests/DAP/CMakeLists.txt
@@ -5,6 +5,9 @@ add_lldb_unittest(DAPTests
Handler/ContinueTest.cpp
JSONUtilsTest.cpp
LLDBUtilsTest.cpp
+ ProtocolBaseTest.cpp
+ ProtocolEventsTest.cpp
+ ProtocolRequestsTest.cpp
ProtocolTypesTest.cpp
TestBase.cpp
VariablesTest.cpp
diff --git a/lldb/unittests/DAP/ProtocolBaseTest.cpp b/lldb/unittests/DAP/ProtocolBaseTest.cpp
new file mode 100644
index 0000000000000..1fc095d325049
--- /dev/null
+++ b/lldb/unittests/DAP/ProtocolBaseTest.cpp
@@ -0,0 +1,131 @@
+//===-- ProtocolTypesTest.cpp -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "Protocol/ProtocolBase.h"
+#include "TestingSupport/TestUtilities.h"
+#include "llvm/Testing/Support/Error.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+// using namespace lldb;
+using namespace lldb_dap;
+using namespace lldb_dap::protocol;
+using lldb_private::pp;
+using llvm::json::parse;
+using llvm::json::Value;
+
+TEST(ProtocolBaseTest, Request) {
+ // Validate toJSON
+ EXPECT_EQ(pp(Request{/*seq=*/42, /*command=*/"hello_world",
+ /*arguments=*/std::nullopt}),
+ R"({
+ "command": "hello_world",
+ "seq": 42,
+ "type": "request"
+})");
+
+ // Validate fromJSON
+ EXPECT_THAT_EXPECTED(
+ parse<Request>(R"({"type":"request","seq":42,"command":"hello_world"})"),
+ HasValue(Value(Request{/*seq=*/42, /*command=*/"hello_world",
+ /*arguments*/ std::nullopt})));
+
+ // Validate parsing errors
+ EXPECT_THAT_EXPECTED(parse<Request>(R"({})"),
+ FailedWithMessage("missing value at (root).type"));
+ EXPECT_THAT_EXPECTED(parse<Request>(R"({"type":"request"})"),
+ FailedWithMessage("missing value at (root).command"));
+}
+
+TEST(ProtocolBaseTest, Response) {
+ // Validate toJSON
+ EXPECT_EQ(pp(Response{/*request_seq=*/42, /*command=*/"hello_world",
+ /*success=*/true,
+ /*message=*/std::nullopt, /*body=*/std::nullopt}),
+ R"({
+ "command": "hello_world",
+ "request_seq": 42,
+ "seq": 0,
+ "success": true,
+ "type": "response"
+})");
+
+ // Validate fromJSON
+ EXPECT_THAT_EXPECTED(
+ parse<Response>(
+ R"({"type":"response","seq":0,"request_seq":42,"command":"hello_world","success":true})"),
+ HasValue(
+ Value(Response{/*seq=*/42, /*command=*/"hello_world",
+ /*success=*/true,
+ /*message*/ std::nullopt, /*body=*/std::nullopt})));
+
+ // Validate parsing errors
+ EXPECT_THAT_EXPECTED(parse<Response>(R"({})"),
+ FailedWithMessage("missing value at (root).type"));
+ EXPECT_THAT_EXPECTED(parse<Response>(R"({"type":"response"})"),
+ FailedWithMessage("missing value at (root).seq"));
+}
+
+TEST(ProtocolBaseTest, Event) {
+ // Validate toJSON
+ EXPECT_EQ(pp(Event{/*event=*/"hello_world", /*body=*/std::nullopt}),
+ R"({
+ "event": "hello_world",
+ "seq": 0,
+ "type": "event"
+})");
+
+ // Validate fromJSON
+ EXPECT_THAT_EXPECTED(
+ parse<Event>(R"({"type":"event","seq":0,"event":"hello_world"})"),
+ HasValue(Value(Event{/*command=*/"hello_world", /*body=*/std::nullopt})));
+
+ // Validate parsing errors
+ EXPECT_THAT_EXPECTED(parse<Response>(R"({})"),
+ FailedWithMessage("missing value at (root).type"));
+}
+
+TEST(ProtocolBaseTest, ErrorMessage) {
+ // Validate toJSON
+ EXPECT_EQ(pp(ErrorMessage{/*id=*/42,
+ /*format=*/"Hello world!",
+ /*variables=*/{{"name", "value"}},
+ /*sendTelemetry=*/true,
+ /*showUser=*/true,
+ /*url=*/"http://example.com/error/42",
+ /*urlLabel*/ "ErrorLabel"}),
+ R"({
+ "format": "Hello world!",
+ "id": 42,
+ "sendTelemetry": true,
+ "showUser": true,
+ "url": "http://example.com/error/42",
+ "urlLabel": "ErrorLabel",
+ "variables": {
+ "name": "value"
+ }
+})");
+
+ // Validate fromJSON
+ EXPECT_THAT_EXPECTED(
+ parse<ErrorMessage>(
+ R"({"format":"Hello world!","id":42,"sendTelemetry":true,"showUser":true,"url":"http://example.com/error/42","urlLabel":"ErrorLabel","variables":{"name": "value"}})"),
+ HasValue(Value(ErrorMessage{/*id=*/42,
+ /*format=*/"Hello world!",
+ /*variables=*/{{"name", "value"}},
+ /*sendTelemetry=*/true,
+ /*showUser=*/true,
+ /*url=*/"http://example.com/error/42",
+ /*urlLabel*/ "ErrorLabel"})));
+
+ // Validate parsing errors
+ EXPECT_THAT_EXPECTED(parse<ErrorMessage>(R"({})"),
+ FailedWithMessage("missing value at (root).id"));
+ EXPECT_THAT_EXPECTED(parse<ErrorMessage>(R"({"id":42})"),
+ FailedWithMessage("missing value at (root).format"));
+}
diff --git a/lldb/unittests/DAP/ProtocolEventsTest.cpp b/lldb/unittests/DAP/ProtocolEventsTest.cpp
new file mode 100644
index 0000000000000..d9666e06fcac5
--- /dev/null
+++ b/lldb/unittests/DAP/ProtocolEventsTest.cpp
@@ -0,0 +1,37 @@
+//===-- ProtocolTypesTest.cpp -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "Protocol/ProtocolEvents.h"
+#include "Protocol/ProtocolTypes.h"
+#include "TestingSupport/TestUtilities.h"
+#include "llvm/ADT/StringRef.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+using namespace lldb;
+using namespace lldb_dap;
+using namespace lldb_dap::protocol;
+using lldb_private::pp;
+
+TEST(ProtocolEventsTest, CapabilitiesEventBody) {
+ Capabilities capabilities;
+ capabilities.supportedFeatures = {
+ eAdapterFeatureANSIStyling,
+ eAdapterFeatureBreakpointLocationsRequest,
+ };
+ CapabilitiesEventBody body;
+ body.capabilities = capabilities;
+ StringRef json = R"({
+ "capabilities": {
+ "supportsANSIStyling": true,
+ "supportsBreakpointLocationsRequest": true
+ }
+})";
+ // Validate toJSON
+ EXPECT_EQ(json, pp(body));
+}
diff --git a/lldb/unittests/DAP/ProtocolRequestsTest.cpp b/lldb/unittests/DAP/ProtocolRequestsTest.cpp
new file mode 100644
index 0000000000000..bee34cbad9239
--- /dev/null
+++ b/lldb/unittests/DAP/ProtocolRequestsTest.cpp
@@ -0,0 +1,82 @@
+//===-- ProtocolTypesTest.cpp -----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "Protocol/ProtocolRequests.h"
+#include "Protocol/ProtocolTypes.h"
+#include "TestingSupport/TestUtilities.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Testing/Support/Error.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+#include <optional>
+
+using namespace llvm;
+using namespace lldb;
+using namespace lldb_dap;
+using namespace lldb_dap::protocol;
+using lldb_private::pp;
+using llvm::json::parse;
+
+TEST(ProtocolRequestsTest, ThreadResponseBody) {
+ const ThreadsResponseBody body{{{1, "thr1"}, {2, "thr2"}}};
+ const StringRef json = R"({
+ "threads": [
+ {
+ "id": 1,
+ "name": "thr1"
+ },
+ {
+ "id": 2,
+ "name": "thr2"
+ }
+ ]
+})";
+ // Validate toJSON
+ EXPECT_EQ(json, pp(body));
+}
+
+TEST(ProtocolRequestsTest, SetExceptionBreakpointsArguments) {
+ EXPECT_THAT_EXPECTED(
+ parse<SetExceptionBreakpointsArguments>(R"({"filters":[]})"),
+ HasValue(testing::FieldsAre(/*filters=*/testing::IsEmpty(),
+ /*filterOptions=*/testing::IsEmpty())));
+ EXPECT_THAT_EXPECTED(
+ parse<SetExceptionBreakpointsArguments>(R"({"filters":["abc"]})"),
+ HasValue(testing::FieldsAre(/*filters=*/std::vector<std::string>{"abc"},
+ /*filterOptions=*/testing::IsEmpty())));
+ EXPECT_THAT_EXPECTED(
+ parse<SetExceptionBreakpointsArguments>(
+ R"({"filters":[],"filterOptions":[{"filterId":"abc"}]})"),
+ HasValue(testing::FieldsAre(
+ /*filters=*/testing::IsEmpty(),
+ /*filterOptions=*/testing::Contains(testing::FieldsAre(
+ /*filterId=*/"abc", /*condition=*/"", /*mode=*/"")))));
+
+ // Validate parse errors
+ EXPECT_THAT_EXPECTED(parse<SetExceptionBreakpointsArguments>(R"({})"),
+ FailedWithMessage("missing value at (root).filters"));
+ EXPECT_THAT_EXPECTED(
+ parse<SetExceptionBreakpointsArguments>(R"({"filters":false})"),
+ FailedWithMessage("expected array at (root).filters"));
+}
+
+TEST(ProtocolRequestsTest, SetExceptionBreakpointsResponseBody) {
+ SetExceptionBreakpointsResponseBody body;
+ Breakpoint bp;
+ bp.id = 12, bp.verified = true;
+ body.breakpoints = {bp};
+ EXPECT_EQ(R"({
+ "breakpoints": [
+ {
+ "id": 12,
+ "verified": true
+ }
+ ]
+})",
+ pp(body));
+}
diff --git a/lldb/unittests/DAP/ProtocolTypesTest.cpp b/lldb/unittests/DAP/ProtocolTypesTest.cpp
index 46a09f090fea2..825c259b5134e 100644
--- a/lldb/unittests/DAP/ProtocolTypesTest.cpp
+++ b/lldb/unittests/DAP/ProtocolTypesTest.cpp
@@ -7,8 +7,7 @@
//===----------------------------------------------------------------------===//
#include "Protocol/ProtocolTypes.h"
-#include "Protocol/ProtocolEvents.h"
-#include "Protocol/ProtocolRequests.h"
+#include "TestingSupport/TestUtilities.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/JSON.h"
#include "llvm/Testing/Support/Error.h"
@@ -20,23 +19,11 @@ using namespace llvm;
using namespace lldb;
using namespace lldb_dap;
using namespace lldb_dap::protocol;
+using lldb_private::pp;
+using lldb_private::roundtrip;
using llvm::json::parse;
using llvm::json::Value;
-/// Returns a pretty printed json string of a `llvm::json::Value`.
-static std::string pp(const json::Value &E) {
- return formatv("{0:2}", E).str();
-}
-
-template <typename T> static llvm::Expected<T> roundtrip(const T &input) {
- llvm::json::Value value = toJSON(input);
- llvm::json::Path::Root root;
- T output;
- if (!fromJSON(value, output, root))
- return root.getError();
- return output;
-}
-
TEST(ProtocolTypesTest, ExceptionBreakpointsFilter) {
ExceptionBreakpointsFilter filter;
filter.filter = "testFilter";
@@ -641,42 +628,6 @@ TEST(ProtocolTypesTest, Thread) {
FailedWithMessage("expected string at thread.name"));
}
-TEST(ProtocolTypesTest, ThreadResponseBody) {
- const ThreadsResponseBody body{{{1, "thr1"}, {2, "thr2"}}};
- const StringRef json = R"({
- "threads": [
- {
- "id": 1,
- "name": "thr1"
- },
- {
- "id": 2,
- "name": "thr2"
- }
- ]
-})";
- // Validate toJSON
- EXPECT_EQ(json, pp(body));
-}
-
-TEST(ProtocolTypesTest, CapabilitiesEventBody) {
- Capabilities capabilities;
- capabilities.supportedFeatures = {
- eAdapterFeatureANSIStyling,
- eAdapterFeatureBreakpointLocationsRequest,
- };
- CapabilitiesEventBody body;
- body.capabilities = capabilities;
- StringRef json = R"({
- "capabilities": {
- "supportsANSIStyling": true,
- "supportsBreakpointLocationsRequest": true
- }
-})";
- // Validate toJSON
- EXPECT_EQ(json, pp(body));
-}
-
TEST(ProtocolTypesTest, ExceptionFilterOptions) {
EXPECT_THAT_EXPECTED(parse<ExceptionFilterOptions>(R"({"filterId":"id"})"),
HasValue(Value(ExceptionFilterOptions{
@@ -705,47 +656,6 @@ TEST(ProtocolTypesTest, ExceptionFilterOptions) {
FailedWithMessage("expected string at exceptionFilterOptions.mode"));
}
-TEST(ProtocolTypesTest, SetExceptionBreakpointsArguments) {
- EXPECT_THAT_EXPECTED(
- parse<SetExceptionBreakpointsArguments>(R"({"filters":[]})"),
- HasValue(testing::FieldsAre(/*filters=*/testing::IsEmpty(),
- /*filterOptions=*/testing::IsEmpty())));
- EXPECT_THAT_EXPECTED(
- parse<SetExceptionBreakpointsArguments>(R"({"filters":["abc"]})"),
- HasValue(testing::FieldsAre(/*filters=*/std::vector<std::string>{"abc"},
- /*filterOptions=*/testing::IsEmpty())));
- EXPECT_THAT_EXPECTED(
- parse<SetExceptionBreakpointsArguments>(
- R"({"filters":[],"filterOptions":[{"filterId":"abc"}]})"),
- HasValue(testing::FieldsAre(
- /*filters=*/testing::IsEmpty(),
- /*filterOptions=*/testing::Contains(testing::FieldsAre(
- /*filterId=*/"abc", /*condition=*/"", /*mode=*/"")))));
-
- // Validate parse errors
- EXPECT_THAT_EXPECTED(parse<SetExceptionBreakpointsArguments>(R"({})"),
- FailedWithMessage("missing value at (root).filters"));
- EXPECT_THAT_EXPECTED(
- parse<SetExceptionBreakpointsArguments>(R"({"filters":false})"),
- FailedWithMessage("expected array at (root).filters"));
-}
-
-TEST(ProtocolTypesTest, SetExceptionBreakpointsResponseBody) {
- SetExceptionBreakpointsResponseBody body;
- Breakpoint bp;
- bp.id = 12, bp.verified = true;
- body.breakpoints = {bp};
- EXPECT_EQ(R"({
- "breakpoints": [
- {
- "id": 12,
- "verified": true
- }
- ]
-})",
- pp(body));
-}
-
TEST(ProtocolTypesTest, StepInTarget) {
StepInTarget target;
target.id = 230;
diff --git a/lldb/unittests/TestingSupport/TestUtilities.cpp b/lldb/unittests/TestingSupport/TestUtilities.cpp
index b53822e38324b..0c9860f479449 100644
--- a/lldb/unittests/TestingSupport/TestUtilities.cpp
+++ b/lldb/unittests/TestingSupport/TestUtilities.cpp
@@ -20,6 +20,11 @@ using namespace lldb_private;
extern const char *TestMainArgv0;
std::once_flag TestUtilities::g_debugger_initialize_flag;
+
+std::string lldb_private::pp(const llvm::json::Value &E) {
+ return llvm::formatv("{0:2}", E).str();
+}
+
std::string lldb_private::GetInputFilePath(const llvm::Twine &name) {
llvm::SmallString<128> result = llvm::sys::path::parent_path(TestMainArgv0);
llvm::sys::fs::make_absolute(result);
diff --git a/lldb/unittests/TestingSupport/TestUtilities.h b/lldb/unittests/TestingSupport/TestUtilities.h
index 65994384059fb..a77a16b0812ec 100644
--- a/lldb/unittests/TestingSupport/TestUtilities.h
+++ b/lldb/unittests/TestingSupport/TestUtilities.h
@@ -30,6 +30,20 @@
}
namespace lldb_private {
+
+/// Returns a pretty printed json string of a `llvm::json::Value`.
+std::string pp(const llvm::json::Value &E);
+
+/// Converts the given value into JSON and back into the same type.
+template <typename T> static llvm::Expected<T> roundtrip(const T &input) {
+ llvm::json::Value value = toJSON(input);
+ llvm::json::Path::Root root;
+ T output;
+ if (!fromJSON(value, output, root))
+ return root.getError();
+ return output;
+}
+
std::string GetInputFilePath(const llvm::Twine &name);
class TestUtilities {
@@ -59,6 +73,7 @@ class TestFile {
std::string Buffer;
};
+
} // namespace lldb_private
#endif
>From 634fd1443afe4a7d8bc8c74e4ec7475b44046ed6 Mon Sep 17 00:00:00 2001
From: John Harrison <harjohn at google.com>
Date: Tue, 17 Jun 2025 13:13:20 -0700
Subject: [PATCH 2/2] Fixing test doc comments.
---
lldb/unittests/DAP/ProtocolBaseTest.cpp | 2 +-
lldb/unittests/DAP/ProtocolEventsTest.cpp | 2 +-
lldb/unittests/DAP/ProtocolRequestsTest.cpp | 2 +-
lldb/unittests/DAP/ProtocolTypesTest.cpp | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/lldb/unittests/DAP/ProtocolBaseTest.cpp b/lldb/unittests/DAP/ProtocolBaseTest.cpp
index 1fc095d325049..61a3b45439b87 100644
--- a/lldb/unittests/DAP/ProtocolBaseTest.cpp
+++ b/lldb/unittests/DAP/ProtocolBaseTest.cpp
@@ -1,4 +1,4 @@
-//===-- ProtocolTypesTest.cpp -----------------------------------*- C++ -*-===//
+//===-- ProtocolBaseTest.cpp ----------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/lldb/unittests/DAP/ProtocolEventsTest.cpp b/lldb/unittests/DAP/ProtocolEventsTest.cpp
index d9666e06fcac5..4477f86adf971 100644
--- a/lldb/unittests/DAP/ProtocolEventsTest.cpp
+++ b/lldb/unittests/DAP/ProtocolEventsTest.cpp
@@ -1,4 +1,4 @@
-//===-- ProtocolTypesTest.cpp -----------------------------------*- C++ -*-===//
+//===-- ProtocolEventsTest.cpp --------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/lldb/unittests/DAP/ProtocolRequestsTest.cpp b/lldb/unittests/DAP/ProtocolRequestsTest.cpp
index bee34cbad9239..84d45ce02ba92 100644
--- a/lldb/unittests/DAP/ProtocolRequestsTest.cpp
+++ b/lldb/unittests/DAP/ProtocolRequestsTest.cpp
@@ -1,4 +1,4 @@
-//===-- ProtocolTypesTest.cpp -----------------------------------*- C++ -*-===//
+//===-- ProtocolRequestsTest.cpp ------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/lldb/unittests/DAP/ProtocolTypesTest.cpp b/lldb/unittests/DAP/ProtocolTypesTest.cpp
index 825c259b5134e..b6a5742164b58 100644
--- a/lldb/unittests/DAP/ProtocolTypesTest.cpp
+++ b/lldb/unittests/DAP/ProtocolTypesTest.cpp
@@ -1,4 +1,4 @@
-//===-- ProtocolTypesTest.cpp -----------------------------------*- C++ -*-===//
+//===-- ProtocolTypesTest.cpp ---------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
More information about the lldb-commits
mailing list