e60a76861b6dd94cb24775805b3ffcc1c0dde853
[openbsd] /
1 """
2 Test that lldb persistent types works correctly.
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 PersistenttypesTestCase(TestBase):
14
15     mydir = TestBase.compute_mydir(__file__)
16
17     def test_persistent_types(self):
18         """Test that lldb persistent types works correctly."""
19         self.build()
20
21         self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
22
23         self.runCmd("breakpoint set --name main")
24
25         self.runCmd("run", RUN_SUCCEEDED)
26
27         self.runCmd("expression struct $foo { int a; int b; };")
28
29         self.expect(
30             "expression struct $foo $my_foo; $my_foo.a = 2; $my_foo.b = 3;",
31             startstr="(int) $0 = 3")
32
33         self.expect("expression $my_foo",
34                     substrs=['a = 2', 'b = 3'])
35
36         self.runCmd("expression typedef int $bar")
37
38         self.expect("expression $bar i = 5; i",
39                     startstr="($bar) $1 = 5")
40
41         self.runCmd(
42             "expression struct $foobar { char a; char b; char c; char d; };")
43         self.runCmd("next")
44
45         self.expect(
46             "memory read foo -t $foobar",
47             substrs=[
48                 '($foobar) 0x',
49                 ' = ',
50                 "a = 'H'",
51                 "b = 'e'",
52                 "c = 'l'",
53                 "d = 'l'"])  # persistent types are OK to use for memory read
54
55         self.expect(
56             "memory read foo -t $foobar -x c",
57             substrs=[
58                 '($foobar) 0x',
59                 ' = ',
60                 "a = 'H'",
61                 "b = 'e'",
62                 "c = 'l'",
63                 "d = 'l'"])  # persistent types are OK to use for memory read
64
65         self.expect(
66             "memory read foo -t foobar",
67             substrs=[
68                 '($foobar) 0x',
69                 ' = ',
70                 "a = 'H'",
71                 "b = 'e'",
72                 "c = 'l'",
73                 "d = 'l'"],
74             matching=False,
75             error=True)  # the type name is $foobar, make sure we settle for nothing less
76
77         self.expect("expression struct { int a; int b; } x = { 2, 3 }; x",
78                     substrs=['a = 2', 'b = 3'])
79
80         self.expect(
81             "expression struct { int x; int y; int z; } object; object.y = 1; object.z = 3; object.x = 2; object",
82             substrs=[
83                 'x = 2',
84                 'y = 1',
85                 'z = 3'])
86
87         self.expect(
88             "expression struct A { int x; int y; }; struct { struct A a; int z; } object; object.a.y = 1; object.z = 3; object.a.x = 2; object",
89             substrs=[
90                 'x = 2',
91                 'y = 1',
92                 'z = 3'])