]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - packages/Python/lldbsuite/test/functionalities/recursion/TestValueObjectRecursion.py
Vendor import of lldb trunk r290819:
[FreeBSD/FreeBSD.git] / packages / Python / lldbsuite / test / functionalities / recursion / TestValueObjectRecursion.py
1 """
2 Test lldb data formatter subsystem.
3 """
4
5 from __future__ import print_function
6
7
8 import os
9 import time
10 import lldb
11 from lldbsuite.test.lldbtest import *
12 import lldbsuite.test.lldbutil as lldbutil
13
14
15 class ValueObjectRecursionTestCase(TestBase):
16
17     mydir = TestBase.compute_mydir(__file__)
18
19     def setUp(self):
20         # Call super's setUp().
21         TestBase.setUp(self)
22         # Find the line number to break at.
23         self.line = line_number('main.cpp', '// Set break point at this line.')
24
25     def test_with_run_command(self):
26         """Test that deeply nested ValueObjects still work."""
27         self.build()
28         self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)
29
30         lldbutil.run_break_set_by_file_and_line(
31             self, "main.cpp", self.line, num_expected_locations=1, loc_exact=True)
32
33         self.runCmd("run", RUN_SUCCEEDED)
34
35         # The stop reason of the thread should be breakpoint.
36         self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
37                     substrs=['stopped',
38                              'stop reason = breakpoint'])
39
40         # This is the function to remove the custom formats in order to have a
41         # clean slate for the next test case.
42         def cleanup():
43             self.runCmd('type format clear', check=False)
44             self.runCmd('type summary clear', check=False)
45
46         # Execute the cleanup function during test case tear down.
47         self.addTearDownHook(cleanup)
48
49         root = self.frame().FindVariable("root")
50         child = root.GetChildAtIndex(1)
51         if self.TraceOn():
52             print(root)
53             print(child)
54         for i in range(0, 15000):
55             child = child.GetChildAtIndex(1)
56         if self.TraceOn():
57             print(child)
58         self.assertTrue(
59             child.IsValid(),
60             "could not retrieve the deep ValueObject")
61         self.assertTrue(
62             child.GetChildAtIndex(0).IsValid(),
63             "the deep ValueObject has no value")
64         self.assertTrue(
65             child.GetChildAtIndex(0).GetValueAsUnsigned() != 0,
66             "the deep ValueObject has a zero value")
67         self.assertTrue(
68             child.GetChildAtIndex(1).GetValueAsUnsigned() != 0,
69             "the deep ValueObject has no next")