Author: Michael Buch Date: 2026-01-05T13:43:59Z New Revision: 3c32360c83b98850733801f45dd6cef472fda6cf
URL: https://github.com/llvm/llvm-project/commit/3c32360c83b98850733801f45dd6cef472fda6cf DIFF: https://github.com/llvm/llvm-project/commit/3c32360c83b98850733801f45dd6cef472fda6cf.diff LOG: [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. Added: lldb/test/API/functionalities/data-formatter/stringprinter/Makefile Modified: lldb/test/API/functionalities/data-formatter/stringprinter/TestStringPrinter.py lldb/test/API/functionalities/data-formatter/stringprinter/main.cpp Removed: ################################################################################ diff --git a/lldb/test/API/functionalities/data-formatter/stringprinter/Makefile b/lldb/test/API/functionalities/data-formatter/stringprinter/Makefile new file mode 100644 index 0000000000000..4f79c0a900c3a --- /dev/null +++ b/lldb/test/API/functionalities/data-formatter/stringprinter/Makefile @@ -0,0 +1,4 @@ +CXX_SOURCES := main.cpp +CXXFLAGS_EXTRAS := -std=c++20 + +include Makefile.rules diff --git a/lldb/test/API/functionalities/data-formatter/stringprinter/TestStringPrinter.py b/lldb/test/API/functionalities/data-formatter/stringprinter/TestStringPrinter.py index 0e3bfc2733a56..fa6cfb46ed413 100644 --- a/lldb/test/API/functionalities/data-formatter/stringprinter/TestStringPrinter.py +++ b/lldb/test/API/functionalities/data-formatter/stringprinter/TestStringPrinter.py @@ -1,7 +1,52 @@ -from lldbsuite.test import lldbinline -from lldbsuite.test import decorators +import lldb +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil -lldbinline.MakeInlineTest( - __file__, - globals(), -) + +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 diff --git a/lldb/test/API/functionalities/data-formatter/stringprinter/main.cpp b/lldb/test/API/functionalities/data-formatter/stringprinter/main.cpp index 6b39e4bf6e846..3bbc9b28b8c08 100644 --- a/lldb/test/API/functionalities/data-formatter/stringprinter/main.cpp +++ b/lldb/test/API/functionalities/data-formatter/stringprinter/main.cpp @@ -1,4 +1,4 @@ -#include <string> +#include <cstdio> #include <cstring> struct A { @@ -20,67 +20,63 @@ struct A { MAKE_VARS(); MAKE_VARS(const); -template<typename T> -struct S { +template <typename T> struct S { int x = 0; }; S<char[5]> Schar5; S<char *> Scharstar; -int main (int argc, char const *argv[]) -{ - const char manytrailingnuls[] = "F\0OO\0BA\0R\0\0\0\0"; - A a, b, c; - // Deliberately write past the end of data to test that the formatter stops - // at the end of array. - memcpy(a.data, "FOOBAR", 7); - memcpy(b.data, "FO\0BAR", 7); - memcpy(c.data, "F\0O\0AR", 7); - std::string stdstring("Hello\t\tWorld\nI am here\t\tto say hello\n"); //%self.addTearDownHook(lambda x: x.runCmd("setting set escape-non-printables true")) - const char *charwithtabs = stdstring.c_str(); - std::string longstring( -"I am a very long string; in fact I am longer than any reasonable length that a string should be; quite long indeed; oh my, so many words; so many letters; this is kind of like writing a poem; except in real life all that is happening" -" is just me producing a very very long set of words; there is text here, text there, text everywhere; it fills me with glee to see so much text; all around me it's just letters, and symbols, and other pleasant drawings that cause me" -" a large amount of joy upon visually seeing them with my eyes; well, this is now a lot of letters, but it is still not enough for the purpose of the test I want to test, so maybe I should copy and paste this a few times, you know.." -" for science, or something" - "I am a very long string; in fact I am longer than any reasonable length that a string should be; quite long indeed; oh my, so many words; so many letters; this is kind of like writing a poem; except in real life all that is happening" - " is just me producing a very very long set of words; there is text here, text there, text everywhere; it fills me with glee to see so much text; all around me it's just letters, and symbols, and other pleasant drawings that cause me" - " a large amount of joy upon visually seeing them with my eyes; well, this is now a lot of letters, but it is still not enough for the purpose of the test I want to test, so maybe I should copy and paste this a few times, you know.." +int main(int argc, char const *argv[]) { + const char manytrailingnuls[] = "F\0OO\0BA\0R\0\0\0\0"; + A a, b, c; + // Deliberately write past the end of data to test that the formatter stops + // at the end of array. + memcpy(a.data, "FOOBAR", 7); + memcpy(b.data, "FO\0BAR", 7); + memcpy(c.data, "F\0O\0AR", 7); + const char *charwithtabs = "Hello\t\tWorld\nI am here\t\tto say hello\n"; + const char *longconstcharstar = + "I am a very long string; in fact I am longer than any reasonable length " + "that a string should be; quite long indeed; oh my, so many words; so " + "many letters; this is kind of like writing a poem; except in real life " + "all that is happening" + " is just me producing a very very long set of words; there is text " + "here, text there, text everywhere; it fills me with glee to see so much " + "text; all around me it's just letters, and symbols, and other pleasant " + "drawings that cause me" + " a large amount of joy upon visually seeing them with my eyes; well, " + "this is now a lot of letters, but it is still not enough for the " + "purpose of the test I want to test, so maybe I should copy and paste " + "this a few times, you know.." " for science, or something" - "I am a very long string; in fact I am longer than any reasonable length that a string should be; quite long indeed; oh my, so many words; so many letters; this is kind of like writing a poem; except in real life all that is happening" - " is just me producing a very very long set of words; there is text here, text there, text everywhere; it fills me with glee to see so much text; all around me it's just letters, and symbols, and other pleasant drawings that cause me" - " a large amount of joy upon visually seeing them with my eyes; well, this is now a lot of letters, but it is still not enough for the purpose of the test I want to test, so maybe I should copy and paste this a few times, you know.." - " for science, or something" - ); - const char* longconstcharstar = longstring.c_str(); - return 0; //% if self.TraceOn(): self.runCmd('frame variable') - //% - //% self.expect_var_path('stdstring', summary='"Hello\\t\\tWorld\\nI am here\\t\\tto say hello\\n"') - //% 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('stdstring', summary='"Hello\t\tWorld\nI am here\t\tto say hello\n"') - //% self.expect_var_path('charwithtabs', summary='"Hello\t\tWorld\nI am here\t\tto say hello\n"') - //% self.assertTrue(self.frame().FindVariable('longstring').GetSummary().endswith('"...')) - //% self.assertTrue(self.frame().FindVariable('longconstcharstar').GetSummary().endswith('"...')) - // FIXME: make "b.data" and "c.data" work sanely -} + "I am a very long string; in fact I am longer than any reasonable length " + "that a string should be; quite long indeed; oh my, so many words; so " + "many letters; this is kind of like writing a poem; except in real life " + "all that is happening" + " is just me producing a very very long set of words; there is text " + "here, text there, text everywhere; it fills me with glee to see so much " + "text; all around me it's just letters, and symbols, and other pleasant " + "drawings that cause me" + " a large amount of joy upon visually seeing them with my eyes; well, " + "this is now a lot of letters, but it is still not enough for the " + "purpose of the test I want to test, so maybe I should copy and paste " + "this a few times, you know.." + " for science, or something" + "I am a very long string; in fact I am longer than any reasonable length " + "that a string should be; quite long indeed; oh my, so many words; so " + "many letters; this is kind of like writing a poem; except in real life " + "all that is happening" + " is just me producing a very very long set of words; there is text " + "here, text there, text everywhere; it fills me with glee to see so much " + "text; all around me it's just letters, and symbols, and other pleasant " + "drawings that cause me" + " a large amount of joy upon visually seeing them with my eyes; well, " + "this is now a lot of letters, but it is still not enough for the " + "purpose of the test I want to test, so maybe I should copy and paste " + "this a few times, you know.." + " for science, or something"; + puts("Break here"); + + return 0; +} _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
