@@ -18,6 +18,45 @@ def tearDown(self):
1818 if self .background_pid :
1919 os .kill (self .background_pid , signal .SIGKILL )
2020
21+ @skipIfRemote
22+ def test_GetObjectName (self ):
23+ """Test the SBModule::GetObjectName() method"""
24+ self .build ()
25+ exe = self .getBuildArtifact ("a.out" )
26+ libfoo_path = self .getBuildArtifact ("libfoo.a" )
27+ target_exe = self .dbg .CreateTarget (exe )
28+ self .assertTrue (target_exe .IsValid (), "Target for a.out is valid" )
29+
30+ # Test that the executable module has no object name (usually the first module in the target)
31+ exe_module = target_exe .GetModuleAtIndex (0 )
32+ self .assertTrue (exe_module .IsValid (), "Executable module is valid" )
33+ self .assertIsNone (
34+ exe_module .GetObjectName (), "a.out should have no object name"
35+ )
36+
37+ # check archive member names
38+ module_specs = lldb .SBModuleSpecList .GetModuleSpecifications (libfoo_path )
39+ self .assertGreater (
40+ module_specs .GetSize (), 0 , "Archive should have at least one module spec"
41+ )
42+ found = set ()
43+ expected = {"a.o" , "b.o" }
44+ for i in range (module_specs .GetSize ()):
45+ spec = module_specs .GetSpecAtIndex (i )
46+ obj_name = spec .GetObjectName ()
47+ self .assertIsInstance (obj_name , str )
48+ self .assertIn (obj_name , expected , f"Unexpected object name: { obj_name } " )
49+ # create a module from the arhive using the sepc
50+ module = lldb .SBModule (spec )
51+ self .assertTrue (module .IsValid (), "Module is valid" )
52+ self .assertTrue (module .IsValid (), f"Module for { obj_name } is valid" )
53+ self .assertEqual (
54+ module .GetObjectName (), obj_name , f"Object name for { obj_name } matches"
55+ )
56+ found .add (obj_name )
57+
58+ self .assertEqual (found , expected , "Did not find all expected archive members" )
59+
2160 @skipUnlessDarwin
2261 @skipIfRemote
2362 def test_module_is_file_backed (self ):
0 commit comments