PageRenderTime 39ms CodeModel.GetById 13ms RepoModel.GetById 1ms app.codeStats 0ms

/pyramid/tests/test_registry.py

https://gitlab.com/goolic/pyramid
Python | 378 lines | 332 code | 46 blank | 0 comment | 0 complexity | 5ad0737aabb4308fc92d3e91b096bce9 MD5 | raw file
  1. import unittest
  2. class TestRegistry(unittest.TestCase):
  3. def _getTargetClass(self):
  4. from pyramid.registry import Registry
  5. return Registry
  6. def _makeOne(self):
  7. return self._getTargetClass()()
  8. def test___nonzero__(self):
  9. registry = self._makeOne()
  10. self.assertEqual(registry.__nonzero__(), True)
  11. def test__lock(self):
  12. registry = self._makeOne()
  13. self.assertTrue(registry._lock)
  14. def test_clear_view_cache_lookup(self):
  15. registry = self._makeOne()
  16. registry._view_lookup_cache[1] = 2
  17. registry._clear_view_lookup_cache()
  18. self.assertEqual(registry._view_lookup_cache, {})
  19. def test_package_name(self):
  20. package_name = 'testing'
  21. registry = self._getTargetClass()(package_name)
  22. self.assertEqual(registry.package_name, package_name)
  23. def test_registerHandler_and_notify(self):
  24. registry = self._makeOne()
  25. self.assertEqual(registry.has_listeners, False)
  26. L = []
  27. def f(event):
  28. L.append(event)
  29. registry.registerHandler(f, [IDummyEvent])
  30. self.assertEqual(registry.has_listeners, True)
  31. event = DummyEvent()
  32. registry.notify(event)
  33. self.assertEqual(L, [event])
  34. def test_registerSubscriptionAdapter(self):
  35. registry = self._makeOne()
  36. self.assertEqual(registry.has_listeners, False)
  37. from zope.interface import Interface
  38. registry.registerSubscriptionAdapter(DummyEvent,
  39. [IDummyEvent], Interface)
  40. self.assertEqual(registry.has_listeners, True)
  41. def test__get_settings(self):
  42. registry = self._makeOne()
  43. registry._settings = 'foo'
  44. self.assertEqual(registry.settings, 'foo')
  45. def test__set_settings(self):
  46. registry = self._makeOne()
  47. registry.settings = 'foo'
  48. self.assertEqual(registry._settings, 'foo')
  49. class TestIntrospector(unittest.TestCase):
  50. def _getTargetClass(slf):
  51. from pyramid.registry import Introspector
  52. return Introspector
  53. def _makeOne(self):
  54. return self._getTargetClass()()
  55. def test_conformance(self):
  56. from zope.interface.verify import verifyClass
  57. from zope.interface.verify import verifyObject
  58. from pyramid.interfaces import IIntrospector
  59. verifyClass(IIntrospector, self._getTargetClass())
  60. verifyObject(IIntrospector, self._makeOne())
  61. def test_add(self):
  62. inst = self._makeOne()
  63. intr = DummyIntrospectable()
  64. inst.add(intr)
  65. self.assertEqual(intr.order, 0)
  66. category = {'discriminator':intr, 'discriminator_hash':intr}
  67. self.assertEqual(inst._categories, {'category':category})
  68. def test_get_success(self):
  69. inst = self._makeOne()
  70. intr = DummyIntrospectable()
  71. inst.add(intr)
  72. self.assertEqual(inst.get('category', 'discriminator'), intr)
  73. def test_get_success_byhash(self):
  74. inst = self._makeOne()
  75. intr = DummyIntrospectable()
  76. inst.add(intr)
  77. self.assertEqual(inst.get('category', 'discriminator_hash'), intr)
  78. def test_get_fail(self):
  79. inst = self._makeOne()
  80. intr = DummyIntrospectable()
  81. inst.add(intr)
  82. self.assertEqual(inst.get('category', 'wontexist', 'foo'), 'foo')
  83. def test_get_category(self):
  84. inst = self._makeOne()
  85. intr = DummyIntrospectable()
  86. intr2 = DummyIntrospectable()
  87. intr2.discriminator = 'discriminator2'
  88. intr2.discriminator_hash = 'discriminator2_hash'
  89. inst.add(intr2)
  90. inst.add(intr)
  91. expected = [
  92. {'introspectable':intr2, 'related':[]},
  93. {'introspectable':intr, 'related':[]},
  94. ]
  95. self.assertEqual(inst.get_category('category'), expected)
  96. def test_get_category_returns_default_on_miss(self):
  97. inst = self._makeOne()
  98. self.assertEqual(inst.get_category('category', '123'), '123')
  99. def test_get_category_with_sortkey(self):
  100. import operator
  101. inst = self._makeOne()
  102. intr = DummyIntrospectable()
  103. intr.foo = 2
  104. intr2 = DummyIntrospectable()
  105. intr2.discriminator = 'discriminator2'
  106. intr2.discriminator_hash = 'discriminator2_hash'
  107. intr2.foo = 1
  108. inst.add(intr)
  109. inst.add(intr2)
  110. expected = [
  111. {'introspectable':intr2, 'related':[]},
  112. {'introspectable':intr, 'related':[]},
  113. ]
  114. self.assertEqual(
  115. inst.get_category('category', sort_key=operator.attrgetter('foo')),
  116. expected)
  117. def test_categorized(self):
  118. import operator
  119. inst = self._makeOne()
  120. intr = DummyIntrospectable()
  121. intr.foo = 2
  122. intr2 = DummyIntrospectable()
  123. intr2.discriminator = 'discriminator2'
  124. intr2.discriminator_hash = 'discriminator2_hash'
  125. intr2.foo = 1
  126. inst.add(intr)
  127. inst.add(intr2)
  128. expected = [('category', [
  129. {'introspectable':intr2, 'related':[]},
  130. {'introspectable':intr, 'related':[]},
  131. ])]
  132. self.assertEqual(
  133. inst.categorized(sort_key=operator.attrgetter('foo')), expected)
  134. def test_categories(self):
  135. inst = self._makeOne()
  136. inst._categories['a'] = 1
  137. inst._categories['b'] = 2
  138. self.assertEqual(list(inst.categories()), ['a', 'b'])
  139. def test_remove(self):
  140. inst = self._makeOne()
  141. intr = DummyIntrospectable()
  142. intr2 = DummyIntrospectable()
  143. intr2.category_name = 'category2'
  144. intr2.discriminator = 'discriminator2'
  145. intr2.discriminator_hash = 'discriminator2_hash'
  146. inst.add(intr)
  147. inst.add(intr2)
  148. inst.relate(('category', 'discriminator'),
  149. ('category2', 'discriminator2'))
  150. inst.remove('category', 'discriminator')
  151. self.assertEqual(inst._categories,
  152. {'category':
  153. {},
  154. 'category2':
  155. {'discriminator2': intr2,
  156. 'discriminator2_hash': intr2}
  157. })
  158. self.assertEqual(inst._refs.get(intr), None)
  159. self.assertEqual(inst._refs[intr2], [])
  160. def test_remove_fail(self):
  161. inst = self._makeOne()
  162. self.assertEqual(inst.remove('a', 'b'), None)
  163. def test_relate(self):
  164. inst = self._makeOne()
  165. intr = DummyIntrospectable()
  166. intr2 = DummyIntrospectable()
  167. intr2.category_name = 'category2'
  168. intr2.discriminator = 'discriminator2'
  169. intr2.discriminator_hash = 'discriminator2_hash'
  170. inst.add(intr)
  171. inst.add(intr2)
  172. inst.relate(('category', 'discriminator'),
  173. ('category2', 'discriminator2'))
  174. self.assertEqual(inst._categories,
  175. {'category':
  176. {'discriminator':intr,
  177. 'discriminator_hash':intr},
  178. 'category2':
  179. {'discriminator2': intr2,
  180. 'discriminator2_hash': intr2}
  181. })
  182. self.assertEqual(inst._refs[intr], [intr2])
  183. self.assertEqual(inst._refs[intr2], [intr])
  184. def test_relate_fail(self):
  185. inst = self._makeOne()
  186. intr = DummyIntrospectable()
  187. inst.add(intr)
  188. self.assertRaises(
  189. KeyError,
  190. inst.relate,
  191. ('category', 'discriminator'),
  192. ('category2', 'discriminator2')
  193. )
  194. def test_unrelate(self):
  195. inst = self._makeOne()
  196. intr = DummyIntrospectable()
  197. intr2 = DummyIntrospectable()
  198. intr2.category_name = 'category2'
  199. intr2.discriminator = 'discriminator2'
  200. intr2.discriminator_hash = 'discriminator2_hash'
  201. inst.add(intr)
  202. inst.add(intr2)
  203. inst.relate(('category', 'discriminator'),
  204. ('category2', 'discriminator2'))
  205. inst.unrelate(('category', 'discriminator'),
  206. ('category2', 'discriminator2'))
  207. self.assertEqual(inst._categories,
  208. {'category':
  209. {'discriminator':intr,
  210. 'discriminator_hash':intr},
  211. 'category2':
  212. {'discriminator2': intr2,
  213. 'discriminator2_hash': intr2}
  214. })
  215. self.assertEqual(inst._refs[intr], [])
  216. self.assertEqual(inst._refs[intr2], [])
  217. def test_related(self):
  218. inst = self._makeOne()
  219. intr = DummyIntrospectable()
  220. intr2 = DummyIntrospectable()
  221. intr2.category_name = 'category2'
  222. intr2.discriminator = 'discriminator2'
  223. intr2.discriminator_hash = 'discriminator2_hash'
  224. inst.add(intr)
  225. inst.add(intr2)
  226. inst.relate(('category', 'discriminator'),
  227. ('category2', 'discriminator2'))
  228. self.assertEqual(inst.related(intr), [intr2])
  229. def test_related_fail(self):
  230. inst = self._makeOne()
  231. intr = DummyIntrospectable()
  232. intr2 = DummyIntrospectable()
  233. intr2.category_name = 'category2'
  234. intr2.discriminator = 'discriminator2'
  235. intr2.discriminator_hash = 'discriminator2_hash'
  236. inst.add(intr)
  237. inst.add(intr2)
  238. inst.relate(('category', 'discriminator'),
  239. ('category2', 'discriminator2'))
  240. del inst._categories['category']
  241. self.assertRaises(KeyError, inst.related, intr)
  242. class TestIntrospectable(unittest.TestCase):
  243. def _getTargetClass(slf):
  244. from pyramid.registry import Introspectable
  245. return Introspectable
  246. def _makeOne(self, *arg, **kw):
  247. return self._getTargetClass()(*arg, **kw)
  248. def _makeOnePopulated(self):
  249. return self._makeOne('category', 'discrim', 'title', 'type')
  250. def test_conformance(self):
  251. from zope.interface.verify import verifyClass
  252. from zope.interface.verify import verifyObject
  253. from pyramid.interfaces import IIntrospectable
  254. verifyClass(IIntrospectable, self._getTargetClass())
  255. verifyObject(IIntrospectable, self._makeOnePopulated())
  256. def test_relate(self):
  257. inst = self._makeOnePopulated()
  258. inst.relate('a', 'b')
  259. self.assertEqual(inst._relations, [(True, 'a', 'b')])
  260. def test_unrelate(self):
  261. inst = self._makeOnePopulated()
  262. inst.unrelate('a', 'b')
  263. self.assertEqual(inst._relations, [(False, 'a', 'b')])
  264. def test_discriminator_hash(self):
  265. inst = self._makeOnePopulated()
  266. self.assertEqual(inst.discriminator_hash, hash(inst.discriminator))
  267. def test___hash__(self):
  268. inst = self._makeOnePopulated()
  269. self.assertEqual(hash(inst),
  270. hash((inst.category_name,) + (inst.discriminator,)))
  271. def test___repr__(self):
  272. inst = self._makeOnePopulated()
  273. self.assertEqual(
  274. repr(inst),
  275. "<Introspectable category 'category', discriminator 'discrim'>")
  276. def test___nonzero__(self):
  277. inst = self._makeOnePopulated()
  278. self.assertEqual(inst.__nonzero__(), True)
  279. def test___bool__(self):
  280. inst = self._makeOnePopulated()
  281. self.assertEqual(inst.__bool__(), True)
  282. def test_register(self):
  283. introspector = DummyIntrospector()
  284. action_info = object()
  285. inst = self._makeOnePopulated()
  286. inst._relations.append((True, 'category1', 'discrim1'))
  287. inst._relations.append((False, 'category2', 'discrim2'))
  288. inst.register(introspector, action_info)
  289. self.assertEqual(inst.action_info, action_info)
  290. self.assertEqual(introspector.intrs, [inst])
  291. self.assertEqual(introspector.relations,
  292. [(('category', 'discrim'), ('category1', 'discrim1'))])
  293. self.assertEqual(introspector.unrelations,
  294. [(('category', 'discrim'), ('category2', 'discrim2'))])
  295. class DummyIntrospector(object):
  296. def __init__(self):
  297. self.intrs = []
  298. self.relations = []
  299. self.unrelations = []
  300. def add(self, intr):
  301. self.intrs.append(intr)
  302. def relate(self, *pairs):
  303. self.relations.append(pairs)
  304. def unrelate(self, *pairs):
  305. self.unrelations.append(pairs)
  306. class DummyModule:
  307. __path__ = "foo"
  308. __name__ = "dummy"
  309. __file__ = ''
  310. class DummyIntrospectable(object):
  311. category_name = 'category'
  312. discriminator = 'discriminator'
  313. title = 'title'
  314. type_name = 'type'
  315. order = None
  316. action_info = None
  317. discriminator_hash = 'discriminator_hash'
  318. def __hash__(self):
  319. return hash((self.category_name,) + (self.discriminator,))
  320. from zope.interface import Interface
  321. from zope.interface import implementer
  322. class IDummyEvent(Interface):
  323. pass
  324. @implementer(IDummyEvent)
  325. class DummyEvent(object):
  326. pass