stl_deref_flags,
"lldb.formatters.cpp.gnu_libstdcpp.StdMapLikeSynthProvider")));
cpp_category_sp->GetRegexTypeSyntheticsContainer()->Add(
+ RegularExpression("^std::multiset<.+> >(( )?&)?$"),
+ SyntheticChildrenSP(new ScriptedSyntheticChildren(
+ stl_deref_flags,
+ "lldb.formatters.cpp.gnu_libstdcpp.StdMapLikeSynthProvider")));
+ cpp_category_sp->GetRegexTypeSyntheticsContainer()->Add(
RegularExpression("^std::(__cxx11::)?list<.+>(( )?&)?$"),
SyntheticChildrenSP(new ScriptedSyntheticChildren(
stl_synth_flags,
TypeSummaryImplSP(
new StringSummaryFormat(stl_summary_flags, "size=${svar%#}")));
cpp_category_sp->GetRegexTypeSummariesContainer()->Add(
+ RegularExpression("^std::multiset<.+> >(( )?&)?$"),
+ TypeSummaryImplSP(
+ new StringSummaryFormat(stl_summary_flags, "size=${svar%#}")));
+ cpp_category_sp->GetRegexTypeSummariesContainer()->Add(
RegularExpression("^std::(__cxx11::)?list<.+>(( )?&)?$"),
TypeSummaryImplSP(
new StringSummaryFormat(stl_summary_flags, "size=${svar%#}")));
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
+USE_LIBSTDCPP = "USE_LIBSTDCPP"
+USE_LIBCPP = "USE_LIBCPP"
-class LibcxxMultiSetDataFormatterTestCase(TestBase):
+class GenericMultiSetDataFormatterTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
TestBase.setUp(self)
self.namespace = 'std'
- def getVariableType(self, name):
+ def findVariable(self, name):
var = self.frame().FindVariable(name)
self.assertTrue(var.IsValid())
+ return var
+
+ def getVariableType(self, name):
+ var = self.findVariable(name)
return var.GetType().GetDisplayTypeName()
- def check_ii(self, var_name):
- """ This checks the value of the bitset stored in ii at the call to by_ref_and_ptr.
- We use this to make sure we get the same values for ii when we look at the object
- directly, and when we look at a reference to the object. """
- self.expect(
- "frame variable " + var_name,
- substrs=["size=7",
- "[2] = 2",
- "[3] = 3",
- "[6] = 6"])
- self.expect("frame variable " + var_name + "[2]", substrs=[" = 2"])
- self.expect(
- "p " + var_name,
- substrs=[
- "size=7",
- "[2] = 2",
- "[3] = 3",
- "[6] = 6"])
- @add_test_categories(["libc++"])
- def test_with_run_command(self):
+ def check(self, var_name, size):
+ var = self.findVariable(var_name)
+ self.assertEqual(var.GetNumChildren(), size)
+ children = []
+ for i in range(size):
+ child = var.GetChildAtIndex(i)
+ children.append(ValueCheck(value=child.GetValue()))
+ self.expect_var_path(var_name, type=self.getVariableType(var_name), children=children)
+
+ def do_test_with_run_command(self, stdlib_type):
"""Test that that file and class static variables display correctly."""
- self.build()
+ self.build(dictionary={stdlib_type: "1"})
(self.target, process, _, bkpt) = lldbutil.run_to_source_breakpoint(
self, "Set break point at this line.", lldb.SBFileSpec("main.cpp", False))
"[5] = 5"])
lldbutil.continue_to_breakpoint(process, bkpt)
- self.check_ii("ii")
+ self.check("ii", 7)
lldbutil.continue_to_breakpoint(process, bkpt)
self.expect("frame variable ii", substrs=["size=0", "{}"])
+ self.check("ii", 0)
lldbutil.continue_to_breakpoint(process, bkpt)
self.expect("frame variable ii", substrs=["size=0", "{}"])
ss_type = self.getVariableType("ss")
self.assertTrue(ss_type.startswith(self.namespace + "::multiset"),
"Type: " + ss_type)
self.expect("frame variable ss", substrs=["size=0", "{}"])
+ self.check("ss", 0)
lldbutil.continue_to_breakpoint(process, bkpt)
self.expect(
"frame variable ss",
"size=2",
'[0] = "a"',
'[1] = "a very long string is right here"'])
+ self.check("ss", 2)
lldbutil.continue_to_breakpoint(process, bkpt)
self.expect(
"frame variable ss",
'[2] = "b"',
'[3] = "c"',
])
+ self.check("ss", 4)
self.expect(
"p ss",
substrs=[
'[1] = "a very long string is right here"',
'[2] = "c"'])
- @add_test_categories(["libc++"])
- def test_ref_and_ptr(self):
+ def do_test_ref_and_ptr(self, stdlib_type):
"""Test that the data formatters work on ref and ptr."""
- self.build()
+ self.build(dictionary={stdlib_type: "1"})
(self.target, process, _, bkpt) = lldbutil.run_to_source_breakpoint(
self, "Stop here to check by ref and ptr.",
lldb.SBFileSpec("main.cpp", False))
# The reference should print just like the value:
- self.check_ii("ref")
+ self.check("ref", 7)
self.expect("frame variable ptr",
substrs=["ptr =", "size=7"])
self.expect("expr ptr",
substrs=["size=7"])
+
+ @add_test_categories(["libstdcxx"])
+ def test_with_run_command_libstdcpp(self):
+ self.do_test_with_run_command(USE_LIBSTDCPP)
+
+ @add_test_categories(["libc++"])
+ def test_with_run_command_libcpp(self):
+ self.do_test_with_run_command(USE_LIBCPP)
+
+ @add_test_categories(["libstdcxx"])
+ def test_ref_and_ptr_libstdcpp(self):
+ self.do_test_ref_and_ptr(USE_LIBSTDCPP)
+
+ @add_test_categories(["libc++"])
+ def test_ref_and_ptr_libcpp(self):
+ self.do_test_ref_and_ptr(USE_LIBCPP)