summaryrefslogtreecommitdiff
path: root/lldb/test/API/functionalities/postmortem/elf-core/expr/TestExpr.py
blob: 9dfc6859af8bf206c14b9b9ffec8b11184cfa401 (plain)
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
"""
Test evaluating expressions when debugging core file.
"""

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


@skipIfLLVMTargetMissing("X86")
class CoreExprTestCase(TestBase):
    def setUp(self):
        TestBase.setUp(self)
        self.target = self.dbg.CreateTarget("linux-x86_64.out")
        self.process = self.target.LoadCore("linux-x86_64.core")
        self.assertTrue(self.process, PROCESS_IS_VALID)

    def test_result_var(self):
        """Test that the result variable can be used in subsequent expressions."""

        self.expect_expr(
            "outer",
            result_type="Outer",
            result_children=[ValueCheck(name="inner", type="Inner")],
        )
        self.expect_expr(
            "$0.inner",
            result_type="Inner",
            result_children=[ValueCheck(name="val", type="int", value="5")],
        )
        self.expect_expr("$1.val", result_type="int", result_value="5")

    def test_persist_var(self):
        """Test that user-defined variables can be used in subsequent expressions."""

        self.target.EvaluateExpression("int $my_int = 5")
        self.expect_expr("$my_int * 2", result_type="int", result_value="10")

        # Try assigning the persistent variable a new value.
        self.target.EvaluateExpression("$my_int = 55")
        self.expect_expr("$my_int", result_type="int", result_value="55")

    def test_context_object(self):
        """Test expression evaluation in context of an object."""

        val_outer = self.expect_expr("outer", result_type="Outer")

        val_inner = val_outer.EvaluateExpression("inner")
        self.assertTrue(val_inner.IsValid())
        self.assertEqual("Inner", val_inner.GetDisplayTypeName())

        val_val = val_inner.EvaluateExpression("this->val")
        self.assertTrue(val_val.IsValid())
        self.assertEqual("int", val_val.GetDisplayTypeName())
        self.assertEqual(val_val.GetValueAsSigned(), 5)