summaryrefslogtreecommitdiffstats
path: root/lldb/test/python_api
diff options
context:
space:
mode:
authorSiva Chandra <sivachandra@google.com>2015-06-26 23:57:38 +0000
committerSiva Chandra <sivachandra@google.com>2015-06-26 23:57:38 +0000
commita07e1e7f2ba2a984252e8b5414fb25b107573d07 (patch)
tree2f9b6c55f6b097576de29679a9312f533927e792 /lldb/test/python_api
parent0000afd88cc35d6febd25c72f484b22378897737 (diff)
downloadbcm5719-llvm-a07e1e7f2ba2a984252e8b5414fb25b107573d07.tar.gz
bcm5719-llvm-a07e1e7f2ba2a984252e8b5414fb25b107573d07.zip
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 llvm-svn: 240861
Diffstat (limited to 'lldb/test/python_api')
-rw-r--r--lldb/test/python_api/formatters/TestFormattersSBAPI.py6
-rw-r--r--lldb/test/python_api/formatters/jas_synth.py24
-rw-r--r--lldb/test/python_api/formatters/main.cpp11
-rw-r--r--lldb/test/python_api/formatters/synth.py64
4 files changed, 80 insertions, 25 deletions
diff --git a/lldb/test/python_api/formatters/TestFormattersSBAPI.py b/lldb/test/python_api/formatters/TestFormattersSBAPI.py
index 1714691cea4..19a785244ab 100644
--- a/lldb/test/python_api/formatters/TestFormattersSBAPI.py
+++ b/lldb/test/python_api/formatters/TestFormattersSBAPI.py
@@ -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')
diff --git a/lldb/test/python_api/formatters/jas_synth.py b/lldb/test/python_api/formatters/jas_synth.py
deleted file mode 100644
index 587671888e3..00000000000
--- a/lldb/test/python_api/formatters/jas_synth.py
+++ /dev/null
@@ -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"))
-
diff --git a/lldb/test/python_api/formatters/main.cpp b/lldb/test/python_api/formatters/main.cpp
index 67754de4376..cf7e4c08ef8 100644
--- a/lldb/test/python_api/formatters/main.cpp
+++ b/lldb/test/python_api/formatters/main.cpp
@@ -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.
}
diff --git a/lldb/test/python_api/formatters/synth.py b/lldb/test/python_api/formatters/synth.py
new file mode 100644
index 00000000000..b1e95a91f67
--- /dev/null
+++ b/lldb/test/python_api/formatters/synth.py
@@ -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))
+
+
OpenPOWER on IntegriCloud