Michael Buch 3c32360c83
[lldb][test] Rewrite TestStringPrinter.py in a non-inline API test style (#174385)
Motivation here is that I'm planning to add more test cases to this and
it's easier to read/maintain as an API test.

Drive-by:
* I also removed the `std::string` checks since those belong in the STL
formatter tests.
2026-01-05 13:43:59 +00:00

53 lines
1.8 KiB
Python

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