17541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata""" 27541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico GranataTest lldb data formatter subsystem. 37541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata""" 47541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 57541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granataimport os, time 67541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granataimport unittest2 77541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granataimport lldb 87541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granatafrom lldbtest import * 9431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Inghamimport lldbutil 107541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 1166205ce5381ab6db1f9bff83c483a4dc5854afc7Enrico Granataclass LibcxxListDataFormatterTestCase(TestBase): 127541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 1366205ce5381ab6db1f9bff83c483a4dc5854afc7Enrico Granata mydir = os.path.join("functionalities", "data-formatter", "data-formatter-stl", "libcxx", "list") 147541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 157541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin") 16a3ed7d834b0e0c6924ac95629e740682bbcd15baJohnny Chen @dsym_test 177541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata def test_with_dsym_and_run_command(self): 187541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata """Test data formatter commands.""" 197541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.buildDsym() 207541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.data_formatter_commands() 217541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 226bc4dcdfbcdfa455299d2123011b82a77351ee72Daniel Malea @skipIfLinux # No standard locations for libc++ on Linux, so skip for now 23a3ed7d834b0e0c6924ac95629e740682bbcd15baJohnny Chen @dwarf_test 247541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata def test_with_dwarf_and_run_command(self): 257541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata """Test data formatter commands.""" 267541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.buildDwarf() 277541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.data_formatter_commands() 287541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 297541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata def setUp(self): 307541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata # Call super's setUp(). 317541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata TestBase.setUp(self) 327541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata # Find the line number to break at. 337541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.line = line_number('main.cpp', '// Set break point at this line.') 3466205ce5381ab6db1f9bff83c483a4dc5854afc7Enrico Granata self.line2 = line_number('main.cpp', '// Set second break point at this line.') 357541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 367541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata def data_formatter_commands(self): 377541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata """Test that that file and class static variables display correctly.""" 387541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) 397541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 40431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Ingham lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, num_expected_locations=-1) 41431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Ingham lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line2, num_expected_locations=-1) 427541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 437541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.runCmd("run", RUN_SUCCEEDED) 447541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 457541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata # The stop reason of the thread should be breakpoint. 467541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, 477541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata substrs = ['stopped', 487541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 'stop reason = breakpoint']) 497541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 507541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata # This is the function to remove the custom formats in order to have a 517541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata # clean slate for the next test case. 527541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata def cleanup(): 537541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.runCmd('type format clear', check=False) 547541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.runCmd('type summary clear', check=False) 557541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.runCmd('type filter clear', check=False) 567541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.runCmd('type synth clear', check=False) 577541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.runCmd("settings set target.max-children-count 256", check=False) 587541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 597541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata # Execute the cleanup function during test case tear down. 607541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.addTearDownHook(cleanup) 617541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 626475c42148a8ea1ca86e5db465db7eca742d897dGreg Clayton self.runCmd("frame variable numbers_list --show-types") 637541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.runCmd("type summary add std::int_list std::string_list int_list string_list --summary-string \"list has ${svar%#} items\" -e") 647541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.runCmd("type format add -f hex int") 657541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 667541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.expect("frame variable numbers_list --raw", matching=False, 677541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata substrs = ['list has 0 items', 687541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '{}']) 697541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 707541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.expect("frame variable numbers_list", 717541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata substrs = ['list has 0 items', 727541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '{}']) 737541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 747541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.expect("p numbers_list", 757541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata substrs = ['list has 0 items', 767541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '{}']) 777541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 787541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.runCmd("n") 797541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 807541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.expect("frame variable numbers_list", 817541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata substrs = ['list has 1 items', 827541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '[0] = ', 837541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '0x12345678']) 847541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 857541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.runCmd("n");self.runCmd("n");self.runCmd("n"); 867541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 877541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.expect("frame variable numbers_list", 887541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata substrs = ['list has 4 items', 897541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '[0] = ', 907541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '0x12345678', 917541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '[1] =', 927541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '0x11223344', 937541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '[2] =', 947541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '0xbeeffeed', 957541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '[3] =', 967541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '0x00abba00']) 977541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 987541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.runCmd("n");self.runCmd("n"); 997541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 1007541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.expect("frame variable numbers_list", 1017541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata substrs = ['list has 6 items', 1027541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '[0] = ', 1037541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '0x12345678', 1047541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '0x11223344', 1057541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '0xbeeffeed', 1067541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '0x00abba00', 1077541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '[4] =', 1087541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '0x0abcdef0', 1097541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '[5] =', 1107541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '0x0cab0cab']) 1117541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 1127541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.expect("p numbers_list", 1137541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata substrs = ['list has 6 items', 1147541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '[0] = ', 1157541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '0x12345678', 1167541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '0x11223344', 1177541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '0xbeeffeed', 1187541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '0x00abba00', 1197541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '[4] =', 1207541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '0x0abcdef0', 1217541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '[5] =', 1227541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '0x0cab0cab']) 1237541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 1247541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata # check access-by-index 1257541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.expect("frame variable numbers_list[0]", 1267541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata substrs = ['0x12345678']); 1277541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.expect("frame variable numbers_list[1]", 1287541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata substrs = ['0x11223344']); 1297541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 1307541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.runCmd("n") 1317541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 1327541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.expect("frame variable numbers_list", 1337541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata substrs = ['list has 0 items', 1347541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '{}']) 1357541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 1367541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.runCmd("n");self.runCmd("n");self.runCmd("n");self.runCmd("n"); 1377541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 1387541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.expect("frame variable numbers_list", 1397541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata substrs = ['list has 4 items', 1407541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '[0] = ', '1', 1417541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '[1] = ', '2', 1427541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '[2] = ', '3', 1437541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '[3] = ', '4']) 1447541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 145251729ef30fde23e4b1256690fbb60962390e560Enrico Granata # check that MightHaveChildren() gets it right 146251729ef30fde23e4b1256690fbb60962390e560Enrico Granata self.assertTrue(self.frame().FindVariable("numbers_list").MightHaveChildren(), "numbers_list.MightHaveChildren() says False for non empty!") 147251729ef30fde23e4b1256690fbb60962390e560Enrico Granata 1487541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.runCmd("type format delete int") 1497541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 15066205ce5381ab6db1f9bff83c483a4dc5854afc7Enrico Granata self.runCmd("c") 1517541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 1527541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.expect("frame variable text_list", 15366205ce5381ab6db1f9bff83c483a4dc5854afc7Enrico Granata substrs = ['list has 3 items', 1547541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '[0]', 'goofy', 1557541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata '[1]', 'is', 15666205ce5381ab6db1f9bff83c483a4dc5854afc7Enrico Granata '[2]', 'smart']) 1577541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 158251729ef30fde23e4b1256690fbb60962390e560Enrico Granata # check that MightHaveChildren() gets it right 159251729ef30fde23e4b1256690fbb60962390e560Enrico Granata self.assertTrue(self.frame().FindVariable("text_list").MightHaveChildren(), "text_list.MightHaveChildren() says False for non empty!") 160251729ef30fde23e4b1256690fbb60962390e560Enrico Granata 1617541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.expect("p text_list", 16266205ce5381ab6db1f9bff83c483a4dc5854afc7Enrico Granata substrs = ['list has 3 items', 163e20090b92739c6a142bf97e69159cccc869c394dEnrico Granata '\"goofy\"', 164e20090b92739c6a142bf97e69159cccc869c394dEnrico Granata '\"is\"', 16566205ce5381ab6db1f9bff83c483a4dc5854afc7Enrico Granata '\"smart\"']) 1667541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 16766205ce5381ab6db1f9bff83c483a4dc5854afc7Enrico Granata self.runCmd("n") 16866205ce5381ab6db1f9bff83c483a4dc5854afc7Enrico Granata 1697541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata # check access-by-index 1707541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.expect("frame variable text_list[0]", 1717541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata substrs = ['goofy']); 1727541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata self.expect("frame variable text_list[3]", 1737541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata substrs = ['!!!']); 1747541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata 1757541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granataif __name__ == '__main__': 1767541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata import atexit 1777541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata lldb.SBDebugger.Initialize() 1787541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata atexit.register(lambda: lldb.SBDebugger.Terminate()) 1797541b1b40662fa80d0d5f3988c1fdbf2d7454f74Enrico Granata unittest2.main() 180