"""Test that lldb recognizes enum variant emitted by Rust compiler """ import logging import lldb from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from RustEnumValue import RustEnumValue class TestRustEnumStructs(TestBase): def setUp(self): TestBase.setUp(self) src_dir = self.getSourceDir() yaml_path = os.path.join(src_dir, "main.yaml") obj_path = self.getBuildArtifact("main.o") self.yaml2obj(yaml_path, obj_path) self.dbg.CreateTarget(obj_path) def getFromGlobal(self, name): values = self.target().FindGlobalVariables(name, 1) self.assertEqual(values.GetSize(), 1) return RustEnumValue(values[0]) def test_enum_instance(self): # static ENUM_INSTANCE: A = A::A(B::B(10)); value = self.getFromGlobal("ENUM_INSTANCE").getCurrentValue() self.assertEqual(value.GetType().GetDisplayTypeName(), "main::A::A") value_b = RustEnumValue(value.GetChildAtIndex(0)) self.assertEqual( value_b.getCurrentValue() .GetChildAtIndex(0) .GetData() .GetUnsignedInt8(lldb.SBError(), 0), 10, )