diff options
author | Siva Chandra <sivachandra@google.com> | 2015-06-26 23:57:38 +0000 |
---|---|---|
committer | Siva Chandra <sivachandra@google.com> | 2015-06-26 23:57:38 +0000 |
commit | a07e1e7f2ba2a984252e8b5414fb25b107573d07 (patch) | |
tree | 2f9b6c55f6b097576de29679a9312f533927e792 /lldb/test/python_api | |
parent | 0000afd88cc35d6febd25c72f484b22378897737 (diff) | |
download | bcm5719-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.py | 6 | ||||
-rw-r--r-- | lldb/test/python_api/formatters/jas_synth.py | 24 | ||||
-rw-r--r-- | lldb/test/python_api/formatters/main.cpp | 11 | ||||
-rw-r--r-- | lldb/test/python_api/formatters/synth.py | 64 |
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)) + + |