| 
									
										
										
										
											2023-09-28 19:04:01 +02:00
										 |  |  | """
 | 
					
						
							|  |  |  | Similar to test_cfunction but test "py-bt-full" command. | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import re | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from .util import setup_module | 
					
						
							|  |  |  | from .test_cfunction import CFunctionTests | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def setUpModule(): | 
					
						
							|  |  |  |     setup_module() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CFunctionFullTests(CFunctionTests): | 
					
						
							|  |  |  |     def check(self, func_name, cmd): | 
					
						
							|  |  |  |         # Verify with "py-bt-full": | 
					
						
							|  |  |  |         gdb_output = self.get_stack_trace( | 
					
						
							|  |  |  |             cmd, | 
					
						
							|  |  |  |             breakpoint=func_name, | 
					
						
							| 
									
										
										
										
											2023-10-04 10:57:35 +02:00
										 |  |  |             cmds_after_breakpoint=['bt', 'py-bt-full'], | 
					
						
							| 
									
										
										
										
											2023-09-28 19:04:01 +02:00
										 |  |  |             # bpo-45207: Ignore 'Function "meth_varargs" not | 
					
						
							|  |  |  |             # defined.' message in stderr. | 
					
						
							|  |  |  |             ignore_stderr=True, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # bpo-46600: If the compiler inlines _null_to_none() in | 
					
						
							|  |  |  |         # meth_varargs() (ex: clang -Og), _null_to_none() is the | 
					
						
							|  |  |  |         # frame #1. Otherwise, meth_varargs() is the frame #1. | 
					
						
							|  |  |  |         regex = r'#(1|2)' | 
					
						
							|  |  |  |         regex += re.escape(f' <built-in method {func_name}') | 
					
						
							|  |  |  |         self.assertRegex(gdb_output, regex) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Delete the test case, otherwise it's executed twice | 
					
						
							|  |  |  | del CFunctionTests |