https://github.com/HamzaHassanain created https://github.com/llvm/llvm-project/pull/173473
#168920 >From 264da9b931ac90c078a81557bbd0e2f50638a9d7 Mon Sep 17 00:00:00 2001 From: Hamza Hassanain <[email protected]> Date: Wed, 24 Dec 2025 12:37:09 +0200 Subject: [PATCH] [lldb] Swig python extensions tests for SBTargetExtention --- .../python_api/sbtarget_extensions/Makefile | 3 + .../TestSBTargetExtensions.py | 137 ++++++++++++++++++ .../API/python_api/sbtarget_extensions/main.c | 7 + 3 files changed, 147 insertions(+) create mode 100644 lldb/test/API/python_api/sbtarget_extensions/Makefile create mode 100644 lldb/test/API/python_api/sbtarget_extensions/TestSBTargetExtensions.py create mode 100644 lldb/test/API/python_api/sbtarget_extensions/main.c diff --git a/lldb/test/API/python_api/sbtarget_extensions/Makefile b/lldb/test/API/python_api/sbtarget_extensions/Makefile new file mode 100644 index 0000000000000..10495940055b6 --- /dev/null +++ b/lldb/test/API/python_api/sbtarget_extensions/Makefile @@ -0,0 +1,3 @@ +C_SOURCES := main.c + +include Makefile.rules diff --git a/lldb/test/API/python_api/sbtarget_extensions/TestSBTargetExtensions.py b/lldb/test/API/python_api/sbtarget_extensions/TestSBTargetExtensions.py new file mode 100644 index 0000000000000..d1b7ba1eabd0e --- /dev/null +++ b/lldb/test/API/python_api/sbtarget_extensions/TestSBTargetExtensions.py @@ -0,0 +1,137 @@ +import re +import uuid + +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * + + +class SBTargetExtensionsTestCase(TestBase): + + def test_equality(self): + """Test the equality operator for SBTarget.""" + self.build() + exe = self.getBuildArtifact("a.out") + target = self.dbg.CreateTarget(exe) + self.assertTrue(target.IsValid()) + + self.assertEqual(target, target) + self.assertNotEqual(target, lldb.SBTarget()) + + def test_module_access(self): + """Test the module access extension properties and methods.""" + self.build() + exe = self.getBuildArtifact("a.out") + target = self.dbg.CreateTarget(exe) + self.assertTrue(target.IsValid()) + + self.assertTrue(len(target.modules) > 0) + module = target.module[0] + self.assertTrue(module.IsValid()) + + self.assertEqual(target.module["a.out"], module) + self.assertEqual(target.module[module.file.fullpath], module) + + # UUID strings on Linux might not be standard UUIDs (they are Build IDs). + # We try to convert, but if it fails, we skip the UUID object check. + uuid_str = module.GetUUIDString() + if uuid_str: + try: + uuid_obj = uuid.UUID(uuid_str) + self.assertEqual(target.module[uuid_obj], module) + except ValueError: + # The UUID string wasn't a standard UUID format, which is fine on Linux. + pass + + self.assertEqual(len(target.module[re.compile("a.out")]), 1) + self.assertEqual(target.module[re.compile("a.out")][0], module) + + def test_process_creation(self): + """Test process creation via extensions.""" + self.build() + exe = self.getBuildArtifact("a.out") + target = self.dbg.CreateTarget(exe) + self.assertTrue(target.IsValid()) + + self.assertFalse(target.process.IsValid()) + + process = target.LaunchSimple(None, None, self.get_process_working_directory()) + self.assertTrue(process.IsValid()) + + # SBProcess objects don't support direct equality (==), compare IDs. + self.assertEqual(target.process.GetProcessID(), process.GetProcessID()) + + def test_breakpoints(self): + """Test breakpoint access via extensions.""" + self.build() + exe = self.getBuildArtifact("a.out") + target = self.dbg.CreateTarget(exe) + self.assertTrue(target.IsValid()) + + breakpoint = target.BreakpointCreateBySourceRegex("Set breakpoint here", lldb.SBFileSpec("main.c")) + self.assertTrue(breakpoint.IsValid()) + + self.assertEqual(target.num_breakpoints, 1) + self.assertEqual(len(target.breakpoints), 1) + + # target.breakpoint[i] uses INDEX, not ID. + self.assertEqual(target.breakpoint[0].GetID(), target.breakpoints[0].GetID()) + + # To verify ID lookup works via the standard API: + self.assertEqual(target.FindBreakpointByID(breakpoint.GetID()).GetID(), breakpoint.GetID()) + + def test_watchpoints(self): + """Test watchpoint access via extensions.""" + self.build() + exe = self.getBuildArtifact("a.out") + target = self.dbg.CreateTarget(exe) + self.assertTrue(target.IsValid()) + + # 1. Set a breakpoint so the process stops and stays alive. + breakpoint = target.BreakpointCreateBySourceRegex("Set breakpoint here", lldb.SBFileSpec("main.c")) + self.assertTrue(breakpoint.IsValid()) + + # 2. Launch the process. + process = target.LaunchSimple(None, None, self.get_process_working_directory()) + self.assertTrue(process.IsValid()) + + # 3. Ensure we are stopped. + self.assertEqual(process.GetState(), lldb.eStateStopped) + + variables = target.FindGlobalVariables("g_var", 1) + self.assertTrue(variables.GetSize() > 0) + + global_variable = variables.GetValueAtIndex(0) + error = lldb.SBError() + + # 4. Now we can set the watchpoint. + watchpoint = target.WatchAddress(global_variable.GetLoadAddress(), 4, False, True, error) + self.assertTrue(error.Success(), f"Watchpoint failed: {error.GetCString()}") + + self.assertTrue(target.num_watchpoints > 0) + self.assertEqual(len(target.watchpoints), target.num_watchpoints) + + self.assertEqual(target.watchpoint[0].GetID(), target.watchpoints[0].GetID()) + self.assertEqual(target.watchpoint[0].GetID(), watchpoint.GetID()) + + def test_other_properties(self): + """Test miscellaneous properties of SBTarget.""" + self.build() + exe = self.getBuildArtifact("a.out") + target = self.dbg.CreateTarget(exe) + self.assertTrue(target.IsValid()) + + self.assertTrue(target.executable.IsValid()) + + self.assertEqual(target.debugger.GetID(), self.dbg.GetID()) + + self.assertTrue(target.broadcaster.IsValid()) + self.assertIn(target.byte_order, [lldb.eByteOrderLittle, lldb.eByteOrderBig, lldb.eByteOrderInvalid]) + self.assertTrue(target.addr_size > 0) + self.assertIsNotNone(target.triple) + self.assertIsNotNone(target.arch_name) + + self.assertTrue(target.data_byte_size > 0) + self.assertTrue(target.code_byte_size > 0) + + self.assertTrue(target.platform.IsValid()) \ No newline at end of file diff --git a/lldb/test/API/python_api/sbtarget_extensions/main.c b/lldb/test/API/python_api/sbtarget_extensions/main.c new file mode 100644 index 0000000000000..6ef2ce65d0ae9 --- /dev/null +++ b/lldb/test/API/python_api/sbtarget_extensions/main.c @@ -0,0 +1,7 @@ +#include <stdio.h> + +int g_var = 10; + +int main() { + return g_var; // Set breakpoint here +} _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
