/pyramid/tests/test_util.py

https://bitbucket.org/lsun/pyramid · Python · 257 lines · 215 code · 40 blank · 2 comment · 2 complexity · f9d0cca45e0b89632a874cdf8a39b511 MD5 · raw file

  1. import unittest
  2. from pyramid.compat import PY3
  3. class Test_InstancePropertyMixin(unittest.TestCase):
  4. def _makeOne(self):
  5. cls = self._targetClass()
  6. class Foo(cls):
  7. pass
  8. return Foo()
  9. def _targetClass(self):
  10. from pyramid.util import InstancePropertyMixin
  11. return InstancePropertyMixin
  12. def test_callable(self):
  13. def worker(obj):
  14. return obj.bar
  15. foo = self._makeOne()
  16. foo.set_property(worker)
  17. foo.bar = 1
  18. self.assertEqual(1, foo.worker)
  19. foo.bar = 2
  20. self.assertEqual(2, foo.worker)
  21. def test_callable_with_name(self):
  22. def worker(obj):
  23. return obj.bar
  24. foo = self._makeOne()
  25. foo.set_property(worker, name='x')
  26. foo.bar = 1
  27. self.assertEqual(1, foo.x)
  28. foo.bar = 2
  29. self.assertEqual(2, foo.x)
  30. def test_callable_with_reify(self):
  31. def worker(obj):
  32. return obj.bar
  33. foo = self._makeOne()
  34. foo.set_property(worker, reify=True)
  35. foo.bar = 1
  36. self.assertEqual(1, foo.worker)
  37. foo.bar = 2
  38. self.assertEqual(1, foo.worker)
  39. def test_callable_with_name_reify(self):
  40. def worker(obj):
  41. return obj.bar
  42. foo = self._makeOne()
  43. foo.set_property(worker, name='x')
  44. foo.set_property(worker, name='y', reify=True)
  45. foo.bar = 1
  46. self.assertEqual(1, foo.y)
  47. self.assertEqual(1, foo.x)
  48. foo.bar = 2
  49. self.assertEqual(2, foo.x)
  50. self.assertEqual(1, foo.y)
  51. def test_property_without_name(self):
  52. def worker(obj): pass
  53. foo = self._makeOne()
  54. self.assertRaises(ValueError, foo.set_property, property(worker))
  55. def test_property_with_name(self):
  56. def worker(obj):
  57. return obj.bar
  58. foo = self._makeOne()
  59. foo.set_property(property(worker), name='x')
  60. foo.bar = 1
  61. self.assertEqual(1, foo.x)
  62. foo.bar = 2
  63. self.assertEqual(2, foo.x)
  64. def test_property_with_reify(self):
  65. def worker(obj): pass
  66. foo = self._makeOne()
  67. self.assertRaises(ValueError, foo.set_property,
  68. property(worker), name='x', reify=True)
  69. def test_override_property(self):
  70. def worker(obj): pass
  71. foo = self._makeOne()
  72. foo.set_property(worker, name='x')
  73. def doit():
  74. foo.x = 1
  75. self.assertRaises(AttributeError, doit)
  76. def test_override_reify(self):
  77. def worker(obj): pass
  78. foo = self._makeOne()
  79. foo.set_property(worker, name='x', reify=True)
  80. foo.x = 1
  81. self.assertEqual(1, foo.x)
  82. foo.x = 2
  83. self.assertEqual(2, foo.x)
  84. def test_reset_property(self):
  85. foo = self._makeOne()
  86. foo.set_property(lambda _: 1, name='x')
  87. self.assertEqual(1, foo.x)
  88. foo.set_property(lambda _: 2, name='x')
  89. self.assertEqual(2, foo.x)
  90. def test_reset_reify(self):
  91. """ This is questionable behavior, but may as well get notified
  92. if it changes."""
  93. foo = self._makeOne()
  94. foo.set_property(lambda _: 1, name='x', reify=True)
  95. self.assertEqual(1, foo.x)
  96. foo.set_property(lambda _: 2, name='x', reify=True)
  97. self.assertEqual(1, foo.x)
  98. class Test_WeakOrderedSet(unittest.TestCase):
  99. def _makeOne(self):
  100. from pyramid.config import WeakOrderedSet
  101. return WeakOrderedSet()
  102. def test_ctor(self):
  103. wos = self._makeOne()
  104. self.assertEqual(len(wos), 0)
  105. self.assertEqual(wos.last, None)
  106. def test_add_item(self):
  107. wos = self._makeOne()
  108. reg = Dummy()
  109. wos.add(reg)
  110. self.assertEqual(list(wos), [reg])
  111. self.assertTrue(reg in wos)
  112. self.assertEqual(wos.last, reg)
  113. def test_add_multiple_items(self):
  114. wos = self._makeOne()
  115. reg1 = Dummy()
  116. reg2 = Dummy()
  117. wos.add(reg1)
  118. wos.add(reg2)
  119. self.assertEqual(len(wos), 2)
  120. self.assertEqual(list(wos), [reg1, reg2])
  121. self.assertTrue(reg1 in wos)
  122. self.assertTrue(reg2 in wos)
  123. self.assertEqual(wos.last, reg2)
  124. def test_add_duplicate_items(self):
  125. wos = self._makeOne()
  126. reg = Dummy()
  127. wos.add(reg)
  128. wos.add(reg)
  129. self.assertEqual(len(wos), 1)
  130. self.assertEqual(list(wos), [reg])
  131. self.assertTrue(reg in wos)
  132. self.assertEqual(wos.last, reg)
  133. def test_weakref_removal(self):
  134. wos = self._makeOne()
  135. reg = Dummy()
  136. wos.add(reg)
  137. wos.remove(reg)
  138. self.assertEqual(len(wos), 0)
  139. self.assertEqual(list(wos), [])
  140. self.assertEqual(wos.last, None)
  141. def test_last_updated(self):
  142. wos = self._makeOne()
  143. reg = Dummy()
  144. reg2 = Dummy()
  145. wos.add(reg)
  146. wos.add(reg2)
  147. wos.remove(reg2)
  148. self.assertEqual(len(wos), 1)
  149. self.assertEqual(list(wos), [reg])
  150. self.assertEqual(wos.last, reg)
  151. def test_empty(self):
  152. wos = self._makeOne()
  153. reg = Dummy()
  154. reg2 = Dummy()
  155. wos.add(reg)
  156. wos.add(reg2)
  157. wos.empty()
  158. self.assertEqual(len(wos), 0)
  159. self.assertEqual(list(wos), [])
  160. self.assertEqual(wos.last, None)
  161. class Test_object_description(unittest.TestCase):
  162. def _callFUT(self, object):
  163. from pyramid.util import object_description
  164. return object_description(object)
  165. def test_string(self):
  166. self.assertEqual(self._callFUT('abc'), 'abc')
  167. def test_int(self):
  168. self.assertEqual(self._callFUT(1), '1')
  169. def test_bool(self):
  170. self.assertEqual(self._callFUT(True), 'True')
  171. def test_None(self):
  172. self.assertEqual(self._callFUT(None), 'None')
  173. def test_float(self):
  174. self.assertEqual(self._callFUT(1.2), '1.2')
  175. def test_tuple(self):
  176. self.assertEqual(self._callFUT(('a', 'b')), "('a', 'b')")
  177. def test_set(self):
  178. if PY3: # pragma: no cover
  179. self.assertEqual(self._callFUT(set(['a'])), "{'a'}")
  180. else: # pragma: no cover
  181. self.assertEqual(self._callFUT(set(['a'])), "set(['a'])")
  182. def test_list(self):
  183. self.assertEqual(self._callFUT(['a']), "['a']")
  184. def test_dict(self):
  185. self.assertEqual(self._callFUT({'a':1}), "{'a': 1}")
  186. def test_nomodule(self):
  187. o = object()
  188. self.assertEqual(self._callFUT(o), 'object %s' % str(o))
  189. def test_module(self):
  190. import pyramid
  191. self.assertEqual(self._callFUT(pyramid), 'module pyramid')
  192. def test_method(self):
  193. self.assertEqual(
  194. self._callFUT(self.test_method),
  195. 'method test_method of class pyramid.tests.test_util.'
  196. 'Test_object_description')
  197. def test_class(self):
  198. self.assertEqual(
  199. self._callFUT(self.__class__),
  200. 'class pyramid.tests.test_util.Test_object_description')
  201. def test_function(self):
  202. self.assertEqual(
  203. self._callFUT(dummyfunc),
  204. 'function pyramid.tests.test_util.dummyfunc')
  205. def test_instance(self):
  206. inst = Dummy()
  207. self.assertEqual(
  208. self._callFUT(inst),
  209. "object %s" % str(inst))
  210. def test_shortened_repr(self):
  211. inst = ['1'] * 1000
  212. self.assertEqual(
  213. self._callFUT(inst),
  214. str(inst)[:100] + ' ... ]')
  215. def dummyfunc(): pass
  216. class Dummy(object):
  217. pass