1c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata""" 2c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico GranataTest lldb data formatter subsystem. 3c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata""" 4c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata 5c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granataimport os, time 6c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granataimport unittest2 7c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granataimport lldb 8c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granatafrom lldbtest import * 9c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granataimport lldbutil 10c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata 11c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granataclass ValueObjectRecursionTestCase(TestBase): 12c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata 13c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata mydir = os.path.join("functionalities", "recursion") 14c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata 15c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin") 16c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata @dsym_test 17c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata def test_with_dsym_and_run_command(self): 18c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata """Test that deeply nested ValueObjects still work.""" 19c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata self.buildDsym() 20c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata self.recursive_vo_commands() 21c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata 22c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata @dwarf_test 23c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata def test_with_dwarf_and_run_command(self): 24c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata """Test that deeply nested ValueObjects still work.""" 25c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata self.buildDwarf() 26c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata self.recursive_vo_commands() 27c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata 28c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata def setUp(self): 29c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata # Call super's setUp(). 30c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata TestBase.setUp(self) 31c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata # Find the line number to break at. 32c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata self.line = line_number('main.cpp', '// Set break point at this line.') 33c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata 34c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata def recursive_vo_commands(self): 35c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata """Test that that file and class static variables display correctly.""" 36c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) 37c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata 38c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, num_expected_locations=1, loc_exact=True) 39c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata 40c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata self.runCmd("run", RUN_SUCCEEDED) 41c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata 42c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata # The stop reason of the thread should be breakpoint. 43c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, 44c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata substrs = ['stopped', 45c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata 'stop reason = breakpoint']) 46c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata 47c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata # This is the function to remove the custom formats in order to have a 48c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata # clean slate for the next test case. 49c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata def cleanup(): 50c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata self.runCmd('type format clear', check=False) 51c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata self.runCmd('type summary clear', check=False) 52c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata 53c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata # Execute the cleanup function during test case tear down. 54c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata self.addTearDownHook(cleanup) 55c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata 56c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata root = self.frame().FindVariable("root") 57c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata child = root.GetChildAtIndex(1) 58c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata if self.TraceOn(): 59c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata print root 60c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata print child 61c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata for i in range(0,24500): 62c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata child = child.GetChildAtIndex(1) 63c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata if self.TraceOn(): 64c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata print child 65c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata self.assertTrue(child.IsValid(),"could not retrieve the deep ValueObject") 66c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata self.assertTrue(child.GetChildAtIndex(0).IsValid(),"the deep ValueObject has no value") 67c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata self.assertTrue(child.GetChildAtIndex(0).GetValueAsUnsigned() != 0,"the deep ValueObject has a zero value") 68c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata self.assertTrue(child.GetChildAtIndex(1).GetValueAsUnsigned() != 0, "the deep ValueObject has no next") 69c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata 70c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granataif __name__ == '__main__': 71c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata import atexit 72c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata lldb.SBDebugger.Initialize() 73c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata atexit.register(lambda: lldb.SBDebugger.Terminate()) 74c15fb8cd49dd876f992f7fa2d3984c0d93c17cf1Enrico Granata unittest2.main() 75