@@ -530,3 +530,75 @@ TEST(ProtocolTypesTest, ChecksumAlgorithm) {
530530 llvm::json::Path::Root root;
531531 EXPECT_FALSE (fromJSON (invalid_value, deserialized_invalid, root));
532532}
533+
534+ TEST (ProtocolTypesTest, DisassembledInstructionPresentationHint) {
535+ // Test all PresentationHint values.
536+ std::vector<
537+ std::pair<DisassembledInstruction::PresentationHint, llvm::StringRef>>
538+ test_cases = {{DisassembledInstruction::
539+ eDisassembledInstructionPresentationHintNormal,
540+ " normal" },
541+ {DisassembledInstruction::
542+ eDisassembledInstructionPresentationHintInvalid,
543+ " invalid" }};
544+
545+ for (const auto &test_case : test_cases) {
546+ // Serialize the PresentationHint to JSON.
547+ llvm::json::Value serialized = toJSON (test_case.first );
548+ ASSERT_EQ (serialized.kind (), llvm::json::Value::Kind::String);
549+ EXPECT_EQ (serialized.getAsString (), test_case.second );
550+
551+ // Deserialize the JSON back to PresentationHint.
552+ DisassembledInstruction::PresentationHint deserialized;
553+ llvm::json::Path::Root root;
554+ ASSERT_TRUE (fromJSON (serialized, deserialized, root))
555+ << llvm::toString (root.getError ());
556+ EXPECT_EQ (deserialized, test_case.first );
557+ }
558+
559+ // Test invalid value.
560+ llvm::json::Value invalid_value = " invalid_hint" ;
561+ DisassembledInstruction::PresentationHint deserialized_invalid;
562+ llvm::json::Path::Root root;
563+ EXPECT_FALSE (fromJSON (invalid_value, deserialized_invalid, root));
564+ }
565+
566+ TEST (ProtocolTypesTest, DisassembledInstruction) {
567+ DisassembledInstruction instruction;
568+ instruction.address = 0x12345678 ;
569+ instruction.instructionBytes = " 0F 1F 00" ;
570+ instruction.instruction = " mov eax, ebx" ;
571+ instruction.symbol = " main" ;
572+ instruction.location = Source{" test.cpp" , " /path/to/test.cpp" , 123 ,
573+ Source::eSourcePresentationHintNormal};
574+ instruction.line = 10 ;
575+ instruction.column = 5 ;
576+ instruction.endLine = 15 ;
577+ instruction.endColumn = 10 ;
578+ instruction.presentationHint =
579+ DisassembledInstruction::eDisassembledInstructionPresentationHintNormal;
580+
581+ llvm::Expected<DisassembledInstruction> deserialized_instruction =
582+ roundtrip (instruction);
583+ ASSERT_THAT_EXPECTED (deserialized_instruction, llvm::Succeeded ());
584+
585+ EXPECT_EQ (instruction.address , deserialized_instruction->address );
586+ EXPECT_EQ (instruction.instructionBytes ,
587+ deserialized_instruction->instructionBytes );
588+ EXPECT_EQ (instruction.instruction , deserialized_instruction->instruction );
589+ EXPECT_EQ (instruction.symbol , deserialized_instruction->symbol );
590+ EXPECT_EQ (instruction.location ->name ,
591+ deserialized_instruction->location ->name );
592+ EXPECT_EQ (instruction.location ->path ,
593+ deserialized_instruction->location ->path );
594+ EXPECT_EQ (instruction.location ->sourceReference ,
595+ deserialized_instruction->location ->sourceReference );
596+ EXPECT_EQ (instruction.location ->presentationHint ,
597+ deserialized_instruction->location ->presentationHint );
598+ EXPECT_EQ (instruction.line , deserialized_instruction->line );
599+ EXPECT_EQ (instruction.column , deserialized_instruction->column );
600+ EXPECT_EQ (instruction.endLine , deserialized_instruction->endLine );
601+ EXPECT_EQ (instruction.endColumn , deserialized_instruction->endColumn );
602+ EXPECT_EQ (instruction.presentationHint ,
603+ deserialized_instruction->presentationHint );
604+ }
0 commit comments