@@ -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