Skip to content

Commit 058f0bb

Browse files
committed
Adding unit tests for new protocol types.
1 parent f39b3a4 commit 058f0bb

File tree

3 files changed

+119
-2
lines changed

3 files changed

+119
-2
lines changed

lldb/tools/lldb-dap/Handler/VariablesRequestHandler.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ VariablesRequestHandler::Run(const VariablesArguments &arguments) const {
2828
uint64_t start = arguments.start;
2929
bool hex = false;
3030
if (arguments.format)
31-
hex = arguments.format->hex.value_or(false);
31+
hex = arguments.format->hex;
3232

3333
std::vector<Variable> variables;
3434

lldb/tools/lldb-dap/Protocol/ProtocolTypes.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ llvm::json::Value toJSON(const Thread &);
475475
/// Provides formatting information for a value.
476476
struct ValueFormat {
477477
/// Display the value in hex.
478-
std::optional<bool> hex;
478+
bool hex = false;
479479
};
480480
bool fromJSON(const llvm::json::Value &, ValueFormat &, llvm::json::Path);
481481

lldb/unittests/DAP/ProtocolTypesTest.cpp

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -883,3 +883,120 @@ TEST(ProtocolTypesTest, ModulesResponseBody) {
883883
ASSERT_THAT_EXPECTED(expected, llvm::Succeeded());
884884
EXPECT_EQ(pp(*expected), pp(response));
885885
}
886+
887+
TEST(ProtocolTypesTest, VariablePresentationHint) {
888+
VariablePresentationHint hint;
889+
hint.kind = "kind";
890+
hint.attributes = {"a", "b", "c"};
891+
hint.visibility = "public";
892+
hint.lazy = true;
893+
894+
const StringRef json = R"({
895+
"attributes": [
896+
"a",
897+
"b",
898+
"c"
899+
],
900+
"kind": "kind",
901+
"lazy": true,
902+
"visibility": "public"
903+
})";
904+
905+
EXPECT_EQ(pp(Value(hint)), json);
906+
EXPECT_THAT_EXPECTED(json::parse(json), HasValue(Value(hint)));
907+
}
908+
909+
TEST(ProtocolTypesTest, Variable) {
910+
Variable var;
911+
var.name = "var1";
912+
var.variablesReference = 42;
913+
var.value = "value";
914+
var.type = "type";
915+
916+
VariablePresentationHint hint;
917+
hint.kind = "kind";
918+
var.presentationHint = std::move(hint);
919+
var.evaluateName = "my_name";
920+
var.namedVariables = 7;
921+
var.indexedVariables = 7;
922+
var.memoryReference = "0x123";
923+
var.declarationLocationReference = 24;
924+
var.valueLocationReference = 100;
925+
926+
const StringRef json = R"({
927+
"declarationLocationReference": 24,
928+
"evaluateName": "my_name",
929+
"indexedVariables": 7,
930+
"memoryReference": "0x123",
931+
"name": "var1",
932+
"namedVariables": 7,
933+
"presentationHint": {
934+
"kind": "kind"
935+
},
936+
"type": "type",
937+
"value": "value",
938+
"valueLocationReference": 100,
939+
"variablesReference": 42
940+
})";
941+
942+
EXPECT_EQ(pp(Value(var)), json);
943+
EXPECT_THAT_EXPECTED(json::parse(json), HasValue(Value(var)));
944+
}
945+
946+
TEST(ProtocolTypesTest, VariablesArguments) {
947+
llvm::Expected<VariablesArguments> expected = parse<VariablesArguments>(R"({
948+
"variablesReference": 42,
949+
"filter": "indexed",
950+
"start": 10,
951+
"count": 5,
952+
"format": {
953+
"hex": true
954+
}
955+
})");
956+
ASSERT_THAT_EXPECTED(expected, llvm::Succeeded());
957+
EXPECT_EQ(expected->variablesReference, 42u);
958+
EXPECT_EQ(expected->filter, VariablesArguments::eVariablesFilterIndexed);
959+
EXPECT_EQ(expected->start, 10u);
960+
EXPECT_EQ(expected->count, 5u);
961+
EXPECT_EQ(expected->format->hex, true);
962+
963+
EXPECT_THAT_EXPECTED(
964+
parse<VariablesArguments>(R"({})"),
965+
FailedWithMessage("missing value at (root).variablesReference"));
966+
EXPECT_THAT_EXPECTED(
967+
parse<VariablesArguments>(
968+
R"({"variablesReference": 42, "filter": "my-filter"})"),
969+
FailedWithMessage(
970+
"unexpected value, expected 'named' or 'indexed' at (root).filter"));
971+
}
972+
973+
TEST(ProtocolTypesTest, VariablesResponseBody) {
974+
Variable var1;
975+
var1.name = "var1";
976+
var1.variablesReference = 42;
977+
var1.value = "<var1-value>";
978+
979+
Variable var2;
980+
var2.name = "var2";
981+
var2.variablesReference = 3;
982+
var2.value = "<var2-value>";
983+
984+
VariablesResponseBody response{{var1, var2}};
985+
986+
Expected<json::Value> expected = json::parse(R"({
987+
"variables": [
988+
{
989+
"name": "var1",
990+
"value": "<var1-value>",
991+
"variablesReference": 42
992+
},
993+
{
994+
"name": "var2",
995+
"value": "<var2-value>",
996+
"variablesReference": 3
997+
}
998+
]
999+
})");
1000+
ASSERT_THAT_EXPECTED(expected, llvm::Succeeded());
1001+
EXPECT_EQ(pp(*expected), pp(response));
1002+
}

0 commit comments

Comments
 (0)