diff options
Diffstat (limited to 'lldb/test/API/commands/expression')
3 files changed, 104 insertions, 0 deletions
diff --git a/lldb/test/API/commands/expression/nested/Makefile b/lldb/test/API/commands/expression/nested/Makefile new file mode 100644 index 0000000..99998b2 --- /dev/null +++ b/lldb/test/API/commands/expression/nested/Makefile @@ -0,0 +1,3 @@ +CXX_SOURCES := main.cpp + +include Makefile.rules diff --git a/lldb/test/API/commands/expression/nested/TestNestedExpressions.py b/lldb/test/API/commands/expression/nested/TestNestedExpressions.py new file mode 100644 index 0000000..7f194e9 --- /dev/null +++ b/lldb/test/API/commands/expression/nested/TestNestedExpressions.py @@ -0,0 +1,70 @@ +""" +Test calling an expression with errors that a FixIt can fix. +""" + +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + + +class NestedExpressions(TestBase): + + def test_enum_in_nested_structs(self): + """ + Test expressions that references an enumeration in nested structs. + """ + self.build() + exe_path = self.getBuildArtifact("a.out") + target = self.dbg.CreateTarget(exe_path) + self.assertTrue(target, "Target: %s is not valid." % (exe_path)) + self.expect_expr("A::B::C::EnumType::Eleven", + result_type="A::B::C::EnumType", + result_value="Eleven") + + def test_struct_in_nested_structs(self): + """ + Test expressions that references a struct in nested structs. + """ + self.build() + exe_path = self.getBuildArtifact("a.out") + target = self.dbg.CreateTarget(exe_path) + self.assertTrue(target, "Target: %s is not valid." % (exe_path)) + self.expect_expr("sizeof(A::B::C)", result_value="1") + self.expect_expr("sizeof(A::B)", result_value="2") + + def test_static_in_nested_structs(self): + """ + Test expressions that references a static variable in nested structs. + """ + self.build() + (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint( + self, "Stop here to evaluate expressions", lldb.SBFileSpec("main.cpp") + ) + self.expect_expr("A::B::C::enum_static", + result_type="A::B::C::EnumType", + result_value="Eleven") + + def test_enum_in_nested_namespaces(self): + """ + Test expressions that references an enumeration in nested namespaces. + """ + self.build() + exe_path = self.getBuildArtifact("a.out") + target = self.dbg.CreateTarget(exe_path) + self.assertTrue(target, "Target: %s is not valid." % (exe_path)) + self.expect_expr("a::b::c::Color::Blue", + result_type="a::b::c::Color", + result_value="Blue") + + def test_static_in_nested_namespaces(self): + """ + Test expressions that references an enumeration in nested namespaces. + """ + self.build() + (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint( + self, "Stop here to evaluate expressions", lldb.SBFileSpec("main.cpp") + ) + self.expect_expr("a::b::c::d", + result_type="int", + result_value="12") diff --git a/lldb/test/API/commands/expression/nested/main.cpp b/lldb/test/API/commands/expression/nested/main.cpp new file mode 100644 index 0000000..620535f --- /dev/null +++ b/lldb/test/API/commands/expression/nested/main.cpp @@ -0,0 +1,31 @@ +namespace a { +namespace b { +namespace c { +static int d = 12; +enum Color { Red, Green, Blue }; +} // namespace c +} // namespace b +} // namespace a + +struct A { + int _a = 'a'; + struct B { + short _b = 'b'; + struct C { + char _c = 'c'; + enum EnumType : int { Eleven = 11 }; + static EnumType enum_static; + }; + }; +}; + +A::B::C::EnumType A::B::C::enum_static = A::B::C::Eleven; + +int foo() { + a::b::c::Color color = a::b::c::Blue; + return A::B::C::enum_static == a::b::c::d && ((int)color == 0); +} + +int main() { + return foo(); // Stop here to evaluate expressions +} |