[Lldb-commits] [lldb] r240861 - Add test for SBValue.GetNonSyntheticValue in presence of synth provider.

Siva Chandra sivachandra at google.com
Fri Jun 26 16:57:38 PDT 2015


Author: sivachandra
Date: Fri Jun 26 18:57:38 2015
New Revision: 240861

URL: http://llvm.org/viewvc/llvm-project?rev=240861&view=rev
Log:
Add test for SBValue.GetNonSyntheticValue in presence of synth provider.

Test Plan: dotest.py -p TestFormattersSBAPI

Reviewers: granata.enrico

Reviewed By: granata.enrico

Subscribers: lldb-commits

Differential Revision: http://reviews.llvm.org/D10783

Added:
    lldb/trunk/test/python_api/formatters/synth.py
Removed:
    lldb/trunk/test/python_api/formatters/jas_synth.py
Modified:
    lldb/trunk/test/python_api/formatters/TestFormattersSBAPI.py
    lldb/trunk/test/python_api/formatters/main.cpp

Modified: lldb/trunk/test/python_api/formatters/TestFormattersSBAPI.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/python_api/formatters/TestFormattersSBAPI.py?rev=240861&r1=240860&r2=240861&view=diff
==============================================================================
--- lldb/trunk/test/python_api/formatters/TestFormattersSBAPI.py (original)
+++ lldb/trunk/test/python_api/formatters/TestFormattersSBAPI.py Fri Jun 26 18:57:38 2015
@@ -153,7 +153,7 @@ class SBFormattersAPITestCase(TestBase):
         self.expect("frame variable foo", matching=True,
              substrs = ['B = ', 'C = ', 'E = ', 'F = '])
 
-        self.runCmd("command script import --allow-reload ./jas_synth.py")
+        self.runCmd("command script import --allow-reload ./synth.py")
 
         self.expect("frame variable foo", matching=False,
              substrs = ['X = 1'])
@@ -162,6 +162,10 @@ class SBFormattersAPITestCase(TestBase):
         self.expect("frame variable foo", matching=True,
              substrs = ['X = 1'])
 
+        self.dbg.GetCategory("CCCSynth").SetEnabled(True)
+        self.expect("frame variable ccc", matching=True,
+             substrs = ['CCC object with leading value (int) a = 111', 'a = 111', 'b = 222', 'c = 333'])
+
         foo_var = self.dbg.GetSelectedTarget().GetProcess().GetSelectedThread().GetSelectedFrame().FindVariable('foo')
         self.assertTrue(foo_var.IsValid(), 'could not find foo')
 

Removed: lldb/trunk/test/python_api/formatters/jas_synth.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/python_api/formatters/jas_synth.py?rev=240860&view=auto
==============================================================================
--- lldb/trunk/test/python_api/formatters/jas_synth.py (original)
+++ lldb/trunk/test/python_api/formatters/jas_synth.py (removed)
@@ -1,24 +0,0 @@
-import lldb
-class jasSynthProvider:
-     def __init__(self, valobj, dict):
-         self.valobj = valobj;
-     def num_children(self):
-         return 2;
-     def get_child_at_index(self, index):
-         child = None
-         if index == 0:
-             child = self.valobj.GetChildMemberWithName('A');
-         if index == 1:
-             child = self.valobj.CreateValueFromExpression('X', '(int)1')
-         return child;
-     def get_child_index(self, name):
-         if name == 'A':
-             return 0;
-         if name == 'X':
-             return 1;
-         return None;
-
-def __lldb_init_module(debugger,dict):
-     debugger.CreateCategory("JASSynth").AddTypeSynthetic(lldb.SBTypeNameSpecifier("JustAStruct"),
-        lldb.SBTypeSynthetic.CreateWithClassName("jas_synth.jasSynthProvider"))
-

Modified: lldb/trunk/test/python_api/formatters/main.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/python_api/formatters/main.cpp?rev=240861&r1=240860&r2=240861&view=diff
==============================================================================
--- lldb/trunk/test/python_api/formatters/main.cpp (original)
+++ lldb/trunk/test/python_api/formatters/main.cpp Fri Jun 26 18:57:38 2015
@@ -21,6 +21,12 @@ struct FooType
 	short F;
 };
 
+struct CCC
+{
+	int a, b, c;
+};
+
+
 int main(int argc, char const *argv[]) {
 	JustAStruct foo;
 	foo.A = 1;
@@ -29,6 +35,7 @@ int main(int argc, char const *argv[]) {
 	foo.D = 6.28;
 	foo.E = 3100419850;
 	foo.F = 0;
+
 	FooType bar;
 	bar.A = 1;
 	bar.B = 3.14;
@@ -37,6 +44,10 @@ int main(int argc, char const *argv[]) {
 	bar.E = 3100419850;
 	bar.F = 0;
 	JustAStruct* foo_ptr = &foo;
+
 	std::vector<int> int_vector;
+
+	CCC ccc = {111, 222, 333};
+
 	return 0; // Set break point at this line.
 }

Added: lldb/trunk/test/python_api/formatters/synth.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/python_api/formatters/synth.py?rev=240861&view=auto
==============================================================================
--- lldb/trunk/test/python_api/formatters/synth.py (added)
+++ lldb/trunk/test/python_api/formatters/synth.py Fri Jun 26 18:57:38 2015
@@ -0,0 +1,64 @@
+import lldb
+
+class jasSynthProvider:
+     def __init__(self, valobj, dict):
+         self.valobj = valobj;
+     def num_children(self):
+         return 2;
+     def get_child_at_index(self, index):
+         child = None
+         if index == 0:
+             child = self.valobj.GetChildMemberWithName('A');
+         if index == 1:
+             child = self.valobj.CreateValueFromExpression('X', '(int)1')
+         return child;
+     def get_child_index(self, name):
+         if name == 'A':
+             return 0;
+         if name == 'X':
+             return 1;
+         return None;
+
+
+def ccc_summary(sbvalue, internal_dict):
+    sbvalue = sbvalue.GetNonSyntheticValue()
+    # This tests that the SBValue.GetNonSyntheticValue() actually returns a
+    # non-synthetic value. If it does not, then sbvalue.GetChildMemberWithName("a")
+    # in the following statement will call the 'get_child_index' method of the
+    # synthetic child provider CCCSynthProvider below (which raises an exception).
+    return "CCC object with leading value " + str(sbvalue.GetChildMemberWithName("a"))
+
+
+class CCCSynthProvider(object):
+    def __init__(self, sbvalue, internal_dict):
+        self._sbvalue = sbvalue
+
+    def num_children(self):
+        return 3
+
+    def get_child_index(self, name):
+        raise RuntimeError("I don't want to be called!")
+
+    def get_child_at_index(self, index):
+        if index == 0:
+            return self._sbvalue.GetChildMemberWithName("a")
+        if index == 1:
+            return self._sbvalue.GetChildMemberWithName("b")
+        if index == 2:
+            return self._sbvalue.GetChildMemberWithName("c")
+
+
+def __lldb_init_module(debugger,dict):
+     debugger.CreateCategory("JASSynth").AddTypeSynthetic(lldb.SBTypeNameSpecifier("JustAStruct"),
+        lldb.SBTypeSynthetic.CreateWithClassName("synth.jasSynthProvider"))
+     cat = lldb.debugger.CreateCategory("CCCSynth")
+     cat.AddTypeSynthetic(
+         lldb.SBTypeNameSpecifier("CCC"),
+         lldb.SBTypeSynthetic.CreateWithClassName("synth.CCCSynthProvider",
+                                                  lldb.eTypeOptionCascade))
+     cat.AddTypeSummary(
+         lldb.SBTypeNameSpecifier("CCC"),
+         lldb.SBTypeSummary.CreateWithFunctionName("synth.ccc_summary",
+                                                   lldb.eTypeOptionCascade))
+
+





More information about the lldb-commits mailing list