[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/OFS/Services/AddableService/tests - AddableSetup.py:1.2 __init__.py:1.2 testAddable.py:1.2
Jim Fulton
jim@zope.com
Mon, 10 Jun 2002 19:28:41 -0400
Update of /cvs-repository/Zope3/lib/python/Zope/App/OFS/Services/AddableService/tests
In directory cvs.zope.org:/tmp/cvs-serv17445/lib/python/Zope/App/OFS/Services/AddableService/tests
Added Files:
AddableSetup.py __init__.py testAddable.py
Log Message:
Merged Zope-3x-branch into newly forked Zope3 CVS Tree.
=== Zope3/lib/python/Zope/App/OFS/Services/AddableService/tests/AddableSetup.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 Zope.App.OFS.Services.ServiceManager.tests.PlacefulSetup import PlacefulSetup
+
+class AddableSetup(PlacefulSetup):
+
+ def setUp(self):
+ PlacefulSetup.setUp(self)
+ from Zope.App.OFS.Services.AddableService.IAddableService import \
+ IAddableService
+ from Zope.ComponentArchitecture import getServiceManager
+ sm=getServiceManager(None)
+ defineService=sm.defineService
+ provideService=sm.provideService
+ defineService('AddableContent',IAddableService)
+ defineService('AddableServices',IAddableService)
+ from Zope.App.OFS.Services.AddableService.GlobalAddableService import \
+ addableContent, addableServices
+ provideService('AddableContent',addableContent)
+ provideService('AddableServices',addableServices)
+
=== Zope3/lib/python/Zope/App/OFS/Services/AddableService/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/App/OFS/Services/AddableService/tests/testAddable.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 Zope.App.OFS.Services.AddableService.Addable import Addable
+from Zope.App.OFS.Services.AddableService import getAddableContent, \
+ getAddableServices
+from AddableSetup import AddableSetup
+
+def membership_check(group, item):
+ if type(group) is tuple:
+ for inter in group:
+ if membership_check(inter, item):
+ return 1
+ return 0
+ if type(item) is tuple:
+ for inter in item:
+ if membership_check(group, inter):
+ return 1
+ return 0
+ return group is item or issubclass(item, group)
+
+class Test(AddableSetup, unittest.TestCase):
+
+ def testService(self):
+
+ self.assertEqual(getAddableContent(None), [])
+
+ getService(None, 'AddableContent').provideAddable(
+ 'Contact', 'Personal Contact',
+ 'blah\nblah')
+
+ # you must provide a matching factory for the addable to be returned
+ self.assertEqual(getAddableContent(None), [])
+
+ from Interface import Interface
+ class IA(Interface):
+ pass
+ class A:
+ __implements__=IA
+ from Zope.ComponentArchitecture.tests.TestFactory import ClassFactoryWrapper
+ fA=ClassFactoryWrapper(A)
+ getService(None, 'Factories').provideFactory('Contact', fA)
+
+ self.assertEqual(getAddableContent(None), [
+ Addable('Contact', 'Personal Contact', 'blah\nblah'),
+ ])
+
+ getService(None, 'Factories').provideFactory('spam', fA)
+ getService(None,'AddableContent').provideAddable('spam', 'junk mail', 'spam\nspam')
+
+ self.assertEqual(getAddableContent(None), [
+ Addable('Contact', 'Personal Contact', 'blah\nblah'),
+ Addable('spam', 'junk mail', 'spam\nspam'),
+ ]) # ought to change to some kind of sort for more robust check
+
+ def testGetAddable(self):
+ self.buildFolders()
+ from Interface import Interface
+
+ # objects
+
+ class IA(Interface):
+ pass
+ class A:
+ __implements__=IA
+ class IB(Interface):
+ pass
+ class B:
+ __implements__=IB
+ class IBC(IB):
+ pass
+ class C:
+ __implements__=IBC
+ class D:
+ __implements__=(IA, (IBC,))
+ class E:
+ __implements__=IA
+
+ # factories
+ from Zope.ComponentArchitecture.tests.TestFactory import ClassFactoryWrapper
+
+ fA=ClassFactoryWrapper(A)
+ fB=ClassFactoryWrapper(B)
+ fC=ClassFactoryWrapper(C)
+ fD=ClassFactoryWrapper(D)
+ fE=ClassFactoryWrapper(E)
+
+ #containers
+
+ class IX(Interface):
+ pass
+ class IX1(Interface):
+ pass
+ self.folder1.__implements__+= (IX, IX1)
+ class IY(IX):
+ pass
+ self.folder1_1.__implements__+= (IY,)
+ # (the fancy one...)
+ class IZ(Interface):
+ pass
+ from Zope.App.OFS.Content.Folder.Folder import Folder
+ from Zope.ContextWrapper import Wrapper
+ from Zope.App.OFS.Container.IContainer import IHomogenousContainer
+
+ class DummyFolder(Folder):
+ __implements__=Folder.__implements__, IZ, IHomogenousContainer
+
+ def isAddable(self, interfaces):
+ return membership_check(IB, interfaces)
+
+
+ self.folder3=DummyFolder()
+ self.rootFolder.setObject("folder3",self.folder3)
+ self.folder3=Wrapper(self.folder3, self.rootFolder, name="folder3")
+
+ # set up the services with the factories and addables...
+ provideFactory=getService(None, 'Factories').provideFactory
+ provideAddable=getService(None, 'AddableServices').provideAddable
+ provideFactory('A', fA)
+
+ # should be available in 1 and 1_1 (for_container)
+ provideAddable('A', 'Dummy A', 'Desc A', IX)
+ provideFactory('B', fB)
+
+ # should be in 1 and 3 (for_container)
+ provideAddable('B', 'Dummy B', 'Desc B', (IX1, IZ))
+ provideFactory('C', fC)
+
+ # should be in 1 (for_container)
+ provideAddable('C', 'DummyC', 'Desc C', IX1)
+ provideFactory('D', fD)
+
+ # should be in ALLOW
+ provideAddable('D', 'Dummy D', 'Desc D')
+ provideFactory('E', fE)
+
+ # should be in 1 and 1_1
+ provideAddable('E', 'Dummy E', 'Desc E')
+ AAd=Addable('A', 'Dummy A', 'Desc A', IX)
+ BAd=Addable('B', 'Dummy B', 'Desc B', (IX1, IZ))
+ CAd=Addable('C', 'DummyC', 'Desc C', IX1)
+ DAd=Addable('D', 'Dummy D', 'Desc D')
+ EAd=Addable('E', 'Dummy E', 'Desc E')
+
+ # and test!
+
+ # sort for more robust test
+ self.assertEqual(getAddableServices(self.folder1),
+ [AAd, BAd, CAd, DAd, EAd])
+ self.assertEqual(getAddableServices(self.folder1_1),
+ [AAd, DAd, EAd]) # sort
+ self.assertEqual(getAddableServices(self.folder3),
+ [BAd, DAd]) # sort
+
+
+ def setAValue(self, add,val):
+ add.id=val
+
+ def testAddable(self):
+ myAddable=Addable('Contact', 'Personal Contact',
+ 'blah\nblah')
+ self.assertRaises(AttributeError,
+ self.setAValue, myAddable, 'AnotherId')
+
+def test_suite():
+ loader=unittest.TestLoader()
+ return loader.loadTestsFromTestCase(Test)
+
+if __name__=='__main__':
+ unittest.TextTestRunner().run(test_suite())