1ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata""" 2ef1923d722126810ef879edb959eed8c85a0742fEnrico GranataTest lldb data formatter subsystem. 3ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata""" 4ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 5ef1923d722126810ef879edb959eed8c85a0742fEnrico Granataimport os, time 6ef1923d722126810ef879edb959eed8c85a0742fEnrico Granataimport unittest2 7ef1923d722126810ef879edb959eed8c85a0742fEnrico Granataimport lldb 8ef1923d722126810ef879edb959eed8c85a0742fEnrico Granatafrom lldbtest import * 9431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Inghamimport lldbutil 10ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 1192f75728050db93bfaf3e73d86a4a8a3a75dad8aJohnny Chenclass Radar9974002DataFormatterTestCase(TestBase): 12ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 13ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata # test for rdar://problem/9974002 () 14ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata mydir = os.path.join("functionalities", "data-formatter", "rdar-9974002") 15ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 16ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin") 17a3ed7d834b0e0c6924ac95629e740682bbcd15baJohnny Chen @dsym_test 18ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata def test_with_dsym_and_run_command(self): 19ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata """Test data formatter commands.""" 20ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.buildDsym() 21ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.data_formatter_commands() 22ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 23a3ed7d834b0e0c6924ac95629e740682bbcd15baJohnny Chen @dwarf_test 24ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata def test_with_dwarf_and_run_command(self): 25ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata """Test data formatter commands.""" 26ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.buildDwarf() 27ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.data_formatter_commands() 28ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 29ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata def setUp(self): 30ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata # Call super's setUp(). 31ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata TestBase.setUp(self) 32ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata # Find the line number to break at. 33ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.line = line_number('main.cpp', '// Set break point at this line.') 34ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 35ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata def data_formatter_commands(self): 36ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata """Test that that file and class static variables display correctly.""" 372bea9f01f3f6c0de99a2e57c57bf32c7f46ec6bcDaniel Malea if "clang" in self.getCompiler() and "3.4" in self.getCompilerVersion(): 382bea9f01f3f6c0de99a2e57c57bf32c7f46ec6bcDaniel Malea self.skipTest("llvm.org/pr16214 -- clang emits partial DWARF for structures referenced via typedef") 392bea9f01f3f6c0de99a2e57c57bf32c7f46ec6bcDaniel Malea 40ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) 41ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 42431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Ingham lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, num_expected_locations=1, loc_exact=True) 43ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 44ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.runCmd("run", RUN_SUCCEEDED) 45ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 46ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata # The stop reason of the thread should be breakpoint. 47ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, 48ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata substrs = ['stopped', 49ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 'stop reason = breakpoint']) 50ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 51ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata # This is the function to remove the custom formats in order to have a 52ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata # clean slate for the next test case. 53ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata def cleanup(): 54ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.runCmd('type summary clear', check=False) 55ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 56ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata # Execute the cleanup function during test case tear down. 57ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.addTearDownHook(cleanup) 58ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 59ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.runCmd("type summary add -s \"${var.scalar} and ${var.pointer.first}\" container") 60ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 61ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.expect('frame variable mine', 62ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata substrs = ['mine = ', 63ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata '1', '<parent is NULL>']) 64ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 65ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.runCmd("type summary add -s \"${var.scalar} and ${var.pointer}\" container") 66ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 67ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.expect('frame variable mine', 68ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata substrs = ['mine = ', 69ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata '1', '0x000000']) 70ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 71ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.runCmd("type summary add -s \"${var.scalar} and ${var.pointer%S}\" container") 72ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 73ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.expect('frame variable mine', 74ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata substrs = ['mine = ', 75ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata '1', '0x000000']) 76ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 77ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.runCmd("type summary add -s foo contained") 78ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 79ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.expect('frame variable mine', 80ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata substrs = ['mine = ', 81ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata '1', 'foo']) 82ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 83ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.runCmd("type summary add -s \"${var.scalar} and ${var.pointer}\" container") 84ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 85ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.expect('frame variable mine', 86ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata substrs = ['mine = ', 87ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata '1', 'foo']) 88ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 89ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.runCmd("type summary add -s \"${var.scalar} and ${var.pointer%V}\" container") 90ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 91ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.expect('frame variable mine', 92ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata substrs = ['mine = ', 93ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata '1', '0x000000']) 94ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 95ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.runCmd("type summary add -s \"${var.scalar} and ${var.pointer.first}\" container") 96ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 97ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.expect('frame variable mine', 98ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata substrs = ['mine = ', 99ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata '1', '<parent is NULL>']) 100ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 101ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.runCmd("type summary delete contained") 102ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.runCmd("n") 103ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 104ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.expect('frame variable mine', 105ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata substrs = ['mine = ', 106ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata '1', '<parent is NULL>']) 107ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 108ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.runCmd("type summary add -s \"${var.scalar} and ${var.pointer}\" container") 109ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 110ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.expect('frame variable mine', 111ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata substrs = ['mine = ', 112ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata '1', '0x000000']) 113ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 114ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.runCmd("type summary add -s \"${var.scalar} and ${var.pointer%S}\" container") 115ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 116ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.expect('frame variable mine', 117ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata substrs = ['mine = ', 118ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata '1', '0x000000']) 119ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 120ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.runCmd("type summary add -s foo contained") 121ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 122ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.expect('frame variable mine', 123ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata substrs = ['mine = ', 124ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata '1', 'foo']) 125ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 126ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.runCmd("type summary add -s \"${var.scalar} and ${var.pointer}\" container") 127ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 128ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.expect('frame variable mine', 129ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata substrs = ['mine = ', 130ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata '1', 'foo']) 131ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 132ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.runCmd("type summary add -s \"${var.scalar} and ${var.pointer%V}\" container") 133ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 134ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.expect('frame variable mine', 135ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata substrs = ['mine = ', 136ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata '1', '0x000000']) 137ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 138ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.runCmd("type summary add -s \"${var.scalar} and ${var.pointer.first}\" container") 139ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 140ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata self.expect('frame variable mine', 141ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata substrs = ['mine = ', 142ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata '1', '<parent is NULL>']) 143ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 144ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata 145ef1923d722126810ef879edb959eed8c85a0742fEnrico Granataif __name__ == '__main__': 146ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata import atexit 147ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata lldb.SBDebugger.Initialize() 148ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata atexit.register(lambda: lldb.SBDebugger.Terminate()) 149ef1923d722126810ef879edb959eed8c85a0742fEnrico Granata unittest2.main() 150