12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- from __future__ import absolute_import
-
- import sys
-
- from functools import wraps
- from io import StringIO
-
- import mock
-
- from nose import SkipTest # noqa
-
- try:
- import unittest
- unittest.skip
- except AttributeError:
- import unittest2 as unittest # noqa
-
- PY3 = sys.version_info[0] == 3
-
- 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):
- pass
-
- 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
|