| 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"')], | |
| ) |