xref: /llvm-project/lldb/test/API/commands/expression/nested/TestNestedExpressions.py (revision 096c530ab3ea5c96526451181117f30db17b4b1d)
1"""
2Test calling an expression with errors that a FixIt can fix.
3"""
4
5import lldb
6from lldbsuite.test.decorators import *
7from lldbsuite.test.lldbtest import *
8from lldbsuite.test import lldbutil
9
10
11class NestedExpressions(TestBase):
12    def test_enum_in_nested_structs(self):
13        """
14        Test expressions that references an enumeration in nested structs.
15        """
16        self.build()
17        exe_path = self.getBuildArtifact("a.out")
18        target = self.dbg.CreateTarget(exe_path)
19        self.assertTrue(target, "Target: %s is not valid." % (exe_path))
20        self.expect_expr(
21            "A::B::C::EnumType::Eleven",
22            result_type="A::B::C::EnumType",
23            result_value="Eleven",
24        )
25
26    def test_struct_in_nested_structs(self):
27        """
28        Test expressions that references a struct in nested structs.
29        """
30        self.build()
31        exe_path = self.getBuildArtifact("a.out")
32        target = self.dbg.CreateTarget(exe_path)
33        self.assertTrue(target, "Target: %s is not valid." % (exe_path))
34        self.expect_expr("sizeof(A::B::C)", result_value="1")
35        self.expect_expr("sizeof(A::B)", result_value="2")
36
37    # Fails on Windows for unknown reasons.
38    @skipIfWindows
39    def test_static_in_nested_structs(self):
40        """
41        Test expressions that references a static variable in nested structs.
42        """
43        self.build()
44        (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(
45            self, "Stop here to evaluate expressions", lldb.SBFileSpec("main.cpp")
46        )
47        self.expect_expr(
48            "A::B::C::enum_static",
49            result_type="A::B::C::EnumType",
50            result_value="Eleven",
51        )
52
53    def test_enum_in_nested_namespaces(self):
54        """
55        Test expressions that references an enumeration in nested namespaces.
56        """
57        self.build()
58        exe_path = self.getBuildArtifact("a.out")
59        target = self.dbg.CreateTarget(exe_path)
60        self.assertTrue(target, "Target: %s is not valid." % (exe_path))
61        self.expect_expr(
62            "a::b::c::Color::Blue", result_type="a::b::c::Color", result_value="Blue"
63        )
64
65    def test_static_in_nested_namespaces(self):
66        """
67        Test expressions that references an enumeration in nested namespaces.
68        """
69        self.build()
70        (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(
71            self, "Stop here to evaluate expressions", lldb.SBFileSpec("main.cpp")
72        )
73        self.expect_expr("a::b::c::d", result_type="int", result_value="12")
74