diff --git a/tests/test_cursor.py b/tests/test_cursor.py index b1c5c5c3..b2c32b8a 100755 --- a/tests/test_cursor.py +++ b/tests/test_cursor.py @@ -26,8 +26,8 @@ import time import psycopg2 import psycopg2.extensions from psycopg2.extensions import b -from testconfig import dsn -from testutils import unittest, skip_before_postgres, skip_if_no_namedtuple +from testconfig import dsn, unittest, skip_before_postgres +from testutils import skip_if_no_namedtuple, skip_if_no_getrefcount class CursorTests(unittest.TestCase): @@ -103,6 +103,7 @@ class CursorTests(unittest.TestCase): self.assertEqual(b('SELECT 10.3;'), cur.mogrify("SELECT %s;", (Decimal("10.3"),))) + @skip_if_no_getrefcount def test_mogrify_leak_on_multiple_reference(self): # issue #81: reference leak when a parameter value is referenced # more than once from a dict. @@ -163,6 +164,7 @@ class CursorTests(unittest.TestCase): curs = self.conn.cursor() w = ref(curs) del curs + import gc; gc.collect() self.assert_(w() is None) def test_null_name(self): diff --git a/tests/testutils.py b/tests/testutils.py index 068a9138..c899c051 100644 --- a/tests/testutils.py +++ b/tests/testutils.py @@ -223,6 +223,15 @@ def skip_if_no_superuser(f): return skip_if_no_superuser_ +def skip_if_no_getrefcount(f): + @wraps(f) + def skip_if_no_getrefcount_(self): + if not hasattr(sys, 'getrefcount'): + return self.skipTest('skipped, no sys.getrefcount()') + else: + return f(self) + return skip_if_no_getrefcount_ + def script_to_py3(script): """Convert a script to Python3 syntax if required.""" if sys.version_info[0] < 3: