Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

case.py 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. from __future__ import absolute_import
  2. import os
  3. import sys
  4. import types
  5. from functools import wraps
  6. try:
  7. from unittest import mock
  8. except ImportError:
  9. import mock # noqa
  10. from nose import SkipTest
  11. from kombu.five import builtins, string_t, StringIO
  12. from kombu.utils.encoding import ensure_bytes
  13. try:
  14. import unittest
  15. unittest.skip
  16. except AttributeError:
  17. import unittest2 as unittest # noqa
  18. PY3 = sys.version_info[0] == 3
  19. MagicMock = mock.MagicMock
  20. patch = mock.patch
  21. call = mock.call
  22. class Case(unittest.TestCase):
  23. def assertItemsEqual(self, a, b, *args, **kwargs):
  24. return self.assertEqual(sorted(a), sorted(b), *args, **kwargs)
  25. assertSameElements = assertItemsEqual
  26. class Mock(mock.Mock):
  27. def __init__(self, *args, **kwargs):
  28. attrs = kwargs.pop('attrs', None) or {}
  29. super(Mock, self).__init__(*args, **kwargs)
  30. for attr_name, attr_value in attrs.items():
  31. setattr(self, attr_name, attr_value)
  32. class _ContextMock(Mock):
  33. """Dummy class implementing __enter__ and __exit__
  34. as the with statement requires these to be implemented
  35. in the class, not just the instance."""
  36. def __enter__(self):
  37. return self
  38. def __exit__(self, *exc_info):
  39. pass
  40. def ContextMock(*args, **kwargs):
  41. obj = _ContextMock(*args, **kwargs)
  42. obj.attach_mock(Mock(), '__enter__')
  43. obj.attach_mock(Mock(), '__exit__')
  44. obj.__enter__.return_value = obj
  45. # if __exit__ return a value the exception is ignored,
  46. # so it must return None here.
  47. obj.__exit__.return_value = None
  48. return obj
  49. class MockPool(object):
  50. def __init__(self, value=None):
  51. self.value = value or ContextMock()
  52. def acquire(self, **kwargs):
  53. return self.value
  54. def redirect_stdouts(fun):
  55. @wraps(fun)
  56. def _inner(*args, **kwargs):
  57. sys.stdout = StringIO()
  58. sys.stderr = StringIO()
  59. try:
  60. return fun(*args, **dict(kwargs,
  61. stdout=sys.stdout, stderr=sys.stderr))
  62. finally:
  63. sys.stdout = sys.__stdout__
  64. sys.stderr = sys.__stderr__
  65. return _inner
  66. def module_exists(*modules):
  67. def _inner(fun):
  68. @wraps(fun)
  69. def __inner(*args, **kwargs):
  70. gen = []
  71. for module in modules:
  72. if isinstance(module, string_t):
  73. if not PY3:
  74. module = ensure_bytes(module)
  75. module = types.ModuleType(module)
  76. gen.append(module)
  77. sys.modules[module.__name__] = module
  78. name = module.__name__
  79. if '.' in name:
  80. parent, _, attr = name.rpartition('.')
  81. setattr(sys.modules[parent], attr, module)
  82. try:
  83. return fun(*args, **kwargs)
  84. finally:
  85. for module in gen:
  86. sys.modules.pop(module.__name__, None)
  87. return __inner
  88. return _inner
  89. # Taken from
  90. # http://bitbucket.org/runeh/snippets/src/tip/missing_modules.py
  91. def mask_modules(*modnames):
  92. def _inner(fun):
  93. @wraps(fun)
  94. def __inner(*args, **kwargs):
  95. realimport = builtins.__import__
  96. def myimp(name, *args, **kwargs):
  97. if name in modnames:
  98. raise ImportError('No module named %s' % name)
  99. else:
  100. return realimport(name, *args, **kwargs)
  101. builtins.__import__ = myimp
  102. try:
  103. return fun(*args, **kwargs)
  104. finally:
  105. builtins.__import__ = realimport
  106. return __inner
  107. return _inner
  108. def skip_if_environ(env_var_name):
  109. def _wrap_test(fun):
  110. @wraps(fun)
  111. def _skips_if_environ(*args, **kwargs):
  112. if os.environ.get(env_var_name):
  113. raise SkipTest('SKIP %s: %s set\n' % (
  114. fun.__name__, env_var_name))
  115. return fun(*args, **kwargs)
  116. return _skips_if_environ
  117. return _wrap_test
  118. def skip_if_module(module):
  119. def _wrap_test(fun):
  120. @wraps(fun)
  121. def _skip_if_module(*args, **kwargs):
  122. try:
  123. __import__(module)
  124. raise SkipTest('SKIP %s: %s available\n' % (
  125. fun.__name__, module))
  126. except ImportError:
  127. pass
  128. return fun(*args, **kwargs)
  129. return _skip_if_module
  130. return _wrap_test
  131. def skip_if_not_module(module, import_errors=(ImportError, )):
  132. def _wrap_test(fun):
  133. @wraps(fun)
  134. def _skip_if_not_module(*args, **kwargs):
  135. try:
  136. __import__(module)
  137. except import_errors:
  138. raise SkipTest('SKIP %s: %s available\n' % (
  139. fun.__name__, module))
  140. return fun(*args, **kwargs)
  141. return _skip_if_not_module
  142. return _wrap_test
  143. def skip_if_quick(fun):
  144. return skip_if_environ('QUICKTEST')(fun)
  145. def case_no_pypy(cls):
  146. setup = cls.setUp
  147. @wraps(setup)
  148. def around_setup(self):
  149. if getattr(sys, 'pypy_version_info', None):
  150. raise SkipTest('pypy incompatible')
  151. setup(self)
  152. cls.setUp = around_setup
  153. return cls
  154. def case_no_python3(cls):
  155. setup = cls.setUp
  156. @wraps(setup)
  157. def around_setup(self):
  158. if PY3:
  159. raise SkipTest('Python3 incompatible')
  160. setup(self)
  161. cls.setUp = around_setup
  162. return cls