xref: /llvm-project/lldb/test/API/lua_api/TestComprehensive.lua (revision 80fcecb13c388ff087a27a4b0e7ca3dd8c98eaa4)
167f94e5aSSiger Yang_T = require('lua_lldb_test').create_test('TestComprehensive')
267f94e5aSSiger Yang
367f94e5aSSiger Yangfunction _T:Test0_CreateTarget()
467f94e5aSSiger Yang    self.target = self:create_target()
567f94e5aSSiger Yang    assertTrue(self.target:IsValid())
667f94e5aSSiger Yangend
767f94e5aSSiger Yang
867f94e5aSSiger Yangfunction _T:Test1_Breakpoint()
967f94e5aSSiger Yang    self.main_bp = self.target:BreakpointCreateByName('main', 'a.out')
1067f94e5aSSiger Yang    self.loop_bp = self.target:BreakpointCreateByLocation('main.c', 28)
1167f94e5aSSiger Yang    assertTrue(self.main_bp:IsValid() and self.main_bp:GetNumLocations() == 1)
1267f94e5aSSiger Yang    assertTrue(self.loop_bp:IsValid() and self.loop_bp:GetNumLocations() == 1)
1367f94e5aSSiger Yangend
1467f94e5aSSiger Yang
1567f94e5aSSiger Yangfunction _T:Test2_Launch()
1667f94e5aSSiger Yang    local error = lldb.SBError()
1767f94e5aSSiger Yang    self.args = { 'arg' }
1867f94e5aSSiger Yang    self.process = self.target:Launch(
1967f94e5aSSiger Yang        self.debugger:GetListener(),
2067f94e5aSSiger Yang        self.args,
2167f94e5aSSiger Yang        nil,
2267f94e5aSSiger Yang        nil,
2367f94e5aSSiger Yang        self.output,
2467f94e5aSSiger Yang        nil,
2567f94e5aSSiger Yang        nil,
2667f94e5aSSiger Yang        0,
2767f94e5aSSiger Yang        false,
2867f94e5aSSiger Yang        error
2967f94e5aSSiger Yang    )
3067f94e5aSSiger Yang    assertTrue(error:Success())
3167f94e5aSSiger Yang    assertTrue(self.process:IsValid())
3267f94e5aSSiger Yangend
3367f94e5aSSiger Yang
3467f94e5aSSiger Yangfunction _T:Test3_BreakpointFindVariables()
3567f94e5aSSiger Yang    -- checking "argc" value
3667f94e5aSSiger Yang    local thread = get_stopped_thread(self.process, lldb.eStopReasonBreakpoint)
3767f94e5aSSiger Yang    assertNotNil(thread)
3867f94e5aSSiger Yang    assertTrue(thread:IsValid())
3967f94e5aSSiger Yang    local frame = thread:GetFrameAtIndex(0)
4067f94e5aSSiger Yang    assertTrue(frame:IsValid())
4167f94e5aSSiger Yang    local error = lldb.SBError()
4267f94e5aSSiger Yang    local var_argc = frame:FindVariable('argc')
4367f94e5aSSiger Yang    assertTrue(var_argc:IsValid())
4467f94e5aSSiger Yang    local var_argc_value = var_argc:GetValueAsSigned(error, 0)
4567f94e5aSSiger Yang    assertTrue(error:Success())
46*80fcecb1SJonas Devlieghere    assertEqual(var_argc_value, 2)
4767f94e5aSSiger Yang
4867f94e5aSSiger Yang    -- checking "inited" value
4967f94e5aSSiger Yang    local continue = self.process:Continue()
5067f94e5aSSiger Yang    assertTrue(continue:Success())
5167f94e5aSSiger Yang    thread = get_stopped_thread(self.process, lldb.eStopReasonBreakpoint)
5267f94e5aSSiger Yang    assertNotNil(thread)
5367f94e5aSSiger Yang    assertTrue(thread:IsValid())
5467f94e5aSSiger Yang    frame = thread:GetFrameAtIndex(0)
5567f94e5aSSiger Yang    assertTrue(frame:IsValid())
5667f94e5aSSiger Yang    error = lldb.SBError()
5767f94e5aSSiger Yang    local var_inited = frame:FindVariable('inited')
5867f94e5aSSiger Yang    assertTrue(var_inited:IsValid())
5967f94e5aSSiger Yang    self.var_inited = var_inited
6067f94e5aSSiger Yang    local var_inited_value = var_inited:GetValueAsUnsigned(error, 0)
6167f94e5aSSiger Yang    assertTrue(error:Success())
62*80fcecb1SJonas Devlieghere    assertEqual(var_inited_value, 0xDEADBEEF)
6367f94e5aSSiger Yangend
6467f94e5aSSiger Yang
6567f94e5aSSiger Yangfunction _T:Test3_RawData()
6667f94e5aSSiger Yang    local error = lldb.SBError()
6767f94e5aSSiger Yang    local address = self.var_inited:GetAddress()
6867f94e5aSSiger Yang    assertTrue(address:IsValid())
6967f94e5aSSiger Yang    local size = self.var_inited:GetByteSize()
7067f94e5aSSiger Yang    local raw_data = self.process:ReadMemory(address:GetOffset(), size, error)
7167f94e5aSSiger Yang    assertTrue(error:Success())
7267f94e5aSSiger Yang    local data_le = lldb.SBData.CreateDataFromUInt32Array(lldb.eByteOrderLittle, 1, {0xDEADBEEF})
7367f94e5aSSiger Yang    local data_be = lldb.SBData.CreateDataFromUInt32Array(lldb.eByteOrderBig, 1, {0xDEADBEEF})
7467f94e5aSSiger Yang    assertTrue(data_le:GetUnsignedInt32(error, 0) == 0xDEADBEEF or data_be:GetUnsignedInt32(error, 0) == 0xDEADBEEF)
7567f94e5aSSiger Yang    assertTrue(raw_data == "\xEF\xBE\xAD\xDE" or raw_data == "\xDE\xAD\xBE\xEF")
7667f94e5aSSiger Yangend
7767f94e5aSSiger Yang
7867f94e5aSSiger Yangfunction _T:Test4_ProcessExit()
7967f94e5aSSiger Yang    self.loop_bp:SetAutoContinue(true)
8067f94e5aSSiger Yang    local continue = self.process:Continue()
8167f94e5aSSiger Yang    assertTrue(continue:Success())
8267f94e5aSSiger Yang    assertTrue(self.process:GetExitStatus() == 0)
8367f94e5aSSiger Yangend
8467f94e5aSSiger Yang
8567f94e5aSSiger Yangfunction _T:Test5_FileOutput()
8667f94e5aSSiger Yang    local f = io.open(self.output, 'r')
87*80fcecb1SJonas Devlieghere    assertEqual(
8867f94e5aSSiger Yang        read_file_non_empty_lines(f),
8967f94e5aSSiger Yang        {
9067f94e5aSSiger Yang            self.exe,
9167f94e5aSSiger Yang            table.unpack(self.args),
9267f94e5aSSiger Yang            'I am a function.',
9367f94e5aSSiger Yang            'sum = 5050'
9467f94e5aSSiger Yang        }
9567f94e5aSSiger Yang    )
9667f94e5aSSiger Yang    f:close()
9767f94e5aSSiger Yangend
9867f94e5aSSiger Yang
9967f94e5aSSiger Yangos.exit(_T:run())
100