<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">"""Test suite for the cProfile module."""

import sys
import unittest
from test.support import run_unittest, TESTFN, unlink
from test.support.script_helper import assert_python_failure

# rip off all interesting stuff from test_profile
import cProfile
from test.test_profile import ProfileTest, regenerate_expected_output


class CProfileTest(ProfileTest):
    profilerclass = cProfile.Profile
    profilermodule = cProfile
    expected_max_output = "{built-in method builtins.max}"

    def get_expected_output(self):
        return _ProfileOutput

    # Issue 3895.
    def test_bad_counter_during_dealloc(self):
        import _lsprof
        # Must use a file as StringIO doesn't trigger the bug.
        orig_stderr = sys.stderr
        try:
            with open(TESTFN, 'w') as file:
                sys.stderr = file
                try:
                    obj = _lsprof.Profiler(lambda: int)
                    obj.enable()
                    obj = _lsprof.Profiler(1)
                    obj.disable()
                    obj.clear()
                finally:
                    sys.stderr = orig_stderr
        finally:
            unlink(TESTFN)


class TestCommandLine(unittest.TestCase):
    def test_sort(self):
        rc, out, err = assert_python_failure('-m', 'cProfile', '-s', 'demo')
        self.assertGreater(rc, 0)
        self.assertIn(b"option -s: invalid choice: 'demo'", err)


def test_main():
    run_unittest(CProfileTest, TestCommandLine)

def main():
    if '-r' not in sys.argv:
        test_main()
    else:
        regenerate_expected_output(__file__, CProfileTest)


# Don't remove this comment. Everything below it is auto-generated.
#--cut--------------------------------------------------------------------------
_ProfileOutput = {}
_ProfileOutput['print_stats'] = """\
       28    0.028    0.001    0.028    0.001 profilee.py:110(__getattr__)
        1    0.270    0.270    1.000    1.000 profilee.py:25(testfunc)
     23/3    0.150    0.007    0.170    0.057 profilee.py:35(factorial)
       20    0.020    0.001    0.020    0.001 profilee.py:48(mul)
        2    0.040    0.020    0.600    0.300 profilee.py:55(helper)
        4    0.116    0.029    0.120    0.030 profilee.py:73(helper1)
        2    0.000    0.000    0.140    0.070 profilee.py:84(helper2_indirect)
        8    0.312    0.039    0.400    0.050 profilee.py:88(helper2)
        8    0.064    0.008    0.080    0.010 profilee.py:98(subhelper)"""
_ProfileOutput['print_callers'] = """\
profilee.py:110(__getattr__)                      &lt;-      16    0.016    0.016  profilee.py:98(subhelper)
profilee.py:25(testfunc)                          &lt;-       1    0.270    1.000  &lt;string&gt;:1(&lt;module&gt;)
profilee.py:35(factorial)                         &lt;-       1    0.014    0.130  profilee.py:25(testfunc)
                                                        20/3    0.130    0.147  profilee.py:35(factorial)
                                                           2    0.006    0.040  profilee.py:84(helper2_indirect)
profilee.py:48(mul)                               &lt;-      20    0.020    0.020  profilee.py:35(factorial)
profilee.py:55(helper)                            &lt;-       2    0.040    0.600  profilee.py:25(testfunc)
profilee.py:73(helper1)                           &lt;-       4    0.116    0.120  profilee.py:55(helper)
profilee.py:84(helper2_indirect)                  &lt;-       2    0.000    0.140  profilee.py:55(helper)
profilee.py:88(helper2)                           &lt;-       6    0.234    0.300  profilee.py:55(helper)
                                                           2    0.078    0.100  profilee.py:84(helper2_indirect)
profilee.py:98(subhelper)                         &lt;-       8    0.064    0.080  profilee.py:88(helper2)
{built-in method builtins.hasattr}                &lt;-       4    0.000    0.004  profilee.py:73(helper1)
                                                           8    0.000    0.008  profilee.py:88(helper2)
{built-in method sys.exc_info}                    &lt;-       4    0.000    0.000  profilee.py:73(helper1)
{method 'append' of 'list' objects}               &lt;-       4    0.000    0.000  profilee.py:73(helper1)"""
_ProfileOutput['print_callees'] = """\
&lt;string&gt;:1(&lt;module&gt;)                              -&gt;       1    0.270    1.000  profilee.py:25(testfunc)
profilee.py:110(__getattr__)                      -&gt;
profilee.py:25(testfunc)                          -&gt;       1    0.014    0.130  profilee.py:35(factorial)
                                                           2    0.040    0.600  profilee.py:55(helper)
profilee.py:35(factorial)                         -&gt;    20/3    0.130    0.147  profilee.py:35(factorial)
                                                          20    0.020    0.020  profilee.py:48(mul)
profilee.py:48(mul)                               -&gt;
profilee.py:55(helper)                            -&gt;       4    0.116    0.120  profilee.py:73(helper1)
                                                           2    0.000    0.140  profilee.py:84(helper2_indirect)
                                                           6    0.234    0.300  profilee.py:88(helper2)
profilee.py:73(helper1)                           -&gt;       4    0.000    0.004  {built-in method builtins.hasattr}
profilee.py:84(helper2_indirect)                  -&gt;       2    0.006    0.040  profilee.py:35(factorial)
                                                           2    0.078    0.100  profilee.py:88(helper2)
profilee.py:88(helper2)                           -&gt;       8    0.064    0.080  profilee.py:98(subhelper)
profilee.py:98(subhelper)                         -&gt;      16    0.016    0.016  profilee.py:110(__getattr__)
{built-in method builtins.hasattr}                -&gt;      12    0.012    0.012  profilee.py:110(__getattr__)"""

if __name__ == "__main__":
    main()
</pre></body></html>