[Lldb-commits] [lldb] [lldb-dap] Add unit tests for protocol types (PR #139502)
Ebuka Ezike via lldb-commits
lldb-commits at lists.llvm.org
Mon May 12 08:24:40 PDT 2025
================
@@ -0,0 +1,268 @@
+//===-- 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 "gtest/gtest.h"
+
+using namespace llvm;
+using namespace lldb;
+using namespace lldb_dap;
+using namespace lldb_dap::protocol;
+
+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::json::Value value = toJSON(filter);
+ const json::Object *obj = value.getAsObject();
+ ASSERT_NE(obj, nullptr);
+
+ EXPECT_EQ(obj->getString("filter"), "testFilter");
+ EXPECT_EQ(obj->getString("label"), "Test Filter");
+ EXPECT_EQ(obj->getString("description"), "This is a test filter");
+ EXPECT_EQ(obj->getBoolean("default"), true);
+ EXPECT_EQ(obj->getBoolean("supportsCondition"), true);
+ EXPECT_EQ(obj->getString("conditionDescription"),
+ "Condition for test filter");
+}
+
+TEST(ProtocolTypesTest, ColumnDescriptor) {
+ ColumnDescriptor column;
+ column.attributeName = "testAttribute";
+ column.label = "Test Label";
+ column.format = "testFormat";
+ column.type = eColumnTypeString;
+ column.width = 20;
+
+ llvm::json::Value value = toJSON(column);
+ const json::Object *obj = value.getAsObject();
+ ASSERT_NE(obj, nullptr);
+
+ EXPECT_EQ(obj->getString("attributeName"), "testAttribute");
+ EXPECT_EQ(obj->getString("label"), "Test Label");
+ EXPECT_EQ(obj->getString("format"), "testFormat");
+ EXPECT_EQ(obj->getString("type"), "string");
+ EXPECT_EQ(obj->getInteger("width"), 20);
+}
+
+TEST(ProtocolTypesTest, BreakpointMode) {
+ BreakpointMode mode;
+ mode.mode = "testMode";
+ mode.label = "Test Label";
+ mode.description = "This is a test description";
+ mode.appliesTo = {eBreakpointModeApplicabilitySource,
+ eBreakpointModeApplicabilityException};
+
+ llvm::json::Value value = toJSON(mode);
+ const json::Object *obj = value.getAsObject();
+ ASSERT_NE(obj, nullptr);
+
+ EXPECT_EQ(obj->getString("mode"), "testMode");
+ EXPECT_EQ(obj->getString("label"), "Test Label");
+ EXPECT_EQ(obj->getString("description"), "This is a test description");
+
+ const auto *appliesToArray = obj->getArray("appliesTo");
+ ASSERT_NE(appliesToArray, nullptr);
+ ASSERT_EQ(appliesToArray->size(), 2UL);
+ EXPECT_EQ(appliesToArray->front().getAsString(), "source");
+ EXPECT_EQ(appliesToArray->back().getAsString(), "exception");
+}
+
+TEST(ProtocolTypesTest, Capabilities) {
+ Capabilities capabilities;
+ capabilities.supportedFeatures = {eAdapterFeatureANSIStyling,
+ eAdapterFeatureTerminateRequest};
+ capabilities.exceptionBreakpointFilters = {
+ {"filter1", "Filter 1", "Description 1", true, true, "Condition 1"},
+ {"filter2", "Filter 2", "Description 2", false, false, "Condition 2"}};
+ capabilities.completionTriggerCharacters = {"."};
+ capabilities.additionalModuleColumns = {
+ {"attribute1", "Label 1", "Format 1", eColumnTypeString, 10},
+ {"attribute2", "Label 2", "Format 2", eColumnTypeNumber, 20}};
+ capabilities.supportedChecksumAlgorithms = {eChecksumAlgorithmMD5,
+ eChecksumAlgorithmSHA256};
+ capabilities.breakpointModes = {{"mode1",
+ "Mode 1",
+ "Description 1",
+ {eBreakpointModeApplicabilitySource}},
+ {"mode2",
+ "Mode 2",
+ "Description 2",
+ {eBreakpointModeApplicabilityException}}};
+ capabilities.lldbExtVersion = "1.0.0";
+
+ llvm::json::Value value = toJSON(capabilities);
+ const json::Object *obj = value.getAsObject();
+ ASSERT_NE(obj, nullptr);
+
+ // Verify supported features.
+ EXPECT_EQ(obj->getBoolean("supportsANSIStyling"), true);
+ EXPECT_EQ(obj->getBoolean("supportsTerminateRequest"), true);
+
+ // Verify exception breakpoint filters.
+ const auto *filtersArray = obj->getArray("exceptionBreakpointFilters");
+ ASSERT_NE(filtersArray, nullptr);
+ ASSERT_EQ(filtersArray->size(), 2UL);
+ const auto *filter1 = filtersArray->front().getAsObject();
----------------
da-viper wrote:
was referring to the auto in the function.
https://github.com/llvm/llvm-project/pull/139502
More information about the lldb-commits
mailing list