466eb5d5b7f348162eb9417831faca77283d1900
[openbsd] /
1 """
2 Test lldb data formatter subsystem.
3 """
4
5
6
7 import lldb
8 from lldbsuite.test.decorators import *
9 from lldbsuite.test.lldbtest import *
10 from lldbsuite.test import lldbutil
11
12
13 class NSArraySyntheticTestCase(TestBase):
14
15     mydir = TestBase.compute_mydir(__file__)
16
17     def setUp(self):
18         # Call super's setUp().
19         TestBase.setUp(self)
20         # Find the line number to break at.
21         self.line = line_number('main.m', '// Set break point at this line.')
22
23     @skipUnlessDarwin
24     def test_rdar11086338_with_run_command(self):
25         """Test that NSArray reports its synthetic children properly."""
26         self.build()
27         self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
28
29         lldbutil.run_break_set_by_file_and_line(
30             self, "main.m", self.line, num_expected_locations=1, loc_exact=True)
31
32         self.runCmd("run", RUN_SUCCEEDED)
33
34         # The stop reason of the thread should be breakpoint.
35         self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
36                     substrs=['stopped',
37                              'stop reason = breakpoint'])
38
39         # This is the function to remove the custom formats in order to have a
40         # clean slate for the next test case.
41         def cleanup():
42             self.runCmd('type format clear', check=False)
43             self.runCmd('type summary clear', check=False)
44             self.runCmd('type synth clear', check=False)
45
46         # Execute the cleanup function during test case tear down.
47         self.addTearDownHook(cleanup)
48
49         # Now check that we are displaying Cocoa classes correctly
50         self.expect('frame variable arr',
51                     substrs=['@"6 elements"'])
52         self.expect('frame variable other_arr',
53                     substrs=['@"4 elements"'])
54         self.expect(
55             'frame variable arr --ptr-depth 1',
56             substrs=[
57                 '@"6 elements"',
58                 '[0] = 0x',
59                 '[1] = 0x',
60                 '[2] = 0x',
61                 '[3] = 0x',
62                 '[4] = 0x',
63                 '[5] = 0x'])
64         self.expect(
65             'frame variable other_arr --ptr-depth 1',
66             substrs=[
67                 '@"4 elements"',
68                 '[0] = 0x',
69                 '[1] = 0x',
70                 '[2] = 0x',
71                 '[3] = 0x'])
72         self.expect(
73             'frame variable arr --ptr-depth 1 -d no-run-target',
74             substrs=[
75                 '@"6 elements"',
76                 '@"hello"',
77                 '@"world"',
78                 '@"this"',
79                 '@"is"',
80                 '@"me"',
81                 '@"http://www.apple.com'])
82         self.expect(
83             'frame variable other_arr --ptr-depth 1 -d no-run-target',
84             substrs=[
85                 '@"4 elements"',
86                 '(int)5',
87                 '@"a string"',
88                 '@"6 elements"'])
89         self.expect(
90             'frame variable other_arr --ptr-depth 2 -d no-run-target',
91             substrs=[
92                 '@"4 elements"',
93                 '@"6 elements" {',
94                 '@"hello"',
95                 '@"world"',
96                 '@"this"',
97                 '@"is"',
98                 '@"me"',
99                 '@"http://www.apple.com'])
100
101         self.assertTrue(
102             self.frame().FindVariable("arr").MightHaveChildren(),
103             "arr says it does not have children!")
104         self.assertTrue(
105             self.frame().FindVariable("other_arr").MightHaveChildren(),
106             "arr says it does not have children!")