mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	
		
			
	
	
		
			49 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			49 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | """A minimal hook for gathering line coverage of the standard library.
 | ||
|  | 
 | ||
|  | Designed to be used with -Xpresite= which means: | ||
|  | * it installs itself on import | ||
|  | * it's not imported as `__main__` so can't use the ifmain idiom | ||
|  | * it can't import anything besides `sys` to avoid tainting gathered coverage | ||
|  | * filenames are not normalized | ||
|  | 
 | ||
|  | To get gathered coverage back, look for 'test.cov' in `sys.modules` | ||
|  | instead of importing directly. That way you can determine if the module | ||
|  | was already in use. | ||
|  | 
 | ||
|  | If you need to disable the hook, call the `disable()` function. | ||
|  | """
 | ||
|  | 
 | ||
|  | import sys | ||
|  | 
 | ||
|  | mon = sys.monitoring | ||
|  | 
 | ||
|  | FileName = str | ||
|  | LineNo = int | ||
|  | Location = tuple[FileName, LineNo] | ||
|  | 
 | ||
|  | coverage: set[Location] = set() | ||
|  | 
 | ||
|  | 
 | ||
|  | # `types` and `typing` aren't imported to avoid invalid coverage | ||
|  | def add_line( | ||
|  |     code: "types.CodeType", | ||
|  |     lineno: int, | ||
|  | ) -> "typing.Literal[sys.monitoring.DISABLE]": | ||
|  |     coverage.add((code.co_filename, lineno)) | ||
|  |     return mon.DISABLE | ||
|  | 
 | ||
|  | 
 | ||
|  | def enable(): | ||
|  |     mon.use_tool_id(mon.COVERAGE_ID, "regrtest coverage") | ||
|  |     mon.register_callback(mon.COVERAGE_ID, mon.events.LINE, add_line) | ||
|  |     mon.set_events(mon.COVERAGE_ID, mon.events.LINE) | ||
|  | 
 | ||
|  | 
 | ||
|  | def disable(): | ||
|  |     mon.set_events(mon.COVERAGE_ID, 0) | ||
|  |     mon.register_callback(mon.COVERAGE_ID, mon.events.LINE, None) | ||
|  |     mon.free_tool_id(mon.COVERAGE_ID) | ||
|  | 
 | ||
|  | 
 | ||
|  | enable() |