| 
									
										
										
										
											2008-01-21 11:20:28 +00:00
										 |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2008-05-20 21:35:26 +00:00
										 |  |  | from test import support | 
					
						
							| 
									
										
										
										
											2010-10-22 06:28:01 +00:00
										 |  |  | from io import StringIO | 
					
						
							| 
									
										
										
										
											2008-01-21 11:20:28 +00:00
										 |  |  | import pstats | 
					
						
							| 
									
										
										
										
											2018-01-25 20:49:56 -08:00
										 |  |  | from pstats import SortKey | 
					
						
							| 
									
										
										
										
											2008-01-21 11:20:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class AddCallersTestCase(unittest.TestCase): | 
					
						
							|  |  |  |     """Tests for pstats.add_callers helper.""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_combine_results(self): | 
					
						
							| 
									
										
										
										
											2010-10-22 06:28:01 +00:00
										 |  |  |         # pstats.add_callers should combine the call results of both target | 
					
						
							|  |  |  |         # and source by adding the call time. See issue1269. | 
					
						
							| 
									
										
										
										
											2010-08-02 17:24:49 +00:00
										 |  |  |         # new format: used by the cProfile module | 
					
						
							| 
									
										
										
										
											2008-01-21 11:20:28 +00:00
										 |  |  |         target = {"a": (1, 2, 3, 4)} | 
					
						
							|  |  |  |         source = {"a": (1, 2, 3, 4), "b": (5, 6, 7, 8)} | 
					
						
							|  |  |  |         new_callers = pstats.add_callers(target, source) | 
					
						
							|  |  |  |         self.assertEqual(new_callers, {'a': (2, 4, 6, 8), 'b': (5, 6, 7, 8)}) | 
					
						
							| 
									
										
										
										
											2010-08-02 17:24:49 +00:00
										 |  |  |         # old format: used by the profile module | 
					
						
							|  |  |  |         target = {"a": 1} | 
					
						
							|  |  |  |         source = {"a": 1, "b": 5} | 
					
						
							|  |  |  |         new_callers = pstats.add_callers(target, source) | 
					
						
							|  |  |  |         self.assertEqual(new_callers, {'a': 2, 'b': 5}) | 
					
						
							| 
									
										
										
										
											2008-01-21 11:20:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-22 06:28:01 +00:00
										 |  |  | class StatsTestCase(unittest.TestCase): | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         stats_file = support.findfile('pstats.pck') | 
					
						
							|  |  |  |         self.stats = pstats.Stats(stats_file) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_add(self): | 
					
						
							|  |  |  |         stream = StringIO() | 
					
						
							|  |  |  |         stats = pstats.Stats(stream=stream) | 
					
						
							|  |  |  |         stats.add(self.stats, self.stats) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-25 20:49:56 -08:00
										 |  |  |     def test_sort_stats_int(self): | 
					
						
							|  |  |  |         valid_args = {-1: 'stdname', | 
					
						
							|  |  |  |                       0: 'calls', | 
					
						
							|  |  |  |                       1: 'time', | 
					
						
							|  |  |  |                       2: 'cumulative'} | 
					
						
							|  |  |  |         for arg_int, arg_str in valid_args.items(): | 
					
						
							|  |  |  |             self.stats.sort_stats(arg_int) | 
					
						
							|  |  |  |             self.assertEqual(self.stats.sort_type, | 
					
						
							|  |  |  |                              self.stats.sort_arg_dict_default[arg_str][-1]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_sort_stats_string(self): | 
					
						
							|  |  |  |         for sort_name in ['calls', 'ncalls', 'cumtime', 'cumulative', | 
					
						
							|  |  |  |                     'filename', 'line', 'module', 'name', 'nfl', 'pcalls', | 
					
						
							|  |  |  |                     'stdname', 'time', 'tottime']: | 
					
						
							|  |  |  |             self.stats.sort_stats(sort_name) | 
					
						
							|  |  |  |             self.assertEqual(self.stats.sort_type, | 
					
						
							|  |  |  |                              self.stats.sort_arg_dict_default[sort_name][-1]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_sort_stats_partial(self): | 
					
						
							|  |  |  |         sortkey = 'filename' | 
					
						
							|  |  |  |         for sort_name in ['f', 'fi', 'fil', 'file', 'filen', 'filena', | 
					
						
							|  |  |  |                            'filenam', 'filename']: | 
					
						
							|  |  |  |             self.stats.sort_stats(sort_name) | 
					
						
							|  |  |  |             self.assertEqual(self.stats.sort_type, | 
					
						
							|  |  |  |                              self.stats.sort_arg_dict_default[sortkey][-1]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_sort_stats_enum(self): | 
					
						
							|  |  |  |         for member in SortKey: | 
					
						
							|  |  |  |             self.stats.sort_stats(member) | 
					
						
							|  |  |  |             self.assertEqual( | 
					
						
							|  |  |  |                     self.stats.sort_type, | 
					
						
							|  |  |  |                     self.stats.sort_arg_dict_default[member.value][-1]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_sort_starts_mix(self): | 
					
						
							|  |  |  |         self.assertRaises(TypeError, self.stats.sort_stats, | 
					
						
							|  |  |  |                           'calls', | 
					
						
							|  |  |  |                           SortKey.TIME) | 
					
						
							|  |  |  |         self.assertRaises(TypeError, self.stats.sort_stats, | 
					
						
							|  |  |  |                           SortKey.TIME, | 
					
						
							|  |  |  |                           'calls') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-22 06:28:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-21 11:20:28 +00:00
										 |  |  | if __name__ == "__main__": | 
					
						
							| 
									
										
										
										
											2015-04-13 15:00:43 -05:00
										 |  |  |     unittest.main() |