-
Notifications
You must be signed in to change notification settings - Fork 14.4k
[lldb][test] Consolidate libstdc++ and libc++ vector formatter tests into generic test #146885
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[lldb][test] Consolidate libstdc++ and libc++ vector formatter tests into generic test #146885
Conversation
@llvm/pr-subscribers-lldb Author: Michael Buch (Michael137) ChangesThe libstdc++ test was a subset of the tests in libc++. This test moves the libc++ test into Split out from #146740 Full diff: https://github.com/llvm/llvm-project/pull/146885.diff 7 Files Affected:
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/vector/Makefile b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/vector/Makefile
similarity index 57%
rename from lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/vector/Makefile
rename to lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/vector/Makefile
index 654e4b15bd568..99998b20bcb05 100644
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/vector/Makefile
+++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/vector/Makefile
@@ -1,6 +1,3 @@
CXX_SOURCES := main.cpp
-CXXFLAGS := -O0
-USE_LIBSTDCPP := 1
-
include Makefile.rules
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/vector/TestDataFormatterLibcxxVector.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/vector/TestDataFormatterStdVector.py
similarity index 84%
rename from lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/vector/TestDataFormatterLibcxxVector.py
rename to lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/vector/TestDataFormatterStdVector.py
index 13341a9b274be..ba8b10450f4fc 100644
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/vector/TestDataFormatterLibcxxVector.py
+++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/vector/TestDataFormatterStdVector.py
@@ -2,14 +2,13 @@
Test lldb data formatter subsystem.
"""
-
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
-class LibcxxVectorDataFormatterTestCase(TestBase):
+class StdVectorDataFormatterTestCase(TestBase):
def check_numbers(self, var_name, show_ptr=False):
patterns = []
substrs = [
@@ -52,10 +51,8 @@ def check_numbers(self, var_name, show_ptr=False):
self.expect("frame variable " + var_name + "[2]", substrs=["123"])
self.expect("frame variable " + var_name + "[3]", substrs=["1234"])
- @add_test_categories(["libc++"])
- def test_with_run_command(self):
+ def do_test(self):
"""Test that that file and class static variables display correctly."""
- self.build()
(self.target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(
self, "break here", lldb.SBFileSpec("main.cpp", False)
)
@@ -170,10 +167,25 @@ def cleanup():
self.expect("frame variable strings", substrs=["vector has 0 items"])
+ @add_test_categories(["libstdcxx"])
+ def test_libstdcxx(self):
+ self.build(dictionary={"USE_LIBSTDCPP": 1})
+ self.do_test()
+
+ @add_test_categories(["libstdcxx"])
+ def test_libstdcxx_debug(self):
+ self.build(
+ dictionary={"USE_LIBSTDCPP": 1, "CXXFLAGS_EXTRAS": "-D_GLIBCXX_DEBUG"}
+ )
+ self.do_test()
+
@add_test_categories(["libc++"])
- def test_ref_and_ptr(self):
+ def test_libcxx(self):
+ self.build(dictionary={"USE_LIBCPP": 1})
+ self.do_test()
+
+ def do_test_ref_and_ptr(self):
"""Test that that file and class static variables display correctly."""
- self.build()
(self.target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(
self, "Stop here to check by ref", lldb.SBFileSpec("main.cpp", False)
)
@@ -186,3 +198,20 @@ def test_ref_and_ptr(self):
self.expect("frame variable ptr", substrs=["ptr =", " size=7"])
self.expect("expression ptr", substrs=["$", "size=7"])
+
+ @add_test_categories(["libstdcxx"])
+ def test_ref_and_ptr_libstdcxx(self):
+ self.build(dictionary={"USE_LIBSTDCPP": 1})
+ self.do_test_ref_and_ptr()
+
+ @add_test_categories(["libstdcxx"])
+ def test_ref_and_ptr_libstdcxx_debug(self):
+ self.build(
+ dictionary={"USE_LIBSTDCPP": 1, "CXXFLAGS_EXTRAS": "-D_GLIBCXX_DEBUG"}
+ )
+ self.do_test_ref_and_ptr()
+
+ @add_test_categories(["libc++"])
+ def test_ref_and_ptr_libcxx(self):
+ self.build(dictionary={"USE_LIBCPP": 1})
+ self.do_test_ref_and_ptr()
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/vector/main.cpp b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/vector/main.cpp
new file mode 100644
index 0000000000000..19cd1893bd22a
--- /dev/null
+++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/vector/main.cpp
@@ -0,0 +1,40 @@
+#include <stdio.h>
+#include <string>
+#include <vector>
+typedef std::vector<int> int_vect;
+typedef std::vector<std::string> string_vect;
+
+template <class T>
+void by_ref_and_ptr(std::vector<T> &ref, std::vector<T> *ptr) {
+ // Stop here to check by ref
+ return;
+}
+
+int main() {
+ int_vect numbers;
+ (numbers.push_back(1)); // break here
+ (numbers.push_back(12)); // break here
+ (numbers.push_back(123));
+ (numbers.push_back(1234));
+ (numbers.push_back(12345)); // break here
+ (numbers.push_back(123456));
+ (numbers.push_back(1234567));
+ by_ref_and_ptr(numbers, &numbers);
+
+ printf("break here");
+ numbers.clear();
+
+ (numbers.push_back(7)); // break here
+
+ string_vect strings;
+ (strings.push_back(std::string("goofy")));
+ (strings.push_back(std::string("is")));
+ (strings.push_back(std::string("smart")));
+ printf("break here");
+ (strings.push_back(std::string("!!!")));
+
+ printf("break here");
+ strings.clear();
+
+ return 0; // break here
+}
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/vector/Makefile b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/vector/Makefile
deleted file mode 100644
index 564cbada74e08..0000000000000
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/vector/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-CXX_SOURCES := main.cpp
-
-USE_LIBCPP := 1
-
-CXXFLAGS_EXTRAS := -O0
-include Makefile.rules
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/vector/main.cpp b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/vector/main.cpp
deleted file mode 100644
index 0e1dbe4f03e2b..0000000000000
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/vector/main.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <stdio.h>
-#include <string>
-#include <vector>
-typedef std::vector<int> int_vect;
-typedef std::vector<std::string> string_vect;
-
-template <class T>
-void by_ref_and_ptr(std::vector<T> &ref, std::vector<T> *ptr) {
- // Stop here to check by ref
- return;
-}
-
-int main()
-{
- int_vect numbers;
- (numbers.push_back(1)); // break here
- (numbers.push_back(12)); // break here
- (numbers.push_back(123));
- (numbers.push_back(1234));
- (numbers.push_back(12345)); // break here
- (numbers.push_back(123456));
- (numbers.push_back(1234567));
- by_ref_and_ptr(numbers, &numbers);
-
- printf("break here");
- numbers.clear();
-
- (numbers.push_back(7)); // break here
-
- string_vect strings;
- (strings.push_back(std::string("goofy")));
- (strings.push_back(std::string("is")));
- (strings.push_back(std::string("smart")));
- printf("break here");
- (strings.push_back(std::string("!!!")));
-
- printf("break here");
- strings.clear();
-
- return 0; // break here
-}
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/vector/TestDataFormatterStdVector.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/vector/TestDataFormatterStdVector.py
deleted file mode 100644
index 6cfd17a39304e..0000000000000
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/vector/TestDataFormatterStdVector.py
+++ /dev/null
@@ -1,220 +0,0 @@
-"""
-Test lldb data formatter subsystem.
-"""
-
-
-from typing import Optional
-import lldb
-from lldbsuite.test.decorators import *
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-
-class StdVectorDataFormatterTestCase(TestBase):
- def setUp(self):
- # Call super's setUp().
- TestBase.setUp(self)
- # Find the line number to break at.
- self.line = line_number("main.cpp", "// Set break point at this line.")
-
- @add_test_categories(["libstdcxx"])
- @expectedFailureAll(bugnumber="llvm.org/pr50861", compiler="gcc")
- def test_with_run_command(self):
- self.with_run_command()
-
- @add_test_categories(["libstdcxx"])
- @expectedFailureAll(bugnumber="llvm.org/pr50861", compiler="gcc")
- def test_with_run_command_debug(self):
- build_args = {"CXXFLAGS_EXTRAS": "-D_GLIBCXX_DEBUG"}
- self.with_run_command(build_args)
-
- def with_run_command(self, dictionary: Optional[dict] = None):
- """Test that that file and class static variables display correctly."""
- self.build(dictionary=dictionary)
- self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
-
- lldbutil.run_break_set_by_source_regexp(self, "Set break point at this line.")
-
- self.runCmd("run", RUN_SUCCEEDED)
-
- # The stop reason of the thread should be breakpoint.
- self.expect(
- "thread list",
- STOPPED_DUE_TO_BREAKPOINT,
- substrs=["stopped", "stop reason = breakpoint"],
- )
-
- # This is the function to remove the custom formats in order to have a
- # clean slate for the next test case.
- def cleanup():
- self.runCmd("type format clear", check=False)
- self.runCmd("type summary clear", check=False)
- self.runCmd("type filter clear", check=False)
- self.runCmd("type synth clear", check=False)
-
- # Execute the cleanup function during test case tear down.
- self.addTearDownHook(cleanup)
-
- # empty vectors (and storage pointers SHOULD BOTH BE NULL..)
- self.expect("frame variable numbers", substrs=["numbers = size=0"])
-
- self.runCmd("c")
-
- # first value added
- self.expect(
- "frame variable numbers", substrs=["numbers = size=1", "[0] = 1", "}"]
- )
-
- # add some more data
- self.runCmd("c")
-
- self.expect(
- "frame variable numbers",
- substrs=[
- "numbers = size=4",
- "[0] = 1",
- "[1] = 12",
- "[2] = 123",
- "[3] = 1234",
- "}",
- ],
- )
-
- self.expect(
- "expression numbers",
- substrs=[
- "$",
- "size=4",
- "[0] = 1",
- "[1] = 12",
- "[2] = 123",
- "[3] = 1234",
- "}",
- ],
- )
-
- # check access to synthetic children
- self.runCmd(
- 'type summary add --summary-string "item 0 is ${var[0]}" std::int_vect int_vect'
- )
- self.expect("frame variable numbers", substrs=["item 0 is 1"])
-
- self.runCmd(
- 'type summary add --summary-string "item 0 is ${svar[0]}" std::int_vect int_vect'
- )
- # import time
- # time.sleep(19)
- self.expect("frame variable numbers", substrs=["item 0 is 1"])
- # move on with synths
- self.runCmd("type summary delete std::int_vect")
- self.runCmd("type summary delete int_vect")
-
- # add some more data
- self.runCmd("c")
-
- self.expect(
- "frame variable numbers",
- substrs=[
- "numbers = size=7",
- "[0] = 1",
- "[1] = 12",
- "[2] = 123",
- "[3] = 1234",
- "[4] = 12345",
- "[5] = 123456",
- "[6] = 1234567",
- "}",
- ],
- )
-
- self.expect(
- "expression numbers",
- substrs=[
- "$",
- "size=7",
- "[0] = 1",
- "[1] = 12",
- "[2] = 123",
- "[3] = 1234",
- "[4] = 12345",
- "[5] = 123456",
- "[6] = 1234567",
- "}",
- ],
- )
-
- # check access-by-index
- self.expect("frame variable numbers[0]", substrs=["1"])
- self.expect("frame variable numbers[1]", substrs=["12"])
- self.expect("frame variable numbers[2]", substrs=["123"])
- self.expect("frame variable numbers[3]", substrs=["1234"])
-
- # but check that expression does not rely on us
- # (when expression gets to call into STL code correctly, we will have to find
- # another way to check this)
- self.expect(
- "expression numbers[6]", matching=False, error=True, substrs=["1234567"]
- )
-
- # check that MightHaveChildren() gets it right
- self.assertTrue(
- self.frame().FindVariable("numbers").MightHaveChildren(),
- "numbers.MightHaveChildren() says False for non empty!",
- )
-
- # clear out the vector and see that we do the right thing once again
- self.runCmd("c")
-
- self.expect("frame variable numbers", substrs=["numbers = size=0"])
-
- self.runCmd("c")
-
- # first value added
- self.expect(
- "frame variable numbers", substrs=["numbers = size=1", "[0] = 7", "}"]
- )
-
- # check if we can display strings
- self.runCmd("c")
-
- self.expect("frame variable strings", substrs=["goofy", "is", "smart"])
-
- self.expect("expression strings", substrs=["goofy", "is", "smart"])
-
- # test summaries based on synthetic children
- self.runCmd(
- 'type summary add std::string_vect string_vect --summary-string "vector has ${svar%#} items" -e'
- )
- self.expect(
- "frame variable strings",
- substrs=["vector has 3 items", "goofy", "is", "smart"],
- )
-
- self.expect(
- "expression strings", substrs=["vector has 3 items", "goofy", "is", "smart"]
- )
-
- self.runCmd("c")
-
- self.expect("frame variable strings", substrs=["vector has 4 items"])
-
- # check access-by-index
- self.expect("frame variable strings[0]", substrs=["goofy"])
- self.expect("frame variable strings[1]", substrs=["is"])
-
- # but check that expression does not rely on us
- # (when expression gets to call into STL code correctly, we will have to find
- # another way to check this)
- self.expect(
- "expression strings[0]", matching=False, error=True, substrs=["goofy"]
- )
-
- # check that MightHaveChildren() gets it right
- self.assertTrue(
- self.frame().FindVariable("strings").MightHaveChildren(),
- "strings.MightHaveChildren() says False for non empty!",
- )
-
- self.runCmd("c")
-
- self.expect("frame variable strings", substrs=["vector has 0 items"])
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/vector/main.cpp b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/vector/main.cpp
deleted file mode 100644
index 010917995e401..0000000000000
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libstdcpp/vector/main.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <string>
-#include <vector>
-typedef std::vector<int> int_vect;
-typedef std::vector<std::string> string_vect;
-
-int main()
-{
- int_vect numbers;
- numbers.push_back(1); // Set break point at this line.
- numbers.push_back(12); // Set break point at this line.
- numbers.push_back(123);
- numbers.push_back(1234);
- numbers.push_back(12345); // Set break point at this line.
- numbers.push_back(123456);
- numbers.push_back(1234567);
-
- numbers.clear(); // Set break point at this line.
-
- numbers.push_back(7); // Set break point at this line.
-
- string_vect strings; // Set break point at this line.
- strings.push_back(std::string("goofy"));
- strings.push_back(std::string("is"));
- strings.push_back(std::string("smart"));
-
- strings.push_back(std::string("!!!")); // Set break point at this line.
-
- strings.clear(); // Set break point at this line.
-
- return 0;// Set break point at this line.
-}
|
|
||
int main() { | ||
int_vect numbers; | ||
(numbers.push_back(1)); // break here |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure what are the parens for, but I wouldn't want my name to go down in history with them :P
…into generic test The libstdc++ test was a subset of the tests in libc++. This test moves the libc++ test into `generic` and removes the `libstdc++` tests. I retained the `-D_GLIBCXX_DEBUG` test cases though. Split out from llvm#146740
The libstdc++ test was a subset of the tests in libc++. This test moves the libc++ test into
generic
and removes thelibstdc++
tests. I retained the-D_GLIBCXX_DEBUG
test cases though.Split out from #146740