[Zope-Checkins] SVN: Zope/trunk/src/OFS/ Fix startup bug where five:register_class barfed due to missing Products.meta_types.
Tres Seaver
tseaver at palladion.com
Fri Apr 2 17:02:18 EDT 2010
Log message for revision 110456:
Fix startup bug where five:register_class barfed due to missing Products.meta_types.
Changed:
U Zope/trunk/src/OFS/metaconfigure.py
A Zope/trunk/src/OFS/tests/test_metaconfigure.py
-=-
Modified: Zope/trunk/src/OFS/metaconfigure.py
===================================================================
--- Zope/trunk/src/OFS/metaconfigure.py 2010-04-02 15:53:58 UTC (rev 110455)
+++ Zope/trunk/src/OFS/metaconfigure.py 2010-04-02 21:02:18 UTC (rev 110456)
@@ -124,7 +124,9 @@
'instance': class_,
'container_filter': None}
- Products.meta_types += (info,)
+ meta_types = getattr(Products, 'meta_types', ())
+ meta_types += (info,)
+ Products.meta_types = meta_types
_register_monkies.append(class_)
_meta_type_regs.append(meta_type)
Added: Zope/trunk/src/OFS/tests/test_metaconfigure.py
===================================================================
--- Zope/trunk/src/OFS/tests/test_metaconfigure.py (rev 0)
+++ Zope/trunk/src/OFS/tests/test_metaconfigure.py 2010-04-02 21:02:18 UTC (rev 110456)
@@ -0,0 +1,149 @@
+import unittest
+
+
+_marker = object()
+class Test__registerClass(unittest.TestCase):
+
+ def setUp(self):
+ from zope.component.testing import setUp
+ setUp()
+ import OFS.metaconfigure
+ import Products
+ self._old_metatypes = getattr(Products, 'meta_types', _marker)
+ self._old_monkies = OFS.metaconfigure._register_monkies[:]
+ self._old_mt_regs = OFS.metaconfigure._meta_type_regs[:]
+ # clear out registrations
+ if self._old_metatypes is not _marker:
+ Products.meta_types = []
+ OFS.metaconfigure._register_monkies[:] = []
+ OFS.metaconfigure._meta_type_regs[:] = []
+
+ def tearDown(self):
+ from zope.component.testing import tearDown
+ import OFS.metaconfigure
+ # restore registrations
+ OFS.metaconfigure._meta_type_regs[:] = self._old_mt_regs
+ OFS.metaconfigure._register_monkies[:] = self._old_monkies
+ if self._old_metatypes is not _marker:
+ import Products
+ Products.meta_types = self._old_metatypes
+ else:
+ try:
+ del Products.meta_types
+ except AttributeError:
+ pass
+ tearDown()
+
+ def _callFUT(self, klass, meta_type, permission,
+ addview=None, icon=None, global_=False):
+ from OFS.metaconfigure import _registerClass
+ _registerClass(klass, meta_type, permission, addview, icon, global_)
+
+ def _makeClass(self, ifaces=None):
+ if ifaces is None:
+ class Dummy(object):
+ pass
+ else:
+ from zope.interface import implements
+ class Dummy(object):
+ implements(ifaces)
+ return Dummy
+
+ def _registerPermission(self, name, title=None):
+ from zope.component import provideUtility
+ from zope.interface import implements
+ from zope.security.interfaces import IPermission
+ class Perm:
+ implements(IPermission)
+ def __init__(self, title):
+ self. title = title
+ if title is None:
+ title = name.capitalize()
+ provideUtility(Perm(title), name=name)
+
+ def _getRegistered(self):
+ import OFS.metaconfigure
+ import Products
+ return (getattr(Products, 'meta_types', _marker),
+ OFS.metaconfigure._register_monkies,
+ OFS.metaconfigure._meta_type_regs,
+ )
+
+ def test_minimal(self):
+ klass = self._makeClass()
+ self._registerPermission('perm')
+
+ self._callFUT(klass, 'Dummy', 'perm')
+
+ self.assertEqual(klass.meta_type, 'Dummy')
+ mt, monkies, mt_regs = self._getRegistered()
+ self.assertEqual(len(mt), 1)
+ self.assertEqual(mt[0]['name'], 'Dummy')
+ self.assertEqual(mt[0]['action'], '')
+ self.assertEqual(mt[0]['product'], 'OFS') # XXX why?
+ self.assertEqual(mt[0]['permission'], 'Perm')
+ self.assertEqual(mt[0]['visibility'], None)
+ self.assertEqual(mt[0]['interfaces'], ())
+ self.assertEqual(mt[0]['instance'], klass)
+ self.assertEqual(mt[0]['container_filter'], None)
+
+ def test_w_icon(self):
+ klass = self._makeClass()
+ self._registerPermission('perm')
+
+ self._callFUT(klass, 'Dummy', 'perm', icon='dummy.png')
+ self.assertEqual(klass.icon, '++resource++dummy.png')
+
+ def test_w_global_(self):
+ klass = self._makeClass()
+ self._registerPermission('perm')
+
+ self._callFUT(klass, 'Dummy', 'perm', global_=True)
+
+ mt, monkies, mt_regs = self._getRegistered()
+ self.assertEqual(len(mt), 1)
+ self.assertEqual(mt[0]['visibility'], 'Global')
+
+ def test_w_addview(self):
+ klass = self._makeClass()
+ self._registerPermission('perm')
+
+ self._callFUT(klass, 'Dummy', 'perm', 'adddummy')
+
+ mt, monkies, mt_regs = self._getRegistered()
+ self.assertEqual(len(mt), 1)
+ self.assertEqual(mt[0]['action'], '+/adddummy')
+
+ def test_w_interfaces(self):
+ from zope.interface import Interface
+ class IDummy(Interface):
+ pass
+ klass = self._makeClass((IDummy,))
+ self._registerPermission('perm')
+
+ self._callFUT(klass, 'Dummy', 'perm')
+
+ mt, monkies, mt_regs = self._getRegistered()
+ self.assertEqual(len(mt), 1)
+ self.assertEqual(mt[0]['interfaces'], (IDummy,))
+
+ def test_minimal_no_Products_metatypes(self):
+ import Products
+ try:
+ del Products.meta_types
+ except AttributeError:
+ pass
+
+ klass = self._makeClass()
+ self._registerPermission('perm')
+
+ self._callFUT(klass, 'Dummy', 'perm')
+
+ self.assertEqual(klass.meta_type, 'Dummy')
+ mt, monkies, mt_regs = self._getRegistered()
+ self.assertEqual(len(mt), 1)
+
+def test_suite():
+ return unittest.TestSuite((
+ unittest.makeSuite(Test__registerClass),
+ ))
More information about the Zope-Checkins
mailing list