Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions lldb/tools/lldb-dap/Protocol/ProtocolTypes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,16 @@ llvm::json::Value toJSON(const Source &S) {
return result;
}

bool fromJSON(const llvm::json::Value &Params, ExceptionBreakpointsFilter &EBF,
llvm::json::Path P) {
json::ObjectMapper O(Params, P);
return O && O.map("filter", EBF.filter) && O.map("label", EBF.label) &&
O.mapOptional("description", EBF.description) &&
O.mapOptional("default", EBF.defaultState) &&
O.mapOptional("supportsCondition", EBF.supportsCondition) &&
O.mapOptional("conditionDescription", EBF.conditionDescription);
}

json::Value toJSON(const ExceptionBreakpointsFilter &EBF) {
json::Object result{{"filter", EBF.filter}, {"label", EBF.label}};

Expand Down
2 changes: 2 additions & 0 deletions lldb/tools/lldb-dap/Protocol/ProtocolTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ struct ExceptionBreakpointsFilter {
/// shown as the placeholder text for a text box and can be translated.
std::optional<std::string> conditionDescription;
};
bool fromJSON(const llvm::json::Value &, ExceptionBreakpointsFilter &,
llvm::json::Path);
llvm::json::Value toJSON(const ExceptionBreakpointsFilter &);

enum ColumnType : unsigned {
Expand Down
2 changes: 2 additions & 0 deletions lldb/unittests/DAP/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
add_lldb_unittest(DAPTests
JSONUtilsTest.cpp
LLDBUtilsTest.cpp
ProtocolTypesTest.cpp

LINK_LIBS
lldbDAP
LLVMTestingSupport
LINK_COMPONENTS
Support
)
62 changes: 62 additions & 0 deletions lldb/unittests/DAP/ProtocolTypesTest.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
//===-- 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/ProtocolTypes.h"
#include "llvm/Testing/Support/Error.h"
#include "gtest/gtest.h"

using namespace lldb;
using namespace lldb_dap;
using namespace lldb_dap::protocol;

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";
filter.label = "Test Filter";
filter.description = "This is a test filter";
filter.defaultState = true;
filter.supportsCondition = true;
filter.conditionDescription = "Condition for test filter";

llvm::Expected<ExceptionBreakpointsFilter> deserialized_filter =
roundtrip(filter);
ASSERT_THAT_EXPECTED(deserialized_filter, llvm::Succeeded());

EXPECT_EQ(filter.filter, deserialized_filter->filter);
EXPECT_EQ(filter.label, deserialized_filter->label);
EXPECT_EQ(filter.description, deserialized_filter->description);
EXPECT_EQ(filter.defaultState, deserialized_filter->defaultState);
EXPECT_EQ(filter.supportsCondition, deserialized_filter->supportsCondition);
EXPECT_EQ(filter.conditionDescription,
deserialized_filter->conditionDescription);
}

TEST(ProtocolTypesTest, Source) {
Source source;
source.name = "testName";
source.path = "/path/to/source";
source.sourceReference = 12345;
source.presentationHint = ePresentationHintEmphasize;

llvm::Expected<Source> deserialized_source = roundtrip(source);
ASSERT_THAT_EXPECTED(deserialized_source, llvm::Succeeded());

EXPECT_EQ(source.name, deserialized_source->name);
EXPECT_EQ(source.path, deserialized_source->path);
EXPECT_EQ(source.sourceReference, deserialized_source->sourceReference);
EXPECT_EQ(source.presentationHint, deserialized_source->presentationHint);
}
Loading