| """ |
| Test that recursive types are handled correctly. |
| """ |
| |
| from __future__ import print_function |
| |
| |
| import lldb |
| import lldbsuite.test.lldbutil as lldbutil |
| import sys |
| from lldbsuite.test.lldbtest import * |
| |
| |
| class RecursiveTypesTestCase(TestBase): |
| |
| mydir = TestBase.compute_mydir(__file__) |
| |
| def setUp(self): |
| # Call super's setUp(). |
| TestBase.setUp(self) |
| # disable "There is a running process, kill it and restart?" prompt |
| self.runCmd("settings set auto-confirm true") |
| self.addTearDownHook( |
| lambda: self.runCmd("settings clear auto-confirm")) |
| # Find the line number to break for main.c. |
| self.line = line_number('recursive_type_main.cpp', |
| '// Test at this line.') |
| |
| self.d1 = { |
| 'CXX_SOURCES': 'recursive_type_main.cpp recursive_type_1.cpp'} |
| self.d2 = { |
| 'CXX_SOURCES': 'recursive_type_main.cpp recursive_type_2.cpp'} |
| |
| def test_recursive_type_1(self): |
| """Test that recursive structs are displayed correctly.""" |
| self.build(dictionary=self.d1) |
| self.setTearDownCleanup(dictionary=self.d1) |
| self.print_struct() |
| |
| def test_recursive_type_2(self): |
| """Test that recursive structs are displayed correctly.""" |
| self.build(dictionary=self.d2) |
| self.setTearDownCleanup(dictionary=self.d2) |
| self.print_struct() |
| |
| def print_struct(self): |
| self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET) |
| |
| lldbutil.run_break_set_by_file_and_line( |
| self, |
| "recursive_type_main.cpp", |
| self.line, |
| num_expected_locations=-1, |
| loc_exact=True) |
| |
| self.runCmd("run", RUN_SUCCEEDED) |
| |
| self.expect("print tpi", RUN_SUCCEEDED) |
| self.expect("print *tpi", RUN_SUCCEEDED) |