|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- from __future__ import absolute_import
-
- import os
- import sys
- import types
-
- from functools import wraps
-
- try:
- from unittest import mock
- except ImportError:
- import mock # noqa
-
- from nose import SkipTest
-
- from kombu.five import builtins, string_t, StringIO
- from kombu.utils.encoding import ensure_bytes
-
- try:
- import unittest
- unittest.skip
- except AttributeError:
- import unittest2 as unittest # noqa
-
- PY3 = sys.version_info[0] == 3
-
- MagicMock = mock.MagicMock
- patch = mock.patch
- call = mock.call
-
-
- class Case(unittest.TestCase):
-
- def assertItemsEqual(self, a, b, *args, **kwargs):
- return self.assertEqual(sorted(a), sorted(b), *args, **kwargs)
- assertSameElements = assertItemsEqual
-
-
- class Mock(mock.Mock):
-
- def __init__(self, *args, **kwargs):
- attrs = kwargs.pop('attrs', None) or {}
- super(Mock, self).__init__(*args, **kwargs)
- for attr_name, attr_value in attrs.items():
- setattr(self, attr_name, attr_value)
-
-
- class _ContextMock(Mock):
- """Dummy class implementing __enter__ and __exit__
- as the with statement requires these to be implemented
- in the class, not just the instance."""
-
- def __enter__(self):
- return self
-
- def __exit__(self, *exc_info):
- pass
-
-
- def ContextMock(*args, **kwargs):
- obj = _ContextMock(*args, **kwargs)
- obj.attach_mock(Mock(), '__enter__')
- obj.attach_mock(Mock(), '__exit__')
- obj.__enter__.return_value = obj
- # if __exit__ return a value the exception is ignored,
- # so it must return None here.
- obj.__exit__.return_value = None
- return obj
-
-
- class MockPool(object):
-
- def __init__(self, value=None):
- self.value = value or ContextMock()
-
- def acquire(self, **kwargs):
- return self.value
-
-
- def redirect_stdouts(fun):
-
- @wraps(fun)
- def _inner(*args, **kwargs):
- sys.stdout = StringIO()
- sys.stderr = StringIO()
- try:
- return fun(*args, **dict(kwargs,
- stdout=sys.stdout, stderr=sys.stderr))
- finally:
- sys.stdout = sys.__stdout__
- sys.stderr = sys.__stderr__
-
- return _inner
-
-
- def module_exists(*modules):
-
- def _inner(fun):
-
- @wraps(fun)
- def __inner(*args, **kwargs):
- gen = []
- for module in modules:
- if isinstance(module, string_t):
- if not PY3:
- module = ensure_bytes(module)
- module = types.ModuleType(module)
- gen.append(module)
- sys.modules[module.__name__] = module
- name = module.__name__
- if '.' in name:
- parent, _, attr = name.rpartition('.')
- setattr(sys.modules[parent], attr, module)
- try:
- return fun(*args, **kwargs)
- finally:
- for module in gen:
- sys.modules.pop(module.__name__, None)
-
- return __inner
- return _inner
-
-
- # Taken from
- # http://bitbucket.org/runeh/snippets/src/tip/missing_modules.py
- def mask_modules(*modnames):
- def _inner(fun):
-
- @wraps(fun)
- def __inner(*args, **kwargs):
- realimport = builtins.__import__
-
- def myimp(name, *args, **kwargs):
- if name in modnames:
- raise ImportError('No module named %s' % name)
- else:
- return realimport(name, *args, **kwargs)
-
- builtins.__import__ = myimp
- try:
- return fun(*args, **kwargs)
- finally:
- builtins.__import__ = realimport
-
- return __inner
- return _inner
-
-
- def skip_if_environ(env_var_name):
-
- def _wrap_test(fun):
-
- @wraps(fun)
- def _skips_if_environ(*args, **kwargs):
- if os.environ.get(env_var_name):
- raise SkipTest('SKIP %s: %s set\n' % (
- fun.__name__, env_var_name))
- return fun(*args, **kwargs)
-
- return _skips_if_environ
-
- return _wrap_test
-
-
- def skip_if_module(module):
- def _wrap_test(fun):
- @wraps(fun)
- def _skip_if_module(*args, **kwargs):
- try:
- __import__(module)
- raise SkipTest('SKIP %s: %s available\n' % (
- fun.__name__, module))
- except ImportError:
- pass
- return fun(*args, **kwargs)
- return _skip_if_module
- return _wrap_test
-
-
- def skip_if_not_module(module, import_errors=(ImportError, )):
- def _wrap_test(fun):
- @wraps(fun)
- def _skip_if_not_module(*args, **kwargs):
- try:
- __import__(module)
- except import_errors:
- raise SkipTest('SKIP %s: %s available\n' % (
- fun.__name__, module))
- return fun(*args, **kwargs)
- return _skip_if_not_module
- return _wrap_test
-
-
- def skip_if_quick(fun):
- return skip_if_environ('QUICKTEST')(fun)
-
-
- def case_no_pypy(cls):
- setup = cls.setUp
-
- @wraps(setup)
- def around_setup(self):
- if getattr(sys, 'pypy_version_info', None):
- raise SkipTest('pypy incompatible')
- setup(self)
- cls.setUp = around_setup
- return cls
-
-
- def case_no_python3(cls):
- setup = cls.setUp
-
- @wraps(setup)
- def around_setup(self):
- if PY3:
- raise SkipTest('Python3 incompatible')
- setup(self)
- cls.setUp = around_setup
- return cls
|