13990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata""" 23990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico GranataTest lldb data formatter subsystem. 33990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata""" 43990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata 53990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granataimport os, time 63990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granataimport unittest2 73990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granataimport lldb 83990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granatafrom lldbtest import * 93990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granataimport lldbutil 103990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata 113990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granataclass LibcxxSetDataFormatterTestCase(TestBase): 123990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata 133990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata mydir = os.path.join("functionalities", "data-formatter", "data-formatter-stl", "libcxx", "set") 143990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata 153990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin") 163990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata @dsym_test 173990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata def test_with_dsym_and_run_command(self): 183990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata """Test data formatter commands.""" 193990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.buildDsym() 203990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.data_formatter_commands() 213990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata 223990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata @skipIfLinux # No standard locations for libc++ on Linux, so skip for now 233990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata @dwarf_test 243990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata def test_with_dwarf_and_run_command(self): 253990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata """Test data formatter commands.""" 263990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.buildDwarf() 273990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.data_formatter_commands() 283990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata 293990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata def setUp(self): 303990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata # Call super's setUp(). 313990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata TestBase.setUp(self) 323990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata 333990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata def data_formatter_commands(self): 343990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata """Test that that file and class static variables display correctly.""" 353990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) 363990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata 373990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata lldbutil.run_break_set_by_source_regexp (self, "Set break point at this line.") 383990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata 393990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.runCmd("run", RUN_SUCCEEDED) 403990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata 413990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata # The stop reason of the thread should be breakpoint. 423990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, 433990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata substrs = ['stopped', 443990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata 'stop reason = breakpoint']) 453990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata 463990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata # This is the function to remove the custom formats in order to have a 473990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata # clean slate for the next test case. 483990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata def cleanup(): 493990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.runCmd('type format clear', check=False) 503990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.runCmd('type summary clear', check=False) 513990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.runCmd('type filter clear', check=False) 523990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.runCmd('type synth clear', check=False) 533990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.runCmd("settings set target.max-children-count 256", check=False) 543990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata 553990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata # Execute the cleanup function during test case tear down. 563990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.addTearDownHook(cleanup) 573990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata 583990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.expect('image list',substrs=['libc++.1.dylib','libc++abi.dylib']) 593990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata 603990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.expect("frame variable ii",substrs = ["size=0","{}"]) 613990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.runCmd("continue") 623990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.expect("frame variable ii",substrs = ["size=6","[0] = 0","[1] = 1", "[2] = 2", "[3] = 3", "[4] = 4", "[5] = 5"]) 633990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.runCmd("continue") 643990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.expect("frame variable ii",substrs = ["size=7","[2] = 2", "[3] = 3", "[6] = 6"]) 653990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.expect("frame variable ii[2]",substrs = [" = 2"]) 663990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.expect("p ii",substrs = ["size=7","[2] = 2", "[3] = 3", "[6] = 6"]) 673990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.runCmd("continue") 683990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.expect("frame variable ii",substrs = ["size=0","{}"]) 693990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.runCmd("continue") 703990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.expect("frame variable ii",substrs = ["size=0","{}"]) 713990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.expect("frame variable ss",substrs = ["size=0","{}"]) 723990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.runCmd("continue") 733990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.expect("frame variable ss",substrs = ["size=2",'[0] = "a"','[1] = "a very long string is right here"']) 743990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.runCmd("continue") 753990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.expect("frame variable ss",substrs = ["size=4",'[2] = "b"','[3] = "c"','[0] = "a"','[1] = "a very long string is right here"']) 763990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.expect("p ss",substrs = ["size=4",'[2] = "b"','[3] = "c"','[0] = "a"','[1] = "a very long string is right here"']) 773990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.expect("frame variable ss[2]",substrs = [' = "b"']) 783990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.runCmd("continue") 793990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata self.expect("frame variable ss",substrs = ["size=3",'[0] = "a"','[1] = "a very long string is right here"','[2] = "c"']) 803990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata 813990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granataif __name__ == '__main__': 823990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata import atexit 833990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata lldb.SBDebugger.Initialize() 843990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata atexit.register(lambda: lldb.SBDebugger.Terminate()) 853990c278c5f4f6ce1373ee3e6d5b984883cf4318Enrico Granata unittest2.main() 86