aboutsummaryrefslogtreecommitdiff
path: root/lldb/test/API/lang/rust/enum-variant-same-name/TestRustEnumVariantSameName.py
blob: 0a192dcada83ffdb45278c84f88f9c6391f04012 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
"""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,
        )