[Zope-Checkins] SVN: Products.Five/branches/philikon-local-components/ Move test for the siteManagerAdapter out to Five.component (now a doctest in

Philipp von Weitershausen philikon at philikon.de
Sat Mar 4 19:22:39 EST 2006


Log message for revision 65809:
  Move test for the siteManagerAdapter out to Five.component (now a doctest in
  component.txt).
  Also clean up the test fixtures in test_localsite, based on the fact that ObjectManager
  is an IPossibleSite now.
  

Changed:
  A   Products.Five/branches/philikon-local-components/component/component.txt
  U   Products.Five/branches/philikon-local-components/component/tests.py
  U   Products.Five/branches/philikon-local-components/site/tests/test_localsite.py

-=-
Added: Products.Five/branches/philikon-local-components/component/component.txt
===================================================================
--- Products.Five/branches/philikon-local-components/component/component.txt	2006-03-05 00:19:55 UTC (rev 65808)
+++ Products.Five/branches/philikon-local-components/component/component.txt	2006-03-05 00:22:38 UTC (rev 65809)
@@ -0,0 +1,72 @@
+Local component look-up
+=======================
+
+``IComponentLookup`` adapter
+-----------------------------
+
+In order to do context-based component look-up, the Component
+Architecture adapts the context to ``IComponentLookup``.  Zope 3's
+default adapter uses the ``ILocation`` API to walk up the object tree
+and find a site that way.  Five provides its own adapter that also
+supports acquisitional parents.
+
+First, we register Five's adapter:
+
+  >>> import zope.component
+  >>> from Products.Five.component import siteManagerAdapter
+  >>> zope.component.provideAdapter(siteManagerAdapter)
+
+Now we create a site object with a stub component registry:
+
+  >>> from OFS.ObjectManager import ObjectManager
+  >>> from zope.interface import alsoProvides
+  >>> from zope.app.component.interfaces import ISite
+
+  >>> components = object()
+  >>> site = ObjectManager()
+  >>> site.setSiteManager(components)
+  >>> alsoProvides(site, ISite)
+
+When we adapt the site itself, we obviously get its component
+registry:
+
+  >>> from zope.component.interfaces import IComponentLookup
+  >>> IComponentLookup(site) is components
+  True
+ 
+In case the adapted object has an acquisition context, acquisition
+is used to retrieve the closest site:
+  
+  >>> ob = ObjectManager()
+  >>> ob2 = ObjectManager()
+  >>> ob = ob.__of__(site)
+  >>> ob2 = ob2.__of__(ob)
+  >>> IComponentLookup(ob2) is components
+  True
+
+The adapter also works using the ``ILocation`` API by inspecting the
+``__parent__`` object instead of using the acquisition parent:
+
+  >>> from zope.app.location import Location
+  >>> ob = Location()
+  >>> ob2 = Location()
+  >>> ob.__parent__ = site
+  >>> ob2.__parent__ = ob
+  >>> IComponentLookup(ob2) is components
+  True
+
+If it is unable to find a site and therefore a component registry, the
+global component registry is returned:
+
+  >>> from zope.component import getGlobalSiteManager
+  >>> orphan = ObjectManager()
+  >>> IComponentLookup(orphan) is getGlobalSiteManager()
+  True
+
+
+Clean up:
+---------
+
+#XXX somehow this makes the zpt.txt tests fail
+#  >>> from zope.component.testing import tearDown
+#  >>> tearDown()


Property changes on: Products.Five/branches/philikon-local-components/component/component.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: Products.Five/branches/philikon-local-components/component/tests.py
===================================================================
--- Products.Five/branches/philikon-local-components/component/tests.py	2006-03-05 00:19:55 UTC (rev 65808)
+++ Products.Five/branches/philikon-local-components/component/tests.py	2006-03-05 00:22:38 UTC (rev 65809)
@@ -22,6 +22,7 @@
 
 def test_suite():
     return unittest.TestSuite([
+        DocFileSuite('component.txt', package="Products.Five.component")        
         DocFileSuite('zpt.txt', package="Products.Five.component")        
         ])
 

Modified: Products.Five/branches/philikon-local-components/site/tests/test_localsite.py
===================================================================
--- Products.Five/branches/philikon-local-components/site/tests/test_localsite.py	2006-03-05 00:19:55 UTC (rev 65808)
+++ Products.Five/branches/philikon-local-components/site/tests/test_localsite.py	2006-03-05 00:22:38 UTC (rev 65809)
@@ -23,10 +23,9 @@
 import unittest
 from Testing import ZopeTestCase
 
-from zope.interface import implements
-from zope.interface import directlyProvides, directlyProvidedBy
+import zope.interface
 from zope.component import getGlobalSiteManager, getSiteManager
-from zope.component.exceptions import ComponentLookupError
+from zope.component.interfaces import ComponentLookupError
 from zope.component.interfaces import ISiteManager
 from zope.app.component.hooks import setSite, getSite, setHooks
 from zope.app.component.interfaces import IPossibleSite, ISite
@@ -40,33 +39,25 @@
 from Products.Five import zcml
 
 class SiteManager(Implicit):
-    implements(ISiteManager)
+    zope.interface.implements(ISiteManager)
 
 class Folder(ObjectManager):
-    implements(IPossibleSite)
 
-    sm = None
-
-    def getId(self):
-        return self.id
-
-    def getSiteManager(self, default=None):
-        return self.sm
-
     def setSiteManager(self, sm):
-        self.sm = sm
-        directlyProvides(self, ISite, directlyProvidedBy(self))
+        super(Folder, self).setSiteManager(sm)
+        zope.interface.alsoProvides(self, ISite)
 
 class Package(Implicit):
     pass
 
 class Root(Folder):
-    implements(IContainmentRoot, ISite)
+    zope.interface.implements(IContainmentRoot, ISite)
+
     def getSiteManager(self):
         return getGlobalSiteManager()
 
 class SiteManagerStub(object):
-    implements(ISiteManager)
+    zope.interface.implements(ISiteManager)
 
 class SiteManagerTest(PlacelessSetup, unittest.TestCase):
 
@@ -165,29 +156,6 @@
 #         # Check that getGlobalSiteManager() is not proxied
 #         self.assert_(getNextSiteManager(sm) is getGlobalSiteManager())
 
-    def test_siteManagerAdapter(self):
-        from Products.Five.site.localsite import siteManagerAdapter
-
-        # If it is a site, return the service service.
-        sm = SiteManagerStub()
-        site = Folder()
-        site.setSiteManager(sm)
-        self.assertEqual(siteManagerAdapter(site), sm)
-
-        # If it has an acquisition context, "acquire" the site
-        # and return the service service
-        ob = Folder()
-        ob = ob.__of__(site)
-        self.assertEqual(siteManagerAdapter(ob), sm)
-        ob2 = Folder()
-        ob2 = ob2.__of__(ob)
-        self.assertEqual(siteManagerAdapter(ob2), sm)
-
-        # If it does we are unable to find a service service, raise
-        # ComponentLookupError
-        orphan = Folder()
-        self.failUnless(siteManagerAdapter(orphan) is getGlobalSiteManager())
-
     def test_setThreadSite_clearThreadSite(self):
         from zope.app.component.site import threadSiteSubscriber, clearSite
         from zope.app.publication.zopepublication import BeforeTraverseEvent



More information about the Zope-Checkins mailing list