| """ | |
| Tests that frame variable and expr work for | |
| C++ unions and their static data members. | |
| """ | |
| import lldb | |
| from lldbsuite.test.lldbtest import * | |
| from lldbsuite.test.decorators import * | |
| import lldbsuite.test.lldbutil as lldbutil | |
| @skipIfWasm # no expression evaluation | |
| class CppUnionStaticMembersTestCase(TestBase): | |
| def test_print_union(self): | |
| """Tests that frame variable and expr work | |
| for union with static data members""" | |
| self.build() | |
| (target, process, main_thread, _) = lldbutil.run_to_source_breakpoint( | |
| self, "return 0", lldb.SBFileSpec("main.cpp") | |
| ) | |
| self.expect("frame variable foo", substrs=["val = 42"]) | |
| self.expect("frame variable bar", substrs=["val = 137"]) | |
| self.expect_expr( | |
| "foo", | |
| result_type="Foo", | |
| result_children=[ValueCheck(name="val", value="42")], | |
| ) | |
| self.expect_expr( | |
| "bar", | |
| result_type="Bar", | |
| result_children=[ValueCheck(name="val", value="137")], | |
| ) | |
| @expectedFailureWindows | |
| def test_expr_union_static_members(self): | |
| """Tests that frame variable and expr work | |
| for union static data members""" | |
| self.build() | |
| (target, process, main_thread, _) = lldbutil.run_to_source_breakpoint( | |
| self, "return 0", lldb.SBFileSpec("main.cpp") | |
| ) | |
| self.expect_expr("Foo::sVal1", result_type="const int", result_value="-42") | |
| self.expect_expr( | |
| "Foo::sVal2", | |
| result_type="Foo", | |
| result_children=[ValueCheck(name="val", value="42")], | |
| ) | |
| @expectedFailureWindows | |
| def test_union_in_anon_namespace(self): | |
| """Tests that frame variable and expr work | |
| for union static data members in anonymous | |
| namespaces""" | |
| self.build() | |
| (target, process, main_thread, _) = lldbutil.run_to_source_breakpoint( | |
| self, "return 0", lldb.SBFileSpec("main.cpp") | |
| ) | |
| self.expect_expr("Bar::sVal1", result_type="const int", result_value="-137") | |
| self.expect_expr( | |
| "Bar::sVal2", | |
| result_type="Bar", | |
| result_children=[ValueCheck(name="val", value="137")], | |
| ) |