69 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
| """
 | |
| Test symbol table access for main.m.
 | |
| """
 | |
| 
 | |
| from __future__ import print_function
 | |
| 
 | |
| 
 | |
| 
 | |
| import os, time
 | |
| import lldb
 | |
| from lldbsuite.test.lldbtest import *
 | |
| 
 | |
| @skipUnlessDarwin
 | |
| class FoundationSymtabTestCase(TestBase):
 | |
| 
 | |
|     mydir = TestBase.compute_mydir(__file__)
 | |
| 
 | |
|     symbols_list = ['-[MyString initWithNSString:]',
 | |
|                     '-[MyString dealloc]',
 | |
|                     '-[MyString description]',
 | |
|                     '-[MyString descriptionPauses]',     # synthesized property
 | |
|                     '-[MyString setDescriptionPauses:]', # synthesized property
 | |
|                     'Test_Selector',
 | |
|                     'Test_NSString',
 | |
|                     'Test_MyString',
 | |
|                     'Test_NSArray',
 | |
|                     'main'
 | |
|                     ]
 | |
| 
 | |
|     @add_test_categories(['pyapi'])
 | |
|     def test_with_python_api(self):
 | |
|         """Test symbol table access with Python APIs."""
 | |
|         self.build()
 | |
|         exe = os.path.join(os.getcwd(), "a.out")
 | |
|         self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
 | |
| 
 | |
|         target = self.dbg.CreateTarget(exe)
 | |
|         self.assertTrue(target, VALID_TARGET)
 | |
| 
 | |
|         # Launch the process, and do not stop at the entry point.
 | |
|         process = target.LaunchSimple (None, None, self.get_process_working_directory())
 | |
| 
 | |
|         #
 | |
|         # Exercise Python APIs to access the symbol table entries.
 | |
|         #
 | |
| 
 | |
|         # Create the filespec by which to locate our a.out module.
 | |
|         filespec = lldb.SBFileSpec(exe, False)
 | |
| 
 | |
|         module = target.FindModule(filespec)
 | |
|         self.assertTrue(module, VALID_MODULE)
 | |
| 
 | |
|         # Create the set of known symbols.  As we iterate through the symbol
 | |
|         # table, remove the symbol from the set if it is a known symbol.
 | |
|         expected_symbols = set(self.symbols_list)
 | |
|         for symbol in module:
 | |
|             self.assertTrue(symbol, VALID_SYMBOL)
 | |
|             #print("symbol:", symbol)
 | |
|             name = symbol.GetName()
 | |
|             if name in expected_symbols:
 | |
|                 #print("Removing %s from known_symbols %s" % (name, expected_symbols))
 | |
|                 expected_symbols.remove(name)
 | |
| 
 | |
|         # At this point, the known_symbols set should have become an empty set.
 | |
|         # If not, raise an error.
 | |
|         #print("symbols unaccounted for:", expected_symbols)
 | |
|         self.assertTrue(len(expected_symbols) == 0,
 | |
|                         "All the known symbols are accounted for")
 |