1# coding=utf8 2""" 3Test lldb data formatter subsystem. 4""" 5 6 7import lldb 8from lldbsuite.test.decorators import * 9from lldbsuite.test.lldbtest import * 10from lldbsuite.test import lldbutil 11 12 13class StdStringDataFormatterTestCase(TestBase): 14 def setUp(self): 15 # Call super's setUp(). 16 TestBase.setUp(self) 17 # Find the line number to break at. 18 self.line = line_number("main.cpp", "// Set break point at this line.") 19 20 @add_test_categories(["libstdcxx"]) 21 @expectedFailureAll(bugnumber="llvm.org/pr50861", compiler="gcc") 22 def test_with_run_command(self): 23 """Test that that file and class static variables display correctly.""" 24 self.build() 25 self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET) 26 27 lldbutil.run_break_set_by_file_and_line( 28 self, "main.cpp", self.line, num_expected_locations=-1 29 ) 30 31 self.runCmd("run", RUN_SUCCEEDED) 32 33 # The stop reason of the thread should be breakpoint. 34 self.expect( 35 "thread list", 36 STOPPED_DUE_TO_BREAKPOINT, 37 substrs=["stopped", "stop reason = breakpoint"], 38 ) 39 40 # This is the function to remove the custom formats in order to have a 41 # clean slate for the next test case. 42 def cleanup(): 43 self.runCmd("type format clear", check=False) 44 self.runCmd("type summary clear", check=False) 45 self.runCmd("type filter clear", check=False) 46 self.runCmd("type synth clear", check=False) 47 self.runCmd("settings set target.max-children-count 256", check=False) 48 49 # Execute the cleanup function during test case tear down. 50 self.addTearDownHook(cleanup) 51 52 var_wempty = self.frame().FindVariable("wempty") 53 var_s = self.frame().FindVariable("s") 54 var_S = self.frame().FindVariable("S") 55 var_mazeltov = self.frame().FindVariable("mazeltov") 56 var_empty = self.frame().FindVariable("empty") 57 var_q = self.frame().FindVariable("q") 58 var_Q = self.frame().FindVariable("Q") 59 var_rq = self.frame().FindVariable("rq") 60 var_rQ = self.frame().FindVariable("rQ") 61 var_pq = self.frame().FindVariable("pq") 62 var_pQ = self.frame().FindVariable("pQ") 63 64 self.assertEqual(var_wempty.GetSummary(), 'L""', "wempty summary wrong") 65 self.assertEqual( 66 var_s.GetSummary(), 'L"hello world! מזל טוב!"', "s summary wrong" 67 ) 68 self.assertEqual(var_S.GetSummary(), 'L"!!!!"', "S summary wrong") 69 self.assertEqual( 70 var_mazeltov.GetSummary(), 'L"מזל טוב"', "mazeltov summary wrong" 71 ) 72 self.assertEqual(var_empty.GetSummary(), '""', "empty summary wrong") 73 self.assertEqual(var_q.GetSummary(), '"hello world"', "q summary wrong") 74 self.assertEqual( 75 var_Q.GetSummary(), 76 '"quite a long std::strin with lots of info inside it"', 77 "Q summary wrong", 78 ) 79 self.assertEqual(var_rq.GetSummary(), '"hello world"', "rq summary wrong") 80 self.assertEqual( 81 var_rQ.GetSummary(), 82 '"quite a long std::strin with lots of info inside it"', 83 "rQ summary wrong", 84 ) 85 self.assertEqual(var_pq.GetSummary(), '"hello world"', "pq summary wrong") 86 self.assertEqual( 87 var_pQ.GetSummary(), 88 '"quite a long std::strin with lots of info inside it"', 89 "pQ summary wrong", 90 ) 91 92 self.runCmd("next") 93 94 self.assertEqual(var_S.GetSummary(), 'L"!!!!!"', "new S summary wrong") 95