[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/tests - testServiceDirective.py:1.1 testServiceManager.py:1.3
Jim Fulton
jim@zope.com
Thu, 11 Jul 2002 14:22:04 -0400
Update of /cvs-repository/Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/tests
In directory cvs.zope.org:/tmp/cvs-serv7355/lib/python/Zope/App/OFS/Services/ServiceManager/tests
Modified Files:
testServiceManager.py
Added Files:
testServiceDirective.py
Log Message:
Reimplemented service managers to be package based. Service managers
are no longer containers. They have a packages subobject (not a
packages service) that contains packages. TTW components are created
in packages. To register a component, create the appropriate component
directive objects (these should be called configuration objects).
This should be viewed as a prototype to illustrate the idea of
packages. Lots of things can change (especially UI) and many things
aren't done (e.g. visiting created directives).
In the course of this, I fixed a bunch of bugs and problems in
traversal machinery.
I also renamed Zope.ComponentArchitecture.IServiceManager back to
IServiceService, since this interface doesn't actually specify any
management.
=== Added File Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/tests/testServiceDirective.py ===
##############################################################################
#
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (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.
#
##############################################################################
"""XXX short summary goes here.
XXX longer description goes here.
$Id: testServiceDirective.py,v 1.1 2002/07/11 18:21:33 jim Exp $
"""
from unittest import TestCase, TestSuite, main, makeSuite
from Zope.ComponentArchitecture import getService
from Zope.Proxy.ContextWrapper import ContextWrapper
from Zope.Security.Proxy import Proxy, getChecker
from Zope.App.Traversing.ITraversable import ITraversable
from Interface import Interface
from Zope.App.OFS.Services.ServiceManager.ServiceDirective \
import ServiceDirective
from Zope.ComponentArchitecture.tests.PlacelessSetup import PlacelessSetup
from Zope.App.Traversing.IPhysicallyLocatable import IPhysicallyLocatable
from Zope.App.Traversing.IContainmentRoot import IContainmentRoot
from Zope.App.Traversing.PhysicalLocationAdapters \
import WrapperPhysicallyLocatable, RootPhysicallyLocatable
class IFoo(Interface):
def f1(): pass
def f2(): pass
class ServiceManager:
__implements__ = ITraversable, IContainmentRoot
def getInterfaceFor(self, name):
return IFoo
def traverse(self, name, *ignored):
return getattr(self, name)
class Comp:
__implements__ = IFoo
def f1(self): return 1
def f2(self): return 2
def f3(self): return 3
class Test(PlacelessSetup, TestCase):
def setUp(self):
PlacelessSetup.setUp(self)
adapterService=getService(None, "Adapters")
adapterService.provideAdapter(
None, IPhysicallyLocatable, WrapperPhysicallyLocatable)
adapterService.provideAdapter(
IContainmentRoot, IPhysicallyLocatable, RootPhysicallyLocatable)
def test_getService(self):
sm = ServiceManager()
sm.C = Comp()
dir = ServiceDirective('Foo', '/C', 'ppp')
service = dir.getService(sm)
self.assertEqual(type(service), Proxy)
self.assertEqual(service.__class__, Comp)
checker = getChecker(service)
self.assertEqual(checker.permission_id('f1'), 'ppp')
self.assertEqual(checker.permission_id('f2'), 'ppp')
self.assertEqual(checker.permission_id('f3'), None)
def test_suite():
return TestSuite((
makeSuite(Test),
))
if __name__=='__main__':
main(defaultTest='test_suite')
=== Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/tests/testServiceManager.py 1.2 => 1.3 ===
$Id$
"""
from unittest import TestCase, TestLoader, TextTestRunner
-from Zope.App.OFS.Container.tests.testIContainer import BaseTestIContainer
from Interface import Interface
from Zope.App.OFS.Content.Folder.RootFolder import RootFolder
from Zope.App.OFS.Content.Folder.Folder import Folder
-from Zope.Proxy.ContextWrapper import getWrapperContext
+from Zope.Proxy.ContextWrapper import getWrapperContext, getWrapperContainer
from Zope.App.OFS.Services.ServiceManager.ServiceManager import ServiceManager
+from Zope.App.OFS.Services.ServiceManager.ServiceDirective \
+ import ServiceDirective
from Zope.ComponentArchitecture import getService, getServiceManager
from Zope.Exceptions import ZopeError
from PlacefulSetup import PlacefulSetup
+from Zope.App.Traversing.IPhysicallyLocatable import IPhysicallyLocatable
+from Zope.App.Traversing.IContainmentRoot import IContainmentRoot
+from Zope.App.Traversing.PhysicalLocationAdapters \
+ import WrapperPhysicallyLocatable, RootPhysicallyLocatable
+
class ITestService(Interface): pass
class TestService:
__implements__ = ITestService
-class ServiceManagerTests(PlacefulSetup, BaseTestIContainer, TestCase):
+class ServiceManagerTests(PlacefulSetup, TestCase):
def setUp(self):
PlacefulSetup.setUp(self)
self.buildFolders()
+ from Zope.ComponentArchitecture.GlobalAdapterService \
+ import provideAdapter
+ from Zope.App.OFS.Services.ServiceManager.IServiceManager \
+ import IServiceManager
+ from Zope.App.Traversing.ITraversable import ITraversable
+ from Zope.App.OFS.Container.IContainer import ISimpleReadContainer
+ from Zope.App.OFS.Container.ContainerTraversable \
+ import ContainerTraversable
+
+ provideAdapter(ISimpleReadContainer, ITraversable,
+ ContainerTraversable)
+ provideAdapter(
+ None, IPhysicallyLocatable, WrapperPhysicallyLocatable)
+ provideAdapter(
+ IContainmentRoot, IPhysicallyLocatable, RootPhysicallyLocatable)
+
+ from Zope.ComponentArchitecture.GlobalServiceManager \
+ import serviceManager
+
+ serviceManager.defineService('test_service', ITestService)
def _Test__new(self):
return ServiceManager()
- def testAddService(self):
+ def testGetService(self):
sm = ServiceManager()
self.rootFolder.setServiceManager(sm)
- sm=getServiceManager(self.rootFolder)
+ sm = getServiceManager(self.rootFolder)
ts = TestService()
- sm.setObject('test_service1', ts)
- self.assertEqual(sm['test_service1'], ts)
+ sm.Packages['default'].setObject('test_service1', ts)
+ directive = ServiceDirective(
+ 'test_service',
+ '/++etc++Services/Packages/default/test_service1')
+ sm.Packages['default'].setObject('test_service1_dir', directive)
+ sm.bindService(directive)
+
+ testOb = getService(self.rootFolder, 'test_service')
+ c = getWrapperContainer
+ self.assertEqual(c(c(c(c(testOb)))), self.rootFolder)
+ self.assertEqual(testOb, ts)
- def testGetService(self):
+ def testAddService(self):
sm = ServiceManager()
self.rootFolder.setServiceManager(sm)
- sm=getServiceManager(self.rootFolder)
+ sm = getServiceManager(self.rootFolder)
ts = TestService()
- sm.setObject('test_service1', ts)
- sm.bindService('test_service', 'test_service1')
- testOb=getService(self.rootFolder, 'test_service')
- self.assertEqual(getWrapperContext
- (getWrapperContext(testOb)),self.rootFolder)
+ sm.Packages['default'].setObject('test_service1', ts)
+ directive = ServiceDirective(
+ 'test_service',
+ '/++etc++Services/Packages/default/test_service1')
+ sm.Packages['default'].setObject('test_service1_dir', directive)
+ sm.bindService(directive)
+
+ ts2 = TestService()
+ sm.Packages['default'].setObject('test_service2', ts)
+ directive = ServiceDirective(
+ 'test_service',
+ '/++etc++Services/Packages/default/test_service2')
+ sm.Packages['default'].setObject('test_service2_dir', directive)
+ sm.bindService(directive)
+
+ testOb = getService(self.rootFolder, 'test_service')
self.assertEqual(testOb, ts)
+
def testUnbindService(self):
- sm = ServiceManager()
- self.rootFolder.setServiceManager(sm)
- sm=getServiceManager(self.rootFolder)
- ts = TestService()
+
root_ts = TestService()
- gsm=getServiceManager(None)
- gsm.defineService('test_service', ITestService)
+ gsm = getServiceManager(None)
gsm.provideService('test_service', root_ts)
- sm.setObject('test_service1', ts)
- sm.bindService('test_service', 'test_service1')
- self.assertEqual(getService(self.rootFolder, 'test_service'), ts)
- sm.unbindService('test_service')
+ self.testGetService() # set up localservice
+
+ sm = getServiceManager(self.rootFolder)
+
+ directive = sm.Packages['default']['test_service1_dir']
+ sm.unbindService(directive)
self.assertEqual(getService(self.rootFolder, 'test_service'), root_ts)
- def testDeleteService(self):
+ # XXX This should be a test on the adapter responsible for deleting.
+ def __testDeleteService(self):
+ """sure deleting a service generates a service generates a
+ removed event."""
self.rootFolder.setServiceManager(ServiceManager())
sm=getServiceManager(self.rootFolder)
ts = TestService()
@@ -90,36 +138,28 @@
self.assertRaises(ZopeError, sm.__delitem__, 'test_service1')
def testContextServiceLookup(self):
- self.rootFolder.setServiceManager(ServiceManager())
+ self.testGetService() # set up localservice
sm=getServiceManager(self.rootFolder)
- ts = TestService()
- sm.setObject('test_service1', ts)
- sm.bindService('test_service', 'test_service1')
- self.assertEqual(getService(self.folder1, 'test_service'), ts)
- self.assertEqual(getService(self.folder1_1, 'test_service'), ts)
+ self.assertEqual(getService(self.folder1_1, 'test_service'),
+ sm.Packages['default']['test_service1'])
def testContextServiceLookupWithMultipleServiceManagers(self):
- self.rootFolder.setServiceManager(ServiceManager())
+ self.testGetService() # set up root localservice
sm=getServiceManager(self.rootFolder)
- ts = TestService()
- sm.setObject('test_service1', ts)
- sm.bindService('test_service', 'test_service1')
self.folder1.setServiceManager(ServiceManager())
sm2=getServiceManager(self.folder1)
- self.assertEqual(getService(self.folder1, 'test_service'), ts)
+ self.assertEqual(getService(self.folder1, 'test_service'),
+ sm.Packages['default']['test_service1'])
def testComponentArchitectureServiceLookup(self):
self.rootFolder.setServiceManager(ServiceManager())
- sm=getServiceManager(self.rootFolder)
self.folder1.setServiceManager(ServiceManager())
- sm2=getServiceManager(self.folder1)
ts = TestService()
globsm=getServiceManager(None)
- globsm.defineService('test_service', ITestService)
globsm.provideService('test_service', ts)
service = getService(self.folder1, 'test_service')