Skip tests on python implementations without getrefcount()

PyPy is one of these.
This commit is contained in:
Daniele Varrazzo 2013-05-06 10:39:24 +01:00
parent bbe0bf955c
commit a44db81d9b
3 changed files with 13 additions and 2 deletions

View File

@ -27,7 +27,7 @@ import psycopg2
import psycopg2.extensions import psycopg2.extensions
from psycopg2.extensions import b from psycopg2.extensions import b
from testutils import unittest, ConnectingTestCase, skip_before_postgres from testutils import unittest, ConnectingTestCase, skip_before_postgres
from testutils import skip_if_no_namedtuple from testutils import skip_if_no_namedtuple, skip_if_no_getrefcount
class CursorTests(ConnectingTestCase): class CursorTests(ConnectingTestCase):
@ -97,6 +97,7 @@ class CursorTests(ConnectingTestCase):
self.assertEqual(b('SELECT 10.3;'), self.assertEqual(b('SELECT 10.3;'),
cur.mogrify("SELECT %s;", (Decimal("10.3"),))) cur.mogrify("SELECT %s;", (Decimal("10.3"),)))
@skip_if_no_getrefcount
def test_mogrify_leak_on_multiple_reference(self): def test_mogrify_leak_on_multiple_reference(self):
# issue #81: reference leak when a parameter value is referenced # issue #81: reference leak when a parameter value is referenced
# more than once from a dict. # more than once from a dict.
@ -157,6 +158,7 @@ class CursorTests(ConnectingTestCase):
curs = self.conn.cursor() curs = self.conn.cursor()
w = ref(curs) w = ref(curs)
del curs del curs
import gc; gc.collect()
self.assert_(w() is None) self.assert_(w() is None)
def test_null_name(self): def test_null_name(self):

View File

@ -199,7 +199,7 @@ class ExceptionsTestCase(ConnectingTestCase):
self.assertEqual(diag.sqlstate, '42P01') self.assertEqual(diag.sqlstate, '42P01')
del diag del diag
gc.collect() gc.collect(); gc.collect()
assert(w() is None) assert(w() is None)
@skip_copy_if_green @skip_copy_if_green

View File

@ -293,6 +293,15 @@ def skip_if_green(reason):
skip_copy_if_green = skip_if_green("copy in async mode currently not supported") skip_copy_if_green = skip_if_green("copy in async mode currently not supported")
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): def script_to_py3(script):
"""Convert a script to Python3 syntax if required.""" """Convert a script to Python3 syntax if required."""
if sys.version_info[0] < 3: if sys.version_info[0] < 3: