[Zope-Checkins] CVS: Zope3/lib/python/Zope/ComponentArchitecture/tests - PlacelessSetup.py:1.2 Request.py:1.2 TestComponents.py:1.2 TestFactory.py:1.2 TestViews.py:1.2 __init__.py:1.2 testAPI.py:1.2 testIToIRegistry.py:1.2 testProvideFactory.py:1.2 testResources.py:1.2 testService.py:1.2 testServiceManagerContainer.py:1.2 testSkins.py:1.2 testTypeRegistry.py:1.2 testViewDefinitions.py:1.2
Jim Fulton
jim@zope.com
Mon, 10 Jun 2002 19:29:56 -0400
Update of /cvs-repository/Zope3/lib/python/Zope/ComponentArchitecture/tests
In directory cvs.zope.org:/tmp/cvs-serv20468/lib/python/Zope/ComponentArchitecture/tests
Added Files:
PlacelessSetup.py Request.py TestComponents.py TestFactory.py
TestViews.py __init__.py testAPI.py testIToIRegistry.py
testProvideFactory.py testResources.py testService.py
testServiceManagerContainer.py testSkins.py
testTypeRegistry.py testViewDefinitions.py
Log Message:
Merged Zope-3x-branch into newly forked Zope3 CVS Tree.
=== Zope3/lib/python/Zope/ComponentArchitecture/tests/PlacelessSetup.py 1.1 => 1.2 ===
+#
+# 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.
+#
+##############################################################################
+"""
+
+Revision information:
+$Id$
+"""
+
+# A mix-in class inheriting from CleanUp that also connects the CA services
+
+from Zope.Testing.CleanUp import CleanUp
+from Zope.ComponentArchitecture import getServiceManager
+
+class PlacelessSetup(CleanUp):
+ def setUp(self):
+ CleanUp.setUp(self)
+ sm=getServiceManager(None)
+ defineService=sm.defineService
+ provideService=sm.provideService
+ # factory service
+ from Zope.ComponentArchitecture.IFactoryService import IFactoryService
+ defineService('Factories',IFactoryService)
+ from Zope.ComponentArchitecture.GlobalFactoryService import\
+ factoryService
+ provideService('Factories', factoryService)
+ # utility service
+ from Zope.ComponentArchitecture.IUtilityService import IUtilityService
+ defineService('Utilities',IUtilityService)
+ from Zope.ComponentArchitecture.GlobalUtilityService import\
+ utilityService
+ provideService('Utilities', utilityService)
+ # adapter service
+ from Zope.ComponentArchitecture.IAdapterService import IAdapterService
+ defineService('Adapters',IAdapterService)
+ from Zope.ComponentArchitecture.GlobalAdapterService import\
+ adapterService
+ provideService('Adapters', adapterService)
+ # resource service
+ from Zope.ComponentArchitecture.IResourceService import IResourceService
+ defineService('Resources',IResourceService)
+ from Zope.ComponentArchitecture.GlobalResourceService import\
+ resourceService
+ provideService('Resources', resourceService)
+ # skin service
+ from Zope.ComponentArchitecture.ISkinService import ISkinService
+ defineService('Skins',ISkinService)
+ from Zope.ComponentArchitecture.GlobalSkinService import\
+ skinService
+ provideService('Skins', skinService)
+ # view service
+ from Zope.ComponentArchitecture.IViewService import IViewService
+ defineService('Views',IViewService)
+ from Zope.ComponentArchitecture.GlobalViewService import\
+ viewService
+ provideService('Views', viewService)
+ def tearDown(self):
+ CleanUp.tearDown(self)
\ No newline at end of file
=== Zope3/lib/python/Zope/ComponentArchitecture/tests/Request.py 1.1 => 1.2 ===
+#
+# 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.
+#
+##############################################################################
+"""
+
+$Id$
+"""
+
+class Request:
+
+ def __init__(self, iface, skin='default'):
+ self._iface = iface
+ self._skin = skin
+
+ # Implementation methods for interface
+ # Zope.ComponentArchitecture.IPresentationService.IPresentationRequest
+
+ def getPresentationSkin(self):
+ '''See interface IPresentationRequest'''
+
+ return self._skin
+
+ def getPresentationType(self):
+ '''See interface IPresentationRequest'''
+
+ return self._iface
+
=== Zope3/lib/python/Zope/ComponentArchitecture/tests/TestComponents.py 1.1 => 1.2 ===
+#
+# Copyright (c) 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.
+#
+##############################################################################
+"""
+
+$Id$
+"""
+__metaclass__ = type # All classes are new style when run with Python 2.2+
+
+from Interface import Interface
+from Interface.Attribute import Attribute
+
+class IApp(Interface):
+ a = Attribute('test attribute')
+ def f(): "test func"
+
+class IContent(Interface): pass
+
+class Content: __implements__ = IContent
+
+class Comp:
+ __used_for__ = IContent
+ __implements__ = IApp
+
+ a=1
+ def f(): pass
+
+comp = Comp()
+
=== Zope3/lib/python/Zope/ComponentArchitecture/tests/TestFactory.py 1.1 => 1.2 ===
+#
+# 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.
+#
+##############################################################################
+"""
+
+$Id$
+"""
+from Zope.ComponentArchitecture.IFactory import IFactory
+from Interface import Interface
+
+class IX(Interface):
+ """the dummy interface which class X supposedly implements,
+ according to the factory"""
+
+class X:
+ __implements__=IX
+ def __init__(self, *args, **kwargs):
+ self.args=args
+ self.kwargs=kwargs
+
+
+class ClassFactoryWrapper:
+ __implements__ = IFactory
+ def __init__(self, klass):
+ self.__klass=klass
+ def __call__(self, *args, **kwargs):
+ return self.__klass(*args, **kwargs)
+ def getInterfaces(self):
+ return getattr(self.__klass,'__implements__', None)
+
+f=ClassFactoryWrapper(X)
\ No newline at end of file
=== Zope3/lib/python/Zope/ComponentArchitecture/tests/TestViews.py 1.1 => 1.2 ===
+#
+# 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.
+#
+##############################################################################
+"""
+
+Revision information: $Id$
+"""
+
+from Interface import Interface
+
+
+class IV(Interface):
+ def index(): pass
+
+class IC(Interface): pass
+
+class V1:
+ __implements__ = IV
+
+ def __init__(self,context, request):
+ self._context = context
+
+ def index(self): return 'V1 here'
+
+ def action(self): return 'done'
+
+class VZMI(V1):
+ def index(self): return 'ZMI here'
+
+class R1:
+
+ def index(self): return 'R1 here'
+
+ def action(self): return 'R done'
+
+ def __init__(self, request):
+ pass
+
+ __implements__ = IV
+
+class RZMI(R1):
+ pass
+
=== Zope3/lib/python/Zope/ComponentArchitecture/tests/__init__.py 1.1 => 1.2 ===
+#
+# 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.
+#
+##############################################################################
=== Zope3/lib/python/Zope/ComponentArchitecture/tests/testAPI.py 1.1 => 1.2 ===
+#
+# 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.
+#
+##############################################################################
+import unittest, sys, Interface
+from Request import Request
+
+class I1(Interface.Interface): pass
+class I2(Interface.Interface): pass
+class I3(Interface.Interface): pass
+class Comp:
+ __implements__ = I2
+ def __init__(self, context, request=None): self.context = context
+class Comp2:
+ __implements__ = I3
+ def __init__(self, context, request=None): self.context = context
+
+comp = Comp(1)
+
+class Ob:
+ __implements__ = I1
+
+ob = Ob()
+
+
+from PlacelessSetup import PlacelessSetup
+
+class Test(PlacelessSetup, unittest.TestCase):
+
+ def testAdapter(self):
+ from Zope.ComponentArchitecture \
+ import getAdapter, getService, queryAdapter
+ from Zope.ComponentArchitecture.Exceptions import ComponentLookupError
+
+ # if an object implements the interface you want to adapt to,
+ # getAdapter should simply return the object
+ self.assertEquals(getAdapter(ob, I1), ob)
+
+ # if an adapter isn't registered for the given object and interface,
+ # and you provide no default, raise ComponentLookupError...
+ self.assertRaises(ComponentLookupError, getAdapter, ob, I2)
+
+ # ...otherwise, you get the default
+ self.assertEquals(queryAdapter(ob, I2, Test), Test)
+
+ getService(None, 'Adapters').provideAdapter(I1, I2, Comp)
+ c = getAdapter(ob, I2)
+ self.assertEquals(c.__class__, Comp)
+ self.assertEquals(c.context, ob)
+
+ def testMultipleAdapterFactories(self):
+ from Zope.ComponentArchitecture import getAdapter, getService
+
+ # Basically, this represents a 2-stage adaptation. You can get
+ # from I1 to I2 by way of adapter Comp adapting Comp2
+ getService(None, 'Adapters').provideAdapter(I1, I2, [Comp2, Comp])
+ c = getAdapter(ob, I2)
+ self.assertEquals(c.__class__, Comp)
+ self.assertEquals(c.context.context, ob)
+
+ def testAdapterForInterfaceNone(self):
+ from Zope.ComponentArchitecture import getAdapter, getService
+
+ # providing an adapter for None says that your adapter can
+ # adapt anything to I2.
+ getService(None, 'Adapters').provideAdapter(None, I2, Comp)
+ c = getAdapter(ob, I2)
+ self.assertEquals(c.__class__, Comp)
+ self.assertEquals(c.context, ob)
+
+ def testUtility(self):
+ from Zope.ComponentArchitecture import getUtility, queryUtility
+ from Zope.ComponentArchitecture import getService
+ from Zope.ComponentArchitecture.Exceptions import ComponentLookupError
+
+ self.assertRaises(ComponentLookupError, getUtility, ob, I1)
+ self.assertRaises(ComponentLookupError, getUtility, ob, I2)
+ self.assertEquals(queryUtility(ob, I2, Test), Test)
+
+ getService(None, 'Utilities').provideUtility(I2, comp)
+ self.assertEquals(id(getUtility(ob, I2)), id(comp))
+
+ def testView(self):
+ from Zope.ComponentArchitecture import getView, queryView, getService
+ from Zope.ComponentArchitecture.Exceptions import ComponentLookupError
+
+ self.assertRaises(ComponentLookupError,
+ getView, ob, 'foo', Request(I1))
+ self.assertRaises(ComponentLookupError,
+ getView, ob, 'foo', Request(I2))
+ self.assertEquals(queryView(ob, 'foo', Request(I2), Test), Test)
+
+ getService(None, 'Views').provideView(I1, 'foo', I2, [Comp])
+ c = getView(ob, 'foo', Request(I2))
+ self.assertEquals(c.__class__, Comp)
+ self.assertEquals(c.context, ob)
+
+ self.assertRaises(ComponentLookupError,
+ getView, ob, 'foo2', Request(I1))
+ self.assertRaises(ComponentLookupError,
+ getView, ob, 'foo2', Request(I2))
+ self.assertEquals(queryView(ob, 'foo2', Request(I2), Test), Test)
+
+ self.assertEquals(queryView( ob, 'foo2', Request(I1), None), None)
+
+ def testDefaultViewName(self):
+ from Zope.ComponentArchitecture import getService
+ from Zope.Exceptions import NotFoundError
+ viewService = getService(None, 'Views')
+ self.assertRaises(NotFoundError,
+ viewService.getDefaultViewName,
+ ob, Request(I1))
+ viewService.setDefaultViewName(I1, I2, 'sample_name')
+ self.assertEquals(viewService.getDefaultViewName(ob, Request(I2)),
+ 'sample_name')
+ self.assertRaises(NotFoundError,
+ viewService.getDefaultViewName,
+ ob, Request(I1))
+
+
+def test_suite():
+ loader = unittest.TestLoader()
+ return loader.loadTestsFromTestCase(Test)
+
+if __name__ == '__main__':
+ unittest.TextTestRunner().run(test_suite())
=== Zope3/lib/python/Zope/ComponentArchitecture/tests/testIToIRegistry.py 1.1 => 1.2 ===
+#
+# 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.
+#
+##############################################################################
+import unittest, sys
+from Zope.ComponentArchitecture.IToIRegistry import IToIRegistry, IRegistry
+from Interface import Interface
+
+class Test(unittest.TestCase):
+
+ def testItAll(self):
+ # shane's tests
+
+
+ class I1(Interface): pass
+ class I2(I1): pass
+ class I3(I2): pass
+ class I4(I3): pass
+ class I5(I4): pass
+ class I6(I5): pass
+
+ class NamedClass:
+ def name(self):
+ return self.__class__.__name__
+
+ class A2(NamedClass): __implements__ = I2 # Adapts I1 or I2
+ class A4(NamedClass): __implements__ = I4 # Adapts I1, I2, I3, or I4
+ class A6(NamedClass): __implements__ = I6 # Adapts I1 through I6
+
+ class RequiredInterface (Interface): pass
+ class InputI (RequiredInterface): pass
+
+ reg = IToIRegistry()
+ reg.register(RequiredInterface, I2, A2)
+ reg.register(RequiredInterface, I4, A4)
+ reg.register(RequiredInterface, I6, A6)
+
+ assert reg.get(InputI, I1)[0]().name() == 'A2'
+ assert reg.get(InputI, I2)[0]().name() == 'A2'
+ assert reg.get(InputI, I3)[0]().name() == 'A4'
+ assert reg.get(InputI, I4)[0]().name() == 'A4'
+ assert reg.get(InputI, I5)[0]().name() == 'A6'
+ assert reg.get(InputI, I6)[0]().name() == 'A6'
+
+ # Be sure that it doesn't matter in what order you register
+ # non-conflicting adapters.
+ reg = IToIRegistry()
+ reg.register(RequiredInterface, I6, A6)
+ reg.register(RequiredInterface, I4, A4)
+ reg.register(RequiredInterface, I2, A2)
+
+ assert reg.get(InputI, I1)[0]().name() == 'A2'
+ assert reg.get(InputI, I2)[0]().name() == 'A2'
+ assert reg.get(InputI, I3)[0]().name() == 'A4'
+ assert reg.get(InputI, I4)[0]().name() == 'A4'
+ assert reg.get(InputI, I5)[0]().name() == 'A6'
+ assert reg.get(InputI, I6)[0]().name() == 'A6'
+
+ # XXX Need to make list tests as well
+
+
+ def testBadIndirectRegistry(self):
+
+ reg = IToIRegistry()
+ class I1(Interface): pass
+ class I2(Interface): pass
+ self.assertRaises(TypeError, reg.register, I1, I2, None)
+
+ def testBadDirect(self):
+ reg = IRegistry()
+ from Zope.ComponentArchitecture.Exceptions import Invalid
+ class I2(Interface): pass
+ self.assertRaises(Invalid, reg.register, I2, None)
+
+def test_suite():
+ loader=unittest.TestLoader()
+ return loader.loadTestsFromTestCase(Test)
+
+if __name__=='__main__':
+ unittest.TextTestRunner().run(test_suite())
=== Zope3/lib/python/Zope/ComponentArchitecture/tests/testProvideFactory.py 1.1 => 1.2 ===
+#
+# 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.
+#
+##############################################################################
+"""Test the provideFactory method.
+
+$Id$
+"""
+
+
+from unittest import TestCase, TestSuite, main, makeSuite
+from PlacelessSetup import PlacelessSetup
+
+
+class ProvideFactoryTestCase(PlacelessSetup, TestCase):
+
+ def test_provide_factory(self):
+ from Zope.ComponentArchitecture import getService, createObject
+ from TestFactory import f, X, IX
+ factories=getService(None, 'Factories')
+ factories.provideFactory("Some.Object", f)
+ thing = createObject(None,"Some.Object")
+ self.assert_(isinstance(thing, X))
+
+
+def test_suite():
+ return TestSuite((
+ makeSuite(ProvideFactoryTestCase),
+ ))
+
+if __name__=='__main__':
+ main(defaultTest='test_suite')
=== Zope3/lib/python/Zope/ComponentArchitecture/tests/testResources.py 1.1 => 1.2 ===
+#
+# 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.
+#
+##############################################################################
+"""
+
+$Id$
+"""
+
+import unittest, sys
+
+from Zope.ComponentArchitecture import getService
+from PlacelessSetup import PlacelessSetup
+from Zope.ComponentArchitecture import getResource, queryResource
+from Zope.ComponentArchitecture.Exceptions import ComponentLookupError
+from Interface import Interface
+from Request import Request
+
+class Test(PlacelessSetup, unittest.TestCase):
+
+ def testSkin(self):
+ class I2(Interface): pass
+ class C1:
+ def __init__(self, request): pass
+ __implements__ = I2
+ class C2(C1): pass
+
+ getService(None,'Resources').provideResource('test', I2, C1)
+ self.assertEqual(getResource(None, 'test', Request(I2)).__class__, C1)
+ getService(None,'Skins').defineSkin('foo', I2, ('foo', 'default'))
+ self.assertEqual(
+ getResource(None, 'test', Request(I2, 'foo')).__class__,
+ C1)
+ getService(None,'Resources').provideResource('test', I2, C2,
+ layer='foo')
+ self.assertEqual(
+ getResource(None, 'test', Request(I2, 'foo')).__class__,
+ C2)
+
+ def testGetRequestResourceMethod(self):
+ class I2(Interface): pass
+ class C1:
+ def __init__(self, request): pass
+
+ __implements__ = I2
+ class C2(C1): pass
+
+
+ getService(None,'Resources').provideResource('test', I2, C1)
+ self.assertEqual(
+ getResource(None, 'test', Request(I2, 'default') ).__class__,
+ C1)
+ getService(None,'Skins').defineSkin('foo', I2, ('foo', 'default'))
+ self.assertEqual(
+ getResource(None, 'test', Request(I2, 'foo')).__class__,
+ C1)
+ getService(None,'Resources').provideResource('test', I2, C2,
+ layer='foo')
+ self.assertEqual(
+ getResource(None, 'test', Request(I2, 'foo')).__class__,
+ C2)
+
+ self.assertRaises(
+ ComponentLookupError,
+ getResource, None, 'test2', Request(I2, 'foo'))
+
+ self.assertEqual(
+ queryResource(None, 'test2', Request(I2, 'foo'), None),
+ None)
+
+def test_suite():
+ loader=unittest.TestLoader()
+ return loader.loadTestsFromTestCase(Test)
+
+if __name__=='__main__':
+ unittest.TextTestRunner().run(test_suite())
=== Zope3/lib/python/Zope/ComponentArchitecture/tests/testService.py 1.1 => 1.2 ===
+#
+# 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.
+#
+##############################################################################
+"""
+
+$Id$
+"""
+
+from Zope.ComponentArchitecture import getServiceDefinitions, getService, \
+ getServiceManager
+from Zope.ComponentArchitecture.GlobalServiceManager import UndefinedService, \
+ InvalidService
+from Zope.ComponentArchitecture.ServiceManagerContainer import \
+ ServiceManagerContainer
+from Zope.Exceptions import DuplicationError
+from Interface import Interface
+from Zope.Testing.CleanUp import CleanUp
+
+import unittest, sys
+
+class IOne(Interface):
+ pass
+
+class ITwo(Interface):
+ pass
+
+class ServiceOne:
+ __implements__ = IOne
+
+class ServiceTwo:
+ __implements__ = ITwo
+
+class Test(CleanUp, unittest.TestCase):
+
+ def testNormal(self):
+ getServiceManager(None).defineService('one', IOne)
+ c = ServiceOne()
+ getServiceManager(None).provideService('one', c)
+ self.assertEqual(id(getService(None, 'one')), id(c))
+
+ def testDup(self):
+ getServiceManager(None).defineService('one', IOne)
+ self.assertRaises(DuplicationError,
+ getServiceManager(None).defineService,
+ 'one', ITwo)
+
+ c = ServiceOne()
+ getServiceManager(None).provideService('one', c)
+
+ c2 = ServiceOne()
+ self.assertRaises(DuplicationError,
+ getServiceManager(None).provideService,
+ 'one', c2)
+
+ self.assertEqual(id(getService(None, 'one')), id(c))
+
+
+ def testUndefined(self):
+ c = ServiceOne()
+ self.assertRaises(UndefinedService,
+ getServiceManager(None).provideService,
+ 'one', c)
+
+ def testInvalid(self):
+ getServiceManager(None).defineService('one', IOne)
+ getServiceManager(None).defineService('two', ITwo)
+ c = ServiceOne()
+ self.assertRaises(InvalidService,
+ getServiceManager(None).provideService,
+ 'two', c)
+
+ def testGetService(self):
+
+ """Testing looking up a service from a service manager
+ container that doesn't have a service manager."""
+
+ getServiceManager(None).defineService('one', IOne)
+ c = ServiceOne()
+ getServiceManager(None).provideService('one', c)
+ smc = ServiceManagerContainer()
+ self.assertEqual(id(getService(smc, 'one')), id(c))
+
+ def testGetServiceDefinitions(self):
+ """test that the service definitions are the ones we added"""
+ getServiceManager(None).defineService('one', IOne)
+ c = ServiceOne()
+ getServiceManager(None).provideService('one', c)
+
+ getServiceManager(None).defineService('two', ITwo)
+ d = ServiceTwo()
+ getServiceManager(None).provideService('two', d)
+ defs = getServiceDefinitions(None)
+ defs.sort()
+ self.assertEqual(defs,
+ [('one', IOne), ('two', ITwo)])
+
+def test_suite():
+ loader=unittest.TestLoader()
+ return loader.loadTestsFromTestCase(Test)
+
+if __name__=='__main__':
+ unittest.TextTestRunner().run(test_suite())
=== Zope3/lib/python/Zope/ComponentArchitecture/tests/testServiceManagerContainer.py 1.1 => 1.2 ===
+#
+# 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.
+#
+##############################################################################
+"""
+
+Revision information:
+$Id$
+"""
+
+from unittest import TestCase, TestSuite, main, makeSuite
+from Zope.ComponentArchitecture.IServiceManager import IServiceManager
+from Zope.ComponentArchitecture.IServiceManagerContainer \
+ import IServiceManagerContainer
+from Zope.ComponentArchitecture.Exceptions import ComponentLookupError
+from Interface.Verify import verifyObject
+from Zope.ContextWrapper import getbaseobject
+
+class ServiceManager:
+
+ __implements__ = IServiceManager
+
+ ############################################################
+ # Implementation methods for interface
+ # Zope.ComponentArchitecture.IServiceManager.
+
+ def getService(self, object, name):
+ '''See interface IServiceManager'''
+ raise ComponentLookupError(name)
+
+ def getServiceDefinitions(self):
+ '''See interface IServiceManager'''
+ return ()
+
+ #
+ ############################################################
+
+class BaseTestServiceManagerContainer:
+
+ """This test is for objects that don't have service managers by
+ default and that always give back the service manager they were
+ given.
+
+
+ Subclasses need to define a method, '_Test__new', that takes no
+ arguments and that returns a new service manager
+ container that has no service manager."""
+
+ def testIServiceManagerContainerVerify(self):
+ verifyObject(IServiceManagerContainer, self._Test__new())
+
+ def testHas(self):
+ smc=self._Test__new()
+ self.failIf(smc.hasServiceManager())
+ smc.setServiceManager(ServiceManager())
+ self.failUnless(smc.hasServiceManager())
+
+ def testGet(self):
+ smc=self._Test__new()
+ # since the managers are now wrapped, need to look at base object
+ self.failUnless(getbaseobject(smc.getServiceManager(self)) is self)
+ self.assertRaises(ComponentLookupError, smc.getServiceManager)
+ sm=ServiceManager()
+ smc.setServiceManager(sm)
+ self.failUnless(getbaseobject(smc.getServiceManager()) is sm)
+ self.failUnless(getbaseobject(smc.getServiceManager(self)) is sm)
+
+ def testSet(self):
+ smc=self._Test__new()
+ self.assertRaises(Exception, smc.setServiceManager, self)
+
+
+
+class Test(BaseTestServiceManagerContainer, TestCase):
+ def _Test__new(self):
+ from Zope.ComponentArchitecture.ServiceManagerContainer \
+ import ServiceManagerContainer
+ return ServiceManagerContainer()
+
+
+def test_suite():
+ return TestSuite((
+ makeSuite(Test),
+ ))
+
+if __name__=='__main__':
+ main(defaultTest='test_suite')
=== Zope3/lib/python/Zope/ComponentArchitecture/tests/testSkins.py 1.1 => 1.2 ===
+#
+# 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.
+#
+##############################################################################
+import unittest, sys
+
+from PlacelessSetup import PlacelessSetup
+from Zope.ComponentArchitecture import getView, getService, queryView
+from Zope.ComponentArchitecture.Exceptions import ComponentLookupError
+from Interface import Interface
+from Request import Request
+
+
+class Test(PlacelessSetup, unittest.TestCase):
+
+ def testSkin(self):
+ class I1(Interface): pass
+ class I2(Interface): pass
+
+ class C1:
+ __implements__ = I2
+ __used_for__ = I1
+ def __init__(self, o, request): self._context=o
+ class C2(C1): pass
+ class C3(C1): pass
+
+ class O: __implements__ = I1
+
+ getService(None, 'Views').provideView(I1, 'test', I2, [C1])
+ self.assertEqual(getView(O(), 'test', Request(I2)).__class__, C1)
+ getService(None, 'Skins').defineSkin('foo', I2, ('foo', 'default'))
+ self.assertEqual(getView(O(), 'test', Request(I2, 'foo')).__class__,
+ C1)
+ getService(None, 'Views').provideView(None, 'test', I2, [C2])
+ self.assertEqual(getView(O(), 'test', Request(I2, 'foo')).__class__,
+ C1)
+ getService(None, 'Views').provideView(
+ None, 'test', I2, [C2], layer='foo')
+ self.assertEqual(getView(O(), 'test', Request(I2, 'foo')).__class__,
+ C2)
+ getService(None, 'Views').provideView(
+ I1, 'test', I2, [C3], layer='foo')
+ self.assertEqual(getView(O(), 'test', Request(I2, 'foo')).__class__,
+ C3)
+
+
+
+ def testGetRequestViewMethod(self):
+
+ class I1(Interface): pass
+ class I2(Interface): pass
+
+ class C1:
+ __implements__ = I2
+ __used_for__ = I1
+ def __init__(self, o, request): self._context=o
+ class C2(C1): pass
+ class C3(C1): pass
+
+ class O: __implements__ = I1
+
+
+ getService(None, 'Views').provideView(I1, 'test', I2, [C1])
+ self.assertEqual(getView(O(), 'test',
+ Request(I2,'') ).__class__, C1)
+ getService(None, 'Skins').defineSkin('foo', I2, ('foo', 'default'))
+
+ self.assertEqual(getView(O(), 'test',
+ Request(I2, 'foo')).__class__, C1)
+ getService(None, 'Views').provideView(None, 'test', I2, [C2])
+
+ self.assertEqual(getView(O(), 'test',
+ Request(I2, 'foo')).__class__, C1)
+ getService(None, 'Views').provideView(
+ None, 'test', I2, [C2], layer='foo')
+
+ self.assertEqual(getView(O(), 'test',
+ Request(I2, 'foo')).__class__, C2)
+ getService(None, 'Views').provideView(
+ I1, 'test', I2, [C3], layer='foo')
+
+ self.assertEqual(getView(O(), 'test',
+ Request(I2, 'foo')).__class__, C3)
+
+ self.assertRaises(ComponentLookupError,
+ getView, O(), 'test2', Request(I2, 'foo'))
+
+ self.assertEqual(queryView(O(), 'test2',
+ Request(I2, 'foo'), None), None)
+
+
+
+def test_suite():
+ loader=unittest.TestLoader()
+ return loader.loadTestsFromTestCase(Test)
+
+if __name__=='__main__':
+ unittest.TextTestRunner().run(test_suite())
=== Zope3/lib/python/Zope/ComponentArchitecture/tests/testTypeRegistry.py 1.1 => 1.2 ===
+#
+# 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.
+#
+##############################################################################
+"""
+
+Revision information:
+$Id$
+"""
+
+import unittest, sys
+from Zope.Testing.CleanUp import CleanUp # Base class w registry cleanup
+from Zope.ComponentArchitecture.IToIRegistry import TypeRegistry
+from Interface import Interface
+
+def getAllForObject(reg, ob):
+ all = list(reg.getAllForObject(ob))
+ all.sort()
+ return all
+
+class Test(CleanUp, unittest.TestCase):
+
+ def test(self):
+ class I1(Interface): pass
+ class I2(I1): pass
+ class I3(I2): pass
+
+ reg = TypeRegistry()
+ reg.register(I2, 2)
+
+ class C1: __implements__ = I1
+ class C2: __implements__ = I2
+ class C3: __implements__ = I3
+ class C: pass
+
+ self.assertEqual(reg.getForObject(C1()), None)
+ self.assertEqual(reg.getForObject(C2()), 2)
+ self.assertEqual(reg.getForObject(C3()), 2)
+ self.assertEqual(reg.getForObject(C()), None)
+
+ self.assertEqual(getAllForObject(reg, C1()), [])
+ self.assertEqual(getAllForObject(reg, C2()), [2])
+ self.assertEqual(getAllForObject(reg, C3()), [2])
+ self.assertEqual(getAllForObject(reg, C()), [])
+
+ self.assertEqual(reg.getForType(I1), None)
+ self.assertEqual(reg.getForType(I2), 2)
+ self.assertEqual(reg.getForType(I3), 2)
+
+ self.assertEqual(reg.getJustForType(I1), None)
+ self.assertEqual(reg.getJustForType(I2), 2)
+ self.assertEqual(reg.getJustForType(I3), None)
+
+ reg.register(I1, 1)
+ self.assertEqual(reg.getForObject(C1()), 1)
+ self.assertEqual(reg.getForObject(C2()), 2)
+ self.assertEqual(reg.getForObject(C3()), 2)
+ self.assertEqual(reg.getForObject(C()), None)
+
+ self.assertEqual(getAllForObject(reg, C1()), [1])
+ self.assertEqual(getAllForObject(reg, C2()), [1, 2])
+ self.assertEqual(getAllForObject(reg, C3()), [1, 2])
+ self.assertEqual(getAllForObject(reg, C()), [])
+
+ self.assertEqual(reg.getForType(I1), 1)
+ self.assertEqual(reg.getForType(I2), 2)
+ self.assertEqual(reg.getForType(I3), 2)
+
+ self.assertEqual(reg.getJustForType(I1), 1)
+ self.assertEqual(reg.getJustForType(I2), 2)
+ self.assertEqual(reg.getJustForType(I3), None)
+
+ reg.register(I3, 3)
+ self.assertEqual(reg.getForObject(C1()), 1)
+ self.assertEqual(reg.getForObject(C2()), 2)
+ self.assertEqual(reg.getForObject(C3()), 3)
+ self.assertEqual(reg.getForObject(C()), None)
+
+ self.assertEqual(getAllForObject(reg, C1()), [1])
+ self.assertEqual(getAllForObject(reg, C2()), [1, 2])
+ self.assertEqual(getAllForObject(reg, C3()), [1, 2, 3])
+ self.assertEqual(getAllForObject(reg, C()), [])
+
+ self.assertEqual(reg.getForType(I1), 1)
+ self.assertEqual(reg.getForType(I2), 2)
+ self.assertEqual(reg.getForType(I3), 3)
+
+ self.assertEqual(reg.getJustForType(I1), 1)
+ self.assertEqual(reg.getJustForType(I2), 2)
+ self.assertEqual(reg.getJustForType(I3), 3)
+
+ def testDup(self):
+ class I1(Interface): pass
+ class I2(I1): pass
+ class I3(I1): pass
+ class I4(I2, I3): pass
+ class C1: __implements__ = I1
+ class C2: __implements__ = I2
+ class C3: __implements__ = I3
+ class C4: __implements__ = I4
+ class C5: __implements__ = I1, I2, I3, I4
+ class C: pass
+
+ reg = TypeRegistry()
+ reg.register(I1, 1)
+ reg.register(I2, 2)
+ reg.register(I3, 3)
+
+ self.assertEqual(reg.getForObject(C1()), 1)
+ self.assertEqual(reg.getForObject(C2()), 2)
+ self.assertEqual(reg.getForObject(C3()), 3)
+ self.failUnless(reg.getForObject(C3()) in (2,3))
+ self.assertEqual(reg.getForObject(C()), None)
+
+ self.assertEqual(getAllForObject(reg, C1()), [1])
+ self.assertEqual(getAllForObject(reg, C2()), [1, 2])
+ self.assertEqual(getAllForObject(reg, C3()), [1, 3])
+ self.assertEqual(getAllForObject(reg, C4()), [1, 2, 3])
+ self.assertEqual(getAllForObject(reg, C5()), [1, 2, 3])
+ self.assertEqual(getAllForObject(reg, C()), [])
+
+def test_suite():
+ loader=unittest.TestLoader()
+ return loader.loadTestsFromTestCase(Test)
+
+if __name__=='__main__':
+ unittest.TextTestRunner().run(test_suite())
=== Zope3/lib/python/Zope/ComponentArchitecture/tests/testViewDefinitions.py 1.1 => 1.2 ===
+#
+# 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.
+#
+##############################################################################
+"""
+
+Revision information:
+$Id$
+"""
+
+from unittest import TestCase, TestSuite, main, makeSuite
+from PlacelessSetup import PlacelessSetup
+from Zope.ComponentArchitecture.tests.TestViews \
+ import IC, IV, V1
+
+from Zope.ComponentArchitecture import getService
+
+class IC1(IC): "Content interface 1"
+class IC2(IC): "Content interface 1"
+
+class ViewType(IV): "Custom view type"
+
+class BaseTestViewDefinitions(PlacelessSetup):
+
+ def setUp(self):
+ PlacelessSetup.setUp(self)
+ viewService = self._Test__new()
+
+ for name in ('foo', 'bar', 'baz'):
+ for forinterface in IC, IC1:
+ for layer in ('', 'l1'):
+ class C(V1): pass
+ C.name = name
+ C.__used_for__ = forinterface
+ C.layer = layer
+
+ viewService.provideView(forinterface, name, IV, [C],
+ layer=layer)
+
+ for name in ('foo', 'bar', 'baz'):
+ for layer in ('', 'l1'):
+ class C(V1): pass
+ C.name = name
+ C.__used_for__ = IC2
+ C.layer = layer
+ C.__implements__ = ViewType
+ viewService.provideView(IC2, name, IV, [C],
+ layer=layer)
+
+ for name in ('foo', 'bar', 'baz'):
+ for layer in ('l2', 'l3'):
+ class C(V1): pass
+ C.name = name
+ C.__used_for__ = IC
+ C.layer = layer
+ C.__implements__ = ViewType
+ viewService.provideView(IC, name, IV, [C],
+ layer=layer)
+
+
+ def testAll(self):
+ viewService = self._Test__new()
+ defs = viewService.getViewDefinitions()
+ self.assertEqual(len(defs), 24)
+
+
+ def testForC1(self):
+ viewService = self._Test__new()
+ defs = viewService.getViewDefinitions(used_for=IC1)
+ self.assertEqual(len(defs), 12)
+ for d in defs:
+ self.failUnless(IC1.extends(d['used_for'], 0), d)
+
+ def testForC2(self):
+ viewService = self._Test__new()
+ defs = viewService.getViewDefinitions(used_for=IC2)
+ self.assertEqual(len(defs), 12)
+ for d in defs:
+ self.failUnless(IC2.extends(d['used_for'], 0), d)
+
+
+ def testInterfaceGrrr(self):
+ from Zope.ComponentArchitecture.IViewService import IViewService
+ from Interface.Verify import verifyObject
+ verifyObject(IViewService, self._Test__new())
+
+class Test(BaseTestViewDefinitions, TestCase):
+
+ def _Test__new(self):
+ return getService(None, "Views")
+
+
+
+def test_suite():
+ return TestSuite((
+ makeSuite(Test),
+ ))
+
+if __name__=='__main__':
+ main(defaultTest='test_suite')