File: TestCppDiamond.py

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (120 lines) | stat: -rw-r--r-- 4,051 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
"""
Test diamond inheritance.
"""

import lldb
from lldbsuite.test.lldbtest import *
from lldbsuite.test.decorators import *
import lldbsuite.test.lldbutil as lldbutil


class TestCase(TestBase):
    @no_debug_info_test
    def test_with_sbvalue(self):
        """
        Test that virtual base classes work in when SBValue objects are
        used to explore the class.
        """
        self.build()
        lldbutil.run_to_source_breakpoint(
            self, "// breakpoint 1", lldb.SBFileSpec("main.cpp")
        )

        self.runCmd("settings set target.prefer-dynamic-value no-dynamic-values")

        j1 = self.frame().FindVariable("j1")
        j1_Derived1 = j1.GetChildAtIndex(0)
        j1_Derived2 = j1.GetChildAtIndex(1)
        j1_Derived1_VBase = j1_Derived1.GetChildAtIndex(0)
        j1_Derived2_VBase = j1_Derived2.GetChildAtIndex(0)
        j1_Derived1_VBase_m_value = j1_Derived1_VBase.GetChildAtIndex(0)
        j1_Derived2_VBase_m_value = j1_Derived2_VBase.GetChildAtIndex(0)

        self.assertEqual(
            j1_Derived1_VBase.GetLoadAddress(),
            j1_Derived2_VBase.GetLoadAddress(),
            "ensure virtual base class is the same between Derived1 and Derived2",
        )
        self.assertEqual(
            j1_Derived1_VBase_m_value.GetValueAsUnsigned(1),
            j1_Derived2_VBase_m_value.GetValueAsUnsigned(2),
            "ensure m_value in VBase is the same",
        )
        self.assertEqual(
            self.frame()
            .FindVariable("d")
            .GetChildAtIndex(0)
            .GetChildAtIndex(0)
            .GetValueAsUnsigned(0),
            12345,
            "ensure Derived2 from j1 is correct",
        )

        # This reassigns 'd' to point to 'j2'.
        self.thread().StepOver()

        self.assertEqual(
            self.frame()
            .FindVariable("d")
            .GetChildAtIndex(0)
            .GetChildAtIndex(0)
            .GetValueAsUnsigned(0),
            12346,
            "ensure Derived2 from j2 is correct",
        )

    @no_debug_info_test
    def test(self):
        self.build()
        lldbutil.run_to_source_breakpoint(
            self, "// breakpoint 1", lldb.SBFileSpec("main.cpp")
        )

        # All the children of j1.
        children = [
            ValueCheck(
                type="Derived1",
                children=[
                    ValueCheck(
                        type="VBase",
                        children=[
                            ValueCheck(type="int", name="m_value", value="12345")
                        ],
                    )
                ],
            ),
            ValueCheck(
                type="Derived2",
                children=[
                    ValueCheck(
                        type="VBase",
                        children=[
                            ValueCheck(type="int", name="m_value", value="12345")
                        ],
                    )
                ],
            ),
            ValueCheck(type="long", value="1"),
        ]
        # Try using the class with expression evaluator/variable paths.
        self.expect_expr("j1", result_type="Joiner1", result_children=children)
        self.expect_var_path("j1", type="Joiner1", children=children)

        # Use the expression evaluator to access the members.
        self.expect_expr("j1.x", result_type="long", result_value="1")
        self.expect_expr("j1.m_value", result_type="int", result_value="12345")

        # Use variable paths to access the members.
        self.expect_var_path("j1.x", type="long", value="1")

    @expectedFailureAll
    @no_debug_info_test
    def test(self):
        self.build()
        lldbutil.run_to_source_breakpoint(
            self, "// breakpoint 1", lldb.SBFileSpec("main.cpp")
        )
        # FIXME: This is completely broken and 'succeeds' with an error that
        # there is noch such value/member in Joiner1. Move this up to the test
        # above when fixed.
        self.expect_var_path("j1.m_value", type="int", value="12345")