[Checkins] SVN: zope.component/tseaver-test_cleanup/ Coverage for z.c.peristentregistry.PersistentAdapterRegistry.

Tres Seaver cvs-admin at zope.org
Wed Jun 27 15:44:02 UTC 2012


Log message for revision 127134:
  Coverage for z.c.peristentregistry.PersistentAdapterRegistry.

Changed:
  _U  zope.component/tseaver-test_cleanup/
  A   zope.component/tseaver-test_cleanup/src/zope/component/tests/test_persistentregistry.py

-=-
Added: zope.component/tseaver-test_cleanup/src/zope/component/tests/test_persistentregistry.py
===================================================================
--- zope.component/tseaver-test_cleanup/src/zope/component/tests/test_persistentregistry.py	                        (rev 0)
+++ zope.component/tseaver-test_cleanup/src/zope/component/tests/test_persistentregistry.py	2012-06-27 15:43:58 UTC (rev 127134)
@@ -0,0 +1,123 @@
+##############################################################################
+#
+# Copyright (c) 2012 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Tests for z.c.hooks
+"""
+import unittest
+
+
+class PersistentAdapterRegistryTests(unittest.TestCase):
+
+    def _getTargetClass(self):
+        from zope.component.persistentregistry import PersistentAdapterRegistry
+        return PersistentAdapterRegistry
+
+    def _makeOne(self, *args, **kw):
+        return self._getTargetClass()(*args, **kw)
+
+    def _makeCache(self, jar):
+        # Borrowed from persistent.tests.test_pyPersistence.
+
+        class _Cache(object):
+            def __init__(self, jar):
+                self._jar = jar
+                self._mru = []
+            def mru(self, oid):
+                self._mru.append(oid)
+            def new_ghost(self, oid, obj):
+                obj._p_jar = self._jar
+                obj._p_oid = oid
+
+        return _Cache(jar)
+
+    def _makeJar(self):
+        # Borrowed from persistent.tests.test_pyPersistence.
+        from zope.interface import implements
+        from persistent.interfaces import IPersistentDataManager
+
+        class _Jar(object):
+            implements(IPersistentDataManager)
+            def __init__(self):
+                self._loaded = []
+                self._registered = []
+            def setstate(self, obj):
+                self._loaded.append(obj._p_oid)
+            def register(self, obj):
+                self._registered.append(obj._p_oid)
+
+        jar = _Jar()
+        jar._cache = self._makeCache(jar)
+        return jar
+
+    def _makeOneWithJar(self, dirty=False):
+        # Borrowed from persistent.tests.test_pyPersistence.
+        OID = _makeOctets('\x01' * 8)
+        inst = self._makeOne()
+        jar = self._makeJar()
+        jar._cache.new_ghost(OID, inst) # assigns _p_jar, _p_oid
+        return inst, jar, OID
+
+    def test_changed_original_is_not_us(self):
+        registry, jar, OID = self._makeOneWithJar()
+        self.assertEqual(registry._generation, 1)
+        registry.changed(object())
+        # 'originally_changed' is not us, but we are still dirty because
+        # '_generation' gets bumped.
+        self.assertEqual(registry._p_changed, True)
+        # base class gets called
+        self.assertEqual(registry._generation, 2)
+
+    def test_changed_original_is_us(self):
+        registry, jar, OID = self._makeOneWithJar()
+        self.assertEqual(registry._generation, 1)
+        registry.changed(registry)
+        # 'originally_changed' is not us, so not dirty
+        self.assertEqual(registry._p_changed, True)
+        # base class gets called
+        self.assertEqual(registry._generation, 2)
+
+    def test___getstate___simple(self):
+        registry, jar, OID = self._makeOneWithJar()
+        state = registry.__getstate__()
+        self.assertEqual(state['__bases__'], ())
+        self.assertEqual(state['_generation'], 1)
+        self.assertEqual(state['_provided'], {})
+        self.assertEqual(state['_adapters'], [])
+        self.assertEqual(state['_subscribers'], [])
+        self.assertEqual(state['ro'], [registry])
+
+    def test___getstate___skips_delegated_names(self):
+        registry, jar, OID = self._makeOneWithJar()
+        registry.names = lambda *args: ['a', 'b', 'c']
+        self.assertFalse('names' in registry.__getstate__())
+
+    def test___setstate___rebuilds__v_lookup(self):
+        registry, jar, OID = self._makeOneWithJar()
+        state = registry.__getstate__()
+        self.assertTrue('_v_lookup' in registry.__dict__)
+        registry._p_changed = None # clears volatile '_v_lookup'
+        self.assertFalse('_v_lookup' in registry.__dict__)
+        registry.__setstate__(state)
+        self.assertTrue('_v_lookup' in registry.__dict__)
+
+
+def _makeOctets(s):
+    import sys
+    if sys.version_info < (3,):
+        return bytes(s)
+    return bytes(s, 'ascii') #pragma NO COVERAGE
+
+def test_suite():
+    return unittest.TestSuite((
+        unittest.makeSuite(PersistentAdapterRegistryTests),
+    ))



More information about the checkins mailing list