17db96d56Sopenharmony_ci"""Test suite for the cProfile module.""" 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ciimport sys 47db96d56Sopenharmony_ciimport unittest 57db96d56Sopenharmony_ci 67db96d56Sopenharmony_ci# rip off all interesting stuff from test_profile 77db96d56Sopenharmony_ciimport cProfile 87db96d56Sopenharmony_cifrom test.test_profile import ProfileTest, regenerate_expected_output 97db96d56Sopenharmony_cifrom test.support.script_helper import assert_python_failure 107db96d56Sopenharmony_cifrom test import support 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ciclass CProfileTest(ProfileTest): 147db96d56Sopenharmony_ci profilerclass = cProfile.Profile 157db96d56Sopenharmony_ci profilermodule = cProfile 167db96d56Sopenharmony_ci expected_max_output = "{built-in method builtins.max}" 177db96d56Sopenharmony_ci 187db96d56Sopenharmony_ci def get_expected_output(self): 197db96d56Sopenharmony_ci return _ProfileOutput 207db96d56Sopenharmony_ci 217db96d56Sopenharmony_ci def test_bad_counter_during_dealloc(self): 227db96d56Sopenharmony_ci # bpo-3895 237db96d56Sopenharmony_ci import _lsprof 247db96d56Sopenharmony_ci 257db96d56Sopenharmony_ci with support.catch_unraisable_exception() as cm: 267db96d56Sopenharmony_ci obj = _lsprof.Profiler(lambda: int) 277db96d56Sopenharmony_ci obj.enable() 287db96d56Sopenharmony_ci obj = _lsprof.Profiler(1) 297db96d56Sopenharmony_ci obj.disable() 307db96d56Sopenharmony_ci obj.clear() 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci self.assertEqual(cm.unraisable.exc_type, TypeError) 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ci def test_profile_enable_disable(self): 357db96d56Sopenharmony_ci prof = self.profilerclass() 367db96d56Sopenharmony_ci # Make sure we clean ourselves up if the test fails for some reason. 377db96d56Sopenharmony_ci self.addCleanup(prof.disable) 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_ci prof.enable() 407db96d56Sopenharmony_ci self.assertIs(sys.getprofile(), prof) 417db96d56Sopenharmony_ci 427db96d56Sopenharmony_ci prof.disable() 437db96d56Sopenharmony_ci self.assertIs(sys.getprofile(), None) 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ci def test_profile_as_context_manager(self): 467db96d56Sopenharmony_ci prof = self.profilerclass() 477db96d56Sopenharmony_ci # Make sure we clean ourselves up if the test fails for some reason. 487db96d56Sopenharmony_ci self.addCleanup(prof.disable) 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ci with prof as __enter__return_value: 517db96d56Sopenharmony_ci # profile.__enter__ should return itself. 527db96d56Sopenharmony_ci self.assertIs(prof, __enter__return_value) 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ci # profile should be set as the global profiler inside the 557db96d56Sopenharmony_ci # with-block 567db96d56Sopenharmony_ci self.assertIs(sys.getprofile(), prof) 577db96d56Sopenharmony_ci 587db96d56Sopenharmony_ci # profile shouldn't be set once we leave the with-block. 597db96d56Sopenharmony_ci self.assertIs(sys.getprofile(), None) 607db96d56Sopenharmony_ci 617db96d56Sopenharmony_ciclass TestCommandLine(unittest.TestCase): 627db96d56Sopenharmony_ci def test_sort(self): 637db96d56Sopenharmony_ci rc, out, err = assert_python_failure('-m', 'cProfile', '-s', 'demo') 647db96d56Sopenharmony_ci self.assertGreater(rc, 0) 657db96d56Sopenharmony_ci self.assertIn(b"option -s: invalid choice: 'demo'", err) 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ci 687db96d56Sopenharmony_cidef main(): 697db96d56Sopenharmony_ci if '-r' not in sys.argv: 707db96d56Sopenharmony_ci unittest.main() 717db96d56Sopenharmony_ci else: 727db96d56Sopenharmony_ci regenerate_expected_output(__file__, CProfileTest) 737db96d56Sopenharmony_ci 747db96d56Sopenharmony_ci 757db96d56Sopenharmony_ci# Don't remove this comment. Everything below it is auto-generated. 767db96d56Sopenharmony_ci#--cut-------------------------------------------------------------------------- 777db96d56Sopenharmony_ci_ProfileOutput = {} 787db96d56Sopenharmony_ci_ProfileOutput['print_stats'] = """\ 797db96d56Sopenharmony_ci 28 0.028 0.001 0.028 0.001 profilee.py:110(__getattr__) 807db96d56Sopenharmony_ci 1 0.270 0.270 1.000 1.000 profilee.py:25(testfunc) 817db96d56Sopenharmony_ci 23/3 0.150 0.007 0.170 0.057 profilee.py:35(factorial) 827db96d56Sopenharmony_ci 20 0.020 0.001 0.020 0.001 profilee.py:48(mul) 837db96d56Sopenharmony_ci 2 0.040 0.020 0.600 0.300 profilee.py:55(helper) 847db96d56Sopenharmony_ci 4 0.116 0.029 0.120 0.030 profilee.py:73(helper1) 857db96d56Sopenharmony_ci 2 0.000 0.000 0.140 0.070 profilee.py:84(helper2_indirect) 867db96d56Sopenharmony_ci 8 0.312 0.039 0.400 0.050 profilee.py:88(helper2) 877db96d56Sopenharmony_ci 8 0.064 0.008 0.080 0.010 profilee.py:98(subhelper)""" 887db96d56Sopenharmony_ci_ProfileOutput['print_callers'] = """\ 897db96d56Sopenharmony_ciprofilee.py:110(__getattr__) <- 16 0.016 0.016 profilee.py:98(subhelper) 907db96d56Sopenharmony_ciprofilee.py:25(testfunc) <- 1 0.270 1.000 <string>:1(<module>) 917db96d56Sopenharmony_ciprofilee.py:35(factorial) <- 1 0.014 0.130 profilee.py:25(testfunc) 927db96d56Sopenharmony_ci 20/3 0.130 0.147 profilee.py:35(factorial) 937db96d56Sopenharmony_ci 2 0.006 0.040 profilee.py:84(helper2_indirect) 947db96d56Sopenharmony_ciprofilee.py:48(mul) <- 20 0.020 0.020 profilee.py:35(factorial) 957db96d56Sopenharmony_ciprofilee.py:55(helper) <- 2 0.040 0.600 profilee.py:25(testfunc) 967db96d56Sopenharmony_ciprofilee.py:73(helper1) <- 4 0.116 0.120 profilee.py:55(helper) 977db96d56Sopenharmony_ciprofilee.py:84(helper2_indirect) <- 2 0.000 0.140 profilee.py:55(helper) 987db96d56Sopenharmony_ciprofilee.py:88(helper2) <- 6 0.234 0.300 profilee.py:55(helper) 997db96d56Sopenharmony_ci 2 0.078 0.100 profilee.py:84(helper2_indirect) 1007db96d56Sopenharmony_ciprofilee.py:98(subhelper) <- 8 0.064 0.080 profilee.py:88(helper2) 1017db96d56Sopenharmony_ci{built-in method builtins.hasattr} <- 4 0.000 0.004 profilee.py:73(helper1) 1027db96d56Sopenharmony_ci 8 0.000 0.008 profilee.py:88(helper2) 1037db96d56Sopenharmony_ci{built-in method sys.exc_info} <- 4 0.000 0.000 profilee.py:73(helper1) 1047db96d56Sopenharmony_ci{method 'append' of 'list' objects} <- 4 0.000 0.000 profilee.py:73(helper1)""" 1057db96d56Sopenharmony_ci_ProfileOutput['print_callees'] = """\ 1067db96d56Sopenharmony_ci<string>:1(<module>) -> 1 0.270 1.000 profilee.py:25(testfunc) 1077db96d56Sopenharmony_ciprofilee.py:110(__getattr__) -> 1087db96d56Sopenharmony_ciprofilee.py:25(testfunc) -> 1 0.014 0.130 profilee.py:35(factorial) 1097db96d56Sopenharmony_ci 2 0.040 0.600 profilee.py:55(helper) 1107db96d56Sopenharmony_ciprofilee.py:35(factorial) -> 20/3 0.130 0.147 profilee.py:35(factorial) 1117db96d56Sopenharmony_ci 20 0.020 0.020 profilee.py:48(mul) 1127db96d56Sopenharmony_ciprofilee.py:48(mul) -> 1137db96d56Sopenharmony_ciprofilee.py:55(helper) -> 4 0.116 0.120 profilee.py:73(helper1) 1147db96d56Sopenharmony_ci 2 0.000 0.140 profilee.py:84(helper2_indirect) 1157db96d56Sopenharmony_ci 6 0.234 0.300 profilee.py:88(helper2) 1167db96d56Sopenharmony_ciprofilee.py:73(helper1) -> 4 0.000 0.004 {built-in method builtins.hasattr} 1177db96d56Sopenharmony_ciprofilee.py:84(helper2_indirect) -> 2 0.006 0.040 profilee.py:35(factorial) 1187db96d56Sopenharmony_ci 2 0.078 0.100 profilee.py:88(helper2) 1197db96d56Sopenharmony_ciprofilee.py:88(helper2) -> 8 0.064 0.080 profilee.py:98(subhelper) 1207db96d56Sopenharmony_ciprofilee.py:98(subhelper) -> 16 0.016 0.016 profilee.py:110(__getattr__) 1217db96d56Sopenharmony_ci{built-in method builtins.hasattr} -> 12 0.012 0.012 profilee.py:110(__getattr__)""" 1227db96d56Sopenharmony_ci 1237db96d56Sopenharmony_ciif __name__ == "__main__": 1247db96d56Sopenharmony_ci main() 125