mirror of
https://github.com/python/cpython.git
synced 2025-08-01 15:43:13 +00:00
Issue #5330: C functions called with keyword arguments were not reported by
the various profiling modules (profile, cProfile). Patch by Hagen Fürstenau.
This commit is contained in:
parent
2152ca390b
commit
46dbe27f7e
4 changed files with 40 additions and 2 deletions
|
@ -16,6 +16,7 @@ class ProfileTest(unittest.TestCase):
|
|||
profilerclass = profile.Profile
|
||||
methodnames = ['print_stats', 'print_callers', 'print_callees']
|
||||
expected_output = {}
|
||||
expected_list_sort_output = ':0(sort)'
|
||||
|
||||
@classmethod
|
||||
def do_profiling(cls):
|
||||
|
@ -40,6 +41,25 @@ class ProfileTest(unittest.TestCase):
|
|||
"Stats.%s output for %s doesn't fit expectation!" %
|
||||
(method, self.profilerclass.__name__))
|
||||
|
||||
def test_calling_conventions(self):
|
||||
# Issue #5330: profile and cProfile wouldn't report C functions called
|
||||
# with keyword arguments. We test all calling conventions.
|
||||
prof = self.profilerclass(timer, 0.001)
|
||||
stmts = [
|
||||
"[].sort()",
|
||||
"[].sort(reverse=True)",
|
||||
"[].sort(*(None, None, True))",
|
||||
"[].sort(**dict(reverse=True))",
|
||||
]
|
||||
for stmt in stmts:
|
||||
s = StringIO()
|
||||
prof.runctx(stmt, globals(), locals())
|
||||
stats = pstats.Stats(prof, stream=s)
|
||||
stats.print_stats()
|
||||
res = s.getvalue()
|
||||
self.assertTrue(self.expected_list_sort_output in res,
|
||||
"Profiling {0!r} didn't report list.sort:\n{1}".format(stmt, res))
|
||||
|
||||
|
||||
def regenerate_expected_output(filename, cls):
|
||||
filename = filename.rstrip('co')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue