199451b44SJordan Rupprecht"""
299451b44SJordan RupprechtSet the contents of variables and registers using raw data
399451b44SJordan Rupprecht"""
499451b44SJordan Rupprecht
599451b44SJordan Rupprecht
699451b44SJordan Rupprecht
799451b44SJordan Rupprechtimport lldb
899451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
999451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
1099451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
1199451b44SJordan Rupprecht
1299451b44SJordan Rupprecht
1399451b44SJordan Rupprechtclass SetDataTestCase(TestBase):
1499451b44SJordan Rupprecht
15*a852cf66SMichał Górny    @add_test_categories(["objc"])
1699451b44SJordan Rupprecht    def test_set_data(self):
1799451b44SJordan Rupprecht        """Test setting the contents of variables and registers using raw data."""
1899451b44SJordan Rupprecht        self.build()
1999451b44SJordan Rupprecht        exe = self.getBuildArtifact("a.out")
2099451b44SJordan Rupprecht        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
2199451b44SJordan Rupprecht
2299451b44SJordan Rupprecht        self.runCmd("br s -p First")
2399451b44SJordan Rupprecht        self.runCmd("br s -p Second")
2499451b44SJordan Rupprecht
2599451b44SJordan Rupprecht        self.runCmd("run", RUN_SUCCEEDED)
2699451b44SJordan Rupprecht
2799451b44SJordan Rupprecht        self.expect("p myFoo.x", VARIABLES_DISPLAYED_CORRECTLY,
2899451b44SJordan Rupprecht                    substrs=['2'])
2999451b44SJordan Rupprecht
3099451b44SJordan Rupprecht        process = self.dbg.GetSelectedTarget().GetProcess()
3199451b44SJordan Rupprecht        frame = process.GetSelectedThread().GetFrameAtIndex(0)
3299451b44SJordan Rupprecht
3399451b44SJordan Rupprecht        x = frame.FindVariable("myFoo").GetChildMemberWithName("x")
3499451b44SJordan Rupprecht
3599451b44SJordan Rupprecht        my_data = lldb.SBData.CreateDataFromSInt32Array(
3699451b44SJordan Rupprecht            lldb.eByteOrderLittle, 8, [4])
3799451b44SJordan Rupprecht        err = lldb.SBError()
3899451b44SJordan Rupprecht
3999451b44SJordan Rupprecht        self.assertTrue(x.SetData(my_data, err))
4099451b44SJordan Rupprecht
4199451b44SJordan Rupprecht        self.runCmd("continue")
4299451b44SJordan Rupprecht
4399451b44SJordan Rupprecht        self.expect("p myFoo.x", VARIABLES_DISPLAYED_CORRECTLY,
4499451b44SJordan Rupprecht                    substrs=['4'])
4599451b44SJordan Rupprecht
4699451b44SJordan Rupprecht        frame = process.GetSelectedThread().GetFrameAtIndex(0)
4799451b44SJordan Rupprecht
4899451b44SJordan Rupprecht        x = frame.FindVariable("string")
4999451b44SJordan Rupprecht
5099451b44SJordan Rupprecht        if process.GetAddressByteSize() == 8:
5199451b44SJordan Rupprecht            my_data = lldb.SBData.CreateDataFromUInt64Array(
5299451b44SJordan Rupprecht                process.GetByteOrder(), 8, [0])
5399451b44SJordan Rupprecht        else:
5499451b44SJordan Rupprecht            my_data = lldb.SBData.CreateDataFromUInt32Array(
5599451b44SJordan Rupprecht                process.GetByteOrder(), 4, [0])
5699451b44SJordan Rupprecht
5799451b44SJordan Rupprecht        err = lldb.SBError()
5899451b44SJordan Rupprecht
5999451b44SJordan Rupprecht        self.assertTrue(x.SetData(my_data, err))
6099451b44SJordan Rupprecht
6199451b44SJordan Rupprecht        self.expect(
6299451b44SJordan Rupprecht            "fr var -d run-target string",
6399451b44SJordan Rupprecht            VARIABLES_DISPLAYED_CORRECTLY,
6499451b44SJordan Rupprecht            substrs=[
6599451b44SJordan Rupprecht                'NSString *',
6699451b44SJordan Rupprecht                'nil'])
67