From aa53e37fa255248c101f32dda876ad589bc68bb2 Mon Sep 17 00:00:00 2001 From: Allan Feldman Date: Wed, 21 Feb 2018 21:35:35 -0800 Subject: [PATCH] Add a test to expose leaked PseudoFixtureDef types. --- testing/python/fixture.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/testing/python/fixture.py b/testing/python/fixture.py index 6bcb1ab00..8638e361a 100644 --- a/testing/python/fixture.py +++ b/testing/python/fixture.py @@ -519,6 +519,41 @@ class TestRequestBasic(object): assert len(arg2fixturedefs) == 1 assert arg2fixturedefs['something'][0].argname == "something" + def test_request_garbage(self, testdir): + testdir.makepyfile(""" + import sys + import pytest + import gc + + @pytest.fixture(autouse=True) + def something(request): + # this method of test doesn't work on pypy + if hasattr(sys, "pypy_version_info"): + yield + else: + original = gc.get_debug() + gc.set_debug(gc.DEBUG_SAVEALL) + gc.collect() + + yield + + gc.collect() + leaked_types = sum(1 for _ in gc.garbage + if 'PseudoFixtureDef' in str(_)) + + gc.garbage[:] = [] + + try: + assert leaked_types == 0 + finally: + gc.set_debug(original) + + def test_func(): + pass + """) + reprec = testdir.inline_run() + reprec.assertoutcome(passed=1) + def test_getfixturevalue_recursive(self, testdir): testdir.makeconftest(""" import pytest