1"""
2Set the contents of variables and registers using raw data
3"""
4
5
6
7import lldb
8from lldbsuite.test.decorators import *
9from lldbsuite.test.lldbtest import *
10from lldbsuite.test import lldbutil
11
12
13class SetDataTestCase(TestBase):
14
15    @add_test_categories(["objc"])
16    def test_set_data(self):
17        """Test setting the contents of variables and registers using raw data."""
18        self.build()
19        exe = self.getBuildArtifact("a.out")
20        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
21
22        self.runCmd("br s -p First")
23        self.runCmd("br s -p Second")
24
25        self.runCmd("run", RUN_SUCCEEDED)
26
27        self.expect("p myFoo.x", VARIABLES_DISPLAYED_CORRECTLY,
28                    substrs=['2'])
29
30        process = self.dbg.GetSelectedTarget().GetProcess()
31        frame = process.GetSelectedThread().GetFrameAtIndex(0)
32
33        x = frame.FindVariable("myFoo").GetChildMemberWithName("x")
34
35        my_data = lldb.SBData.CreateDataFromSInt32Array(
36            lldb.eByteOrderLittle, 8, [4])
37        err = lldb.SBError()
38
39        self.assertTrue(x.SetData(my_data, err))
40
41        self.runCmd("continue")
42
43        self.expect("p myFoo.x", VARIABLES_DISPLAYED_CORRECTLY,
44                    substrs=['4'])
45
46        frame = process.GetSelectedThread().GetFrameAtIndex(0)
47
48        x = frame.FindVariable("string")
49
50        if process.GetAddressByteSize() == 8:
51            my_data = lldb.SBData.CreateDataFromUInt64Array(
52                process.GetByteOrder(), 8, [0])
53        else:
54            my_data = lldb.SBData.CreateDataFromUInt32Array(
55                process.GetByteOrder(), 4, [0])
56
57        err = lldb.SBError()
58
59        self.assertTrue(x.SetData(my_data, err))
60
61        self.expect(
62            "fr var -d run-target string",
63            VARIABLES_DISPLAYED_CORRECTLY,
64            substrs=[
65                'NSString *',
66                'nil'])
67