[Checkins] SVN: zope.component/tseaver-test_cleanup/ Coverage.
Tres Seaver
cvs-admin at zope.org
Mon Jun 25 04:04:43 UTC 2012
Log message for revision 127062:
Coverage.
Add docstring for 'read_property' to explain why we don't use 'property'.
Use 'read_property' as a decorator (its intended use).
Changed:
_U zope.component/tseaver-test_cleanup/
U zope.component/tseaver-test_cleanup/src/zope/component/hooks.py
A zope.component/tseaver-test_cleanup/src/zope/component/tests/test_hooks.py
-=-
Modified: zope.component/tseaver-test_cleanup/src/zope/component/hooks.py
===================================================================
--- zope.component/tseaver-test_cleanup/src/zope/component/hooks.py 2012-06-25 04:04:34 UTC (rev 127061)
+++ zope.component/tseaver-test_cleanup/src/zope/component/hooks.py 2012-06-25 04:04:39 UTC (rev 127062)
@@ -21,13 +21,18 @@
try:
import zope.security.proxy
-except ImportError:
+except ImportError: #pragma NO COVER
SECURITY_SUPPORT = False
else:
SECURITY_SUPPORT = True
class read_property(object):
+ """Descriptor for property-like computed attributes.
+
+ Unlike the standard 'property', this descriptor allows assigning a
+ value to the instance, shadowing the property getter function.
+ """
def __init__(self, func):
self.func = func
@@ -41,13 +46,12 @@
site = None
sm = zope.component.getGlobalSiteManager()
+ @read_property
def adapter_hook(self):
adapter_hook = self.sm.adapters.adapter_hook
self.adapter_hook = adapter_hook
return adapter_hook
- adapter_hook = read_property(adapter_hook)
-
siteinfo = SiteInfo()
def setSite(site=None):
Added: zope.component/tseaver-test_cleanup/src/zope/component/tests/test_hooks.py
===================================================================
--- zope.component/tseaver-test_cleanup/src/zope/component/tests/test_hooks.py (rev 0)
+++ zope.component/tseaver-test_cleanup/src/zope/component/tests/test_hooks.py 2012-06-25 04:04:39 UTC (rev 127062)
@@ -0,0 +1,198 @@
+##############################################################################
+#
+# 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 Test_read_property(unittest.TestCase):
+
+ def _getTargetClass(self):
+ from zope.component.hooks import read_property
+ return read_property
+
+ def test_via_instance(self):
+ class Foo(object):
+ @self._getTargetClass()
+ def bar(self):
+ return 'BAR'
+ foo = Foo()
+ self.assertEqual(foo.bar, 'BAR')
+ foo.bar = 'BAZ'
+ self.assertEqual(foo.bar, 'BAZ')
+ del foo.bar
+ self.assertEqual(foo.bar, 'BAR')
+
+ def test_via_class(self):
+ class Foo(object):
+ @self._getTargetClass()
+ def bar(self):
+ return 'BAR'
+ bar = Foo.bar
+ self.assertTrue(isinstance(bar, self._getTargetClass()))
+ self.assertEqual(bar.func(object()), 'BAR')
+
+
+class SiteInfoTests(unittest.TestCase):
+
+ def _getTargetClass(self):
+ from zope.component.hooks import SiteInfo
+ return SiteInfo
+
+ def _makeOne(self):
+ return self._getTargetClass()()
+
+ def test_initial(self):
+ from zope.component.globalregistry import getGlobalSiteManager
+ gsm = getGlobalSiteManager()
+ si = self._makeOne()
+ self.assertEqual(si.site, None)
+ self.assertTrue(si.sm is gsm)
+
+ def test_adapter_hook(self):
+ _hook = object()
+ class _Registry(object):
+ adapter_hook = _hook
+ class _SiteManager(object):
+ adapters = _Registry()
+ si = self._makeOne()
+ si.sm = _SiteManager()
+ self.assertFalse('adapter_hook' in si.__dict__)
+ self.assertTrue(si.adapter_hook is _hook)
+ self.assertTrue('adapter_hook' in si.__dict__)
+ del si.adapter_hook
+ self.assertFalse('adapter_hook' in si.__dict__)
+
+
+class Test_setSite(unittest.TestCase):
+
+ def _callFUT(self, site):
+ from zope.component.hooks import setSite
+ return setSite(site)
+
+ def test_w_None(self):
+ from zope.component import hooks
+ from zope.component.globalregistry import getGlobalSiteManager
+ gsm = getGlobalSiteManager()
+ _SM2 = object()
+ _SITE = object()
+ _HOOK = object()
+ siteinfo = _DummySiteInfo()
+ siteinfo.sm = _SM2
+ siteinfo.site = _SITE
+ siteinfo.adapterhook = _HOOK
+ with _Monkey(hooks, siteinfo=siteinfo):
+ self._callFUT(None)
+ self.assertTrue(siteinfo.sm is gsm)
+ self.assertTrue(siteinfo.site is None)
+ self.assertFalse('adapter_hook' in siteinfo.__dict__)
+
+ def test_w_site(self):
+ from zope.component import hooks
+ _SM2 = object()
+ class _Site(object):
+ def getSiteManager(self):
+ return _SM2
+ siteinfo = _DummySiteInfo()
+ _site = _Site()
+ with _Monkey(hooks, siteinfo=siteinfo):
+ self._callFUT(_site)
+ self.assertTrue(siteinfo.sm is _SM2)
+ self.assertTrue(siteinfo.site is _site)
+ self.assertFalse('adapter_hook' in siteinfo.__dict__)
+
+
+class Test_getSite(unittest.TestCase):
+
+ def _callFUT(self):
+ from zope.component.hooks import getSite
+ return getSite()
+
+ def test_w_None(self):
+ from zope.component import hooks
+ from zope.component.globalregistry import getGlobalSiteManager
+ gsm = getGlobalSiteManager()
+ siteinfo = _DummySiteInfo()
+ with _Monkey(hooks, siteinfo=siteinfo):
+ self.assertTrue(self._callFUT() is None)
+
+ def test_w_site(self):
+ from zope.component import hooks
+ from zope.component.globalregistry import getGlobalSiteManager
+ gsm = getGlobalSiteManager()
+ _SM2 = object()
+ _SITE = object()
+ siteinfo = _DummySiteInfo()
+ siteinfo.sm = _SM2
+ siteinfo.site = _SITE
+ with _Monkey(hooks, siteinfo=siteinfo):
+ self.assertTrue(self._callFUT() is _SITE)
+
+
+class Test_site(unittest.TestCase):
+
+ def _callFUT(self, new_site):
+ from zope.component.hooks import site
+ return site(new_site)
+
+ def test_it(self):
+ from zope.component import hooks
+ from zope.component.globalregistry import getGlobalSiteManager
+ gsm = getGlobalSiteManager()
+ _SM2 = object()
+ class _Site(object):
+ def getSiteManager(self):
+ return _SM2
+ _site = _Site()
+ siteinfo = _DummySiteInfo()
+ self.assertTrue(siteinfo.site is None)
+ self.assertTrue(siteinfo.sm is _SM)
+ with _Monkey(hooks, siteinfo=siteinfo):
+ with self._callFUT(_site):
+ self.assertTrue(siteinfo.site is _site)
+ self.assertTrue(siteinfo.sm is _SM2)
+ self.assertTrue(siteinfo.site is None)
+ self.assertTrue(siteinfo.sm is gsm)
+
+
+_SM = object()
+class _DummySiteInfo(object):
+ sm = _SM
+ site = None
+
+class _Monkey(object):
+ # context-manager for replacing module names in the scope of a test.
+ def __init__(self, module, **kw):
+ self.module = module
+ self.to_restore = dict([(key, getattr(module, key)) for key in kw])
+ for key, value in kw.items():
+ setattr(module, key, value)
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ for key, value in self.to_restore.items():
+ setattr(self.module, key, value)
+
+
+def test_suite():
+ return unittest.TestSuite((
+ unittest.makeSuite(Test_read_property),
+ unittest.makeSuite(SiteInfoTests),
+ unittest.makeSuite(Test_setSite),
+ unittest.makeSuite(Test_getSite),
+ unittest.makeSuite(Test_site),
+ ))
+
More information about the checkins
mailing list