[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')