import lldb from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil class TestStringPrinter(TestBase): def test(self): self.build() self.addTearDownHook( lambda x: x.runCmd("setting set escape-non-printables true") ) lldbutil.run_to_source_breakpoint( self, "Break here", lldb.SBFileSpec("main.cpp", False) ) self.expect_var_path( "charwithtabs", summary='"Hello\\t\\tWorld\\nI am here\\t\\tto say hello\\n"', ) self.expect_var_path("a.data", summary='"FOOB"') self.expect_var_path("b.data", summary=r'"FO\0B"') self.expect_var_path("c.data", summary=r'"F\0O"') self.expect_var_path("manytrailingnuls", summary=r'"F\0OO\0BA\0R"') for c in ["", "const"]: for v in ["", "volatile"]: for s in ["", "unsigned"]: summary = '"' + c + v + s + 'char"' self.expect_var_path(c + v + s + "chararray", summary=summary) # These should be printed normally self.expect_var_path(c + v + s + "charstar", summary=summary) Schar5 = self.expect_var_path( "Schar5", children=[ValueCheck(name="x", value="0")] ) self.assertIsNone(Schar5.GetSummary()) Scharstar = self.expect_var_path( "Scharstar", children=[ValueCheck(name="x", value="0")] ) self.assertIsNone(Scharstar.GetSummary()) self.runCmd("setting set escape-non-printables false") self.expect_var_path( "charwithtabs", summary='"Hello\t\tWorld\nI am here\t\tto say hello\n"' ) self.assertTrue( self.frame().FindVariable("longconstcharstar").GetSummary().endswith('"...') ) # FIXME: make "b.data" and "c.data" work sanely self.expect("frame variable ref", substrs=['(&ref = "Hello")']) self.expect_var_path( "ref", summary=None, children=[ValueCheck(name="&ref", summary='"Hello"')], ) # FIXME: should LLDB use "&&refref" for the name here? self.expect("frame variable refref", substrs=['(&refref = "Hi")']) self.expect_var_path( "refref", summary=None, children=[ValueCheck(name="&refref", summary='"Hi"')], )