Use wrap to fix names of decorated test methods

Decorators not using wrap() prevent running the test from command line, e.g.
with:

    python tests/__init__.py test_module.TestSuite.test_method
This commit is contained in:
Daniele Varrazzo 2013-03-20 17:17:10 +00:00
parent 0c0e2a2455
commit 09629a6dbc
4 changed files with 41 additions and 23 deletions

View File

@ -25,14 +25,17 @@
import os
import shutil
import tempfile
from functools import wraps
import psycopg2
import psycopg2.extensions
from psycopg2.extensions import b
from testconfig import dsn, green
from testutils import unittest, decorate_all_tests, skip_if_tpc_disabled
from testutils import skip_if_green
def skip_if_no_lo(f):
@wraps(f)
def skip_if_no_lo_(self):
if self.conn.server_version < 80100:
return self.skipTest("large objects only supported from PG 8.1")
@ -41,14 +44,7 @@ def skip_if_no_lo(f):
return skip_if_no_lo_
def skip_if_green(f):
def skip_if_green_(self):
if green:
return self.skipTest("libpq doesn't support LO in async mode")
else:
return f(self)
return skip_if_green_
skip_lo_if_green = skip_if_green("libpq doesn't support LO in async mode")
class LargeObjectMixin(object):
@ -379,10 +375,11 @@ class LargeObjectTests(LargeObjectMixin, unittest.TestCase):
decorate_all_tests(LargeObjectTests, skip_if_no_lo)
decorate_all_tests(LargeObjectTests, skip_if_green)
decorate_all_tests(LargeObjectTests, skip_lo_if_green)
def skip_if_no_truncate(f):
@wraps(f)
def skip_if_no_truncate_(self):
if self.conn.server_version < 80300:
return self.skipTest(
@ -434,7 +431,7 @@ class LargeObjectTruncateTests(LargeObjectMixin, unittest.TestCase):
self.assertRaises(psycopg2.ProgrammingError, lo.truncate)
decorate_all_tests(LargeObjectTruncateTests, skip_if_no_lo)
decorate_all_tests(LargeObjectTruncateTests, skip_if_green)
decorate_all_tests(LargeObjectTruncateTests, skip_lo_if_green)
decorate_all_tests(LargeObjectTruncateTests, skip_if_no_truncate)

View File

@ -26,7 +26,9 @@ try:
import decimal
except:
pass
import sys
from functools import wraps
import testutils
from testutils import unittest, decorate_all_tests
from testconfig import dsn
@ -461,6 +463,7 @@ class ByteaParserTest(unittest.TestCase):
self.assertEqual(rv, tgt)
def skip_if_cant_cast(f):
@wraps(f)
def skip_if_cant_cast_(self, *args, **kwargs):
if self._cast is None:
return self.skipTest("can't test bytea parser: %s - %s"

View File

@ -18,6 +18,7 @@ import re
import sys
from decimal import Decimal
from datetime import date, datetime
from functools import wraps
from testutils import unittest, skip_if_no_uuid, skip_before_postgres
from testutils import decorate_all_tests
@ -124,6 +125,7 @@ class TypesExtrasTests(unittest.TestCase):
def skip_if_no_hstore(f):
@wraps(f)
def skip_if_no_hstore_(self):
from psycopg2.extras import HstoreAdapter
oids = HstoreAdapter.get_oids(self.conn)
@ -447,6 +449,7 @@ class HstoreTestCase(unittest.TestCase):
def skip_if_no_composite(f):
@wraps(f)
def skip_if_no_composite_(self):
if self.conn.server_version < 80000:
return self.skipTest(
@ -455,7 +458,6 @@ def skip_if_no_composite(f):
return f(self)
skip_if_no_composite_.__name__ = f.__name__
return skip_if_no_composite_
class AdaptTypeTestCase(unittest.TestCase):
@ -831,7 +833,8 @@ class AdaptTypeTestCase(unittest.TestCase):
def skip_if_json_module(f):
"""Skip a test if no Python json module is available"""
"""Skip a test if a Python json module *is* available"""
@wraps(f)
def skip_if_json_module_(self):
if psycopg2.extras.json is not None:
return self.skipTest("json module is available")
@ -842,6 +845,7 @@ def skip_if_json_module(f):
def skip_if_no_json_module(f):
"""Skip a test if no Python json module is available"""
@wraps(f)
def skip_if_no_json_module_(self):
if psycopg2.extras.json is None:
return self.skipTest("json module not available")
@ -852,6 +856,7 @@ def skip_if_no_json_module(f):
def skip_if_no_json_type(f):
"""Skip a test if PostgreSQL json type is not available"""
@wraps(f)
def skip_if_no_json_type_(self):
curs = self.conn.cursor()
curs.execute("select oid from pg_type where typname = 'json'")
@ -1242,6 +1247,7 @@ class RangeTestCase(unittest.TestCase):
def skip_if_no_range(f):
@wraps(f)
def skip_if_no_range_(self):
if self.conn.server_version < 90200:
return self.skipTest(
@ -1250,7 +1256,6 @@ def skip_if_no_range(f):
return f(self)
skip_if_no_range_.__name__ = f.__name__
return skip_if_no_range_

View File

@ -26,6 +26,7 @@
import os
import sys
from functools import wraps
try:
import unittest2
@ -43,6 +44,7 @@ else:
def skipIf(cond, msg):
def skipIf_(f):
@wraps(f)
def skipIf__(self):
if cond:
warnings.warn(msg)
@ -81,6 +83,7 @@ def decorate_all_tests(cls, decorator):
def skip_if_no_uuid(f):
"""Decorator to skip a test if uuid is not supported by Py/PG."""
@wraps(f)
def skip_if_no_uuid_(self):
try:
import uuid
@ -104,6 +107,7 @@ def skip_if_no_uuid(f):
def skip_if_tpc_disabled(f):
"""Skip a test if the server has tpc support disabled."""
@wraps(f)
def skip_if_tpc_disabled_(self):
from psycopg2 import ProgrammingError
cnn = self.connect()
@ -123,11 +127,11 @@ def skip_if_tpc_disabled(f):
"set max_prepared_transactions to > 0 to run the test")
return f(self)
skip_if_tpc_disabled_.__name__ = f.__name__
return skip_if_tpc_disabled_
def skip_if_no_namedtuple(f):
@wraps(f)
def skip_if_no_namedtuple_(self):
try:
from collections import namedtuple
@ -136,12 +140,12 @@ def skip_if_no_namedtuple(f):
else:
return f(self)
skip_if_no_namedtuple_.__name__ = f.__name__
return skip_if_no_namedtuple_
def skip_if_no_iobase(f):
"""Skip a test if io.TextIOBase is not available."""
@wraps(f)
def skip_if_no_iobase_(self):
try:
from io import TextIOBase
@ -157,6 +161,7 @@ def skip_before_postgres(*ver):
"""Skip a test on PostgreSQL before a certain version."""
ver = ver + (0,) * (3 - len(ver))
def skip_before_postgres_(f):
@wraps(f)
def skip_before_postgres__(self):
if self.conn.server_version < int("%d%02d%02d" % ver):
return self.skipTest("skipped because PostgreSQL %s"
@ -171,6 +176,7 @@ def skip_after_postgres(*ver):
"""Skip a test on PostgreSQL after (including) a certain version."""
ver = ver + (0,) * (3 - len(ver))
def skip_after_postgres_(f):
@wraps(f)
def skip_after_postgres__(self):
if self.conn.server_version >= int("%d%02d%02d" % ver):
return self.skipTest("skipped because PostgreSQL %s"
@ -184,6 +190,7 @@ def skip_after_postgres(*ver):
def skip_before_python(*ver):
"""Skip a test on Python before a certain version."""
def skip_before_python_(f):
@wraps(f)
def skip_before_python__(self):
if sys.version_info[:len(ver)] < ver:
return self.skipTest("skipped because Python %s"
@ -197,6 +204,7 @@ def skip_before_python(*ver):
def skip_from_python(*ver):
"""Skip a test on Python after (including) a certain version."""
def skip_from_python_(f):
@wraps(f)
def skip_from_python__(self):
if sys.version_info[:len(ver)] >= ver:
return self.skipTest("skipped because Python %s"
@ -209,6 +217,7 @@ def skip_from_python(*ver):
def skip_if_no_superuser(f):
"""Skip a test if the database user running the test is not a superuser"""
@wraps(f)
def skip_if_no_superuser_(self):
from psycopg2 import ProgrammingError
try:
@ -222,16 +231,20 @@ def skip_if_no_superuser(f):
return skip_if_no_superuser_
def skip_copy_if_green(f):
def skip_copy_if_green_(self):
from testconfig import green
if green:
return self.skipTest("copy in async mode currently not supported")
else:
return f(self)
def skip_if_green(reason):
def skip_if_green_(f):
@wraps(f)
def skip_if_green__(self):
from testconfig import green
if green:
return self.skipTest(reason)
else:
return f(self)
return skip_copy_if_green_
return skip_if_green__
return skip_if_green_
skip_copy_if_green = skip_if_green("copy in async mode currently not supported")
def script_to_py3(script):
"""Convert a script to Python3 syntax if required."""