[Checkins] SVN: Products.GenericSetup/trunk/Products/GenericSetup/
- added MarkerInterfaceHelpers mixin class
Yvo Schubbe
y.2008 at wcm-solutions.de
Fri Feb 22 09:34:14 EST 2008
Log message for revision 84135:
- added MarkerInterfaceHelpers mixin class
Changed:
U Products.GenericSetup/trunk/Products/GenericSetup/CHANGES.txt
U Products.GenericSetup/trunk/Products/GenericSetup/testing.py
U Products.GenericSetup/trunk/Products/GenericSetup/tests/test_utils.py
U Products.GenericSetup/trunk/Products/GenericSetup/utils.py
-=-
Modified: Products.GenericSetup/trunk/Products/GenericSetup/CHANGES.txt
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/CHANGES.txt 2008-02-22 09:40:57 UTC (rev 84134)
+++ Products.GenericSetup/trunk/Products/GenericSetup/CHANGES.txt 2008-02-22 14:34:13 UTC (rev 84135)
@@ -2,6 +2,8 @@
GenericSetup 1.4.0 (unreleased)
+ - utils: Added MarkerInterfaceHelpers.
+
- Added default values to the registerProfile ZCML directive.
- Add a ZMI interface to find and remove invalid steps from the
Modified: Products.GenericSetup/trunk/Products/GenericSetup/testing.py
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/testing.py 2008-02-22 09:40:57 UTC (rev 84134)
+++ Products.GenericSetup/trunk/Products/GenericSetup/testing.py 2008-02-22 14:34:13 UTC (rev 84135)
@@ -21,6 +21,7 @@
from xml.dom.minidom import parseString
import Products.Five
+from OFS.interfaces import IItem
from Products.Five import zcml
from zope.component import getMultiAdapter
from zope.interface import implements
@@ -64,6 +65,11 @@
return self._should_purge
+class IDummyMarker(IItem):
+
+ pass
+
+
class _AdapterTestCaseBase(unittest.TestCase):
def _populate(self, obj):
Modified: Products.GenericSetup/trunk/Products/GenericSetup/tests/test_utils.py
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/tests/test_utils.py 2008-02-22 09:40:57 UTC (rev 84134)
+++ Products.GenericSetup/trunk/Products/GenericSetup/tests/test_utils.py 2008-02-22 14:34:13 UTC (rev 84135)
@@ -20,8 +20,17 @@
from xml.dom.minidom import parseString
+from OFS.interfaces import IItem
+from OFS.SimpleItem import Item
+from Products.Five.utilities.marker import MarkerInterfacesAdapter
+from zope.component import provideAdapter
+from zope.component.interface import provideInterface
+from zope.interface import directlyProvides
+from zope.testing.cleanup import cleanUp
+
+from Products.GenericSetup.testing import DummySetupEnviron
+from Products.GenericSetup.testing import IDummyMarker
from Products.GenericSetup.utils import PrettyDocument
-from Products.GenericSetup.testing import DummySetupEnviron
_EMPTY_PROPERTY_EXPORT = """\
@@ -145,7 +154,14 @@
</dummy>
"""
+_NORMAL_MARKER_EXPORT = """\
+<?xml version="1.0"?>
+<dummy>
+ <marker name="Products.GenericSetup.testing.IDummyMarker"/>
+</dummy>
+"""
+
def _testFunc( *args, **kw ):
""" This is a test.
@@ -383,6 +399,64 @@
self.assertEquals(obj.lines3, ('Gee', 'Foo', 'Bar'))
+class MarkerInterfaceHelpersTests(unittest.TestCase):
+
+ def _getTargetClass(self):
+ from Products.GenericSetup.utils import MarkerInterfaceHelpers
+
+ return MarkerInterfaceHelpers
+
+ def _makeOne(self, *args, **kw):
+ from Products.GenericSetup.utils import NodeAdapterBase
+
+ class Foo(self._getTargetClass(), NodeAdapterBase):
+
+ pass
+
+ return Foo(*args, **kw)
+
+ def _populate(self, obj):
+ directlyProvides(obj, IDummyMarker)
+
+ def setUp(self):
+ obj = Item('obj')
+ self.helpers = self._makeOne(obj, DummySetupEnviron())
+ provideAdapter(MarkerInterfacesAdapter, (IItem,))
+ provideInterface('', IDummyMarker)
+
+ def tearDown(self):
+ cleanUp()
+
+ def test__extractMarkers(self):
+ self._populate(self.helpers.context)
+ doc = self.helpers._doc = PrettyDocument()
+ node = doc.createElement('dummy')
+ node.appendChild(self.helpers._extractMarkers())
+ doc.appendChild(node)
+
+ self.assertEqual(doc.toprettyxml(' '), _NORMAL_MARKER_EXPORT)
+
+ def test__purgeMarkers(self):
+ obj = self.helpers.context
+ self._populate(obj)
+ self.failUnless(IDummyMarker.providedBy(obj))
+
+ self.helpers._purgeMarkers()
+ self.failIf(IDummyMarker.providedBy(obj))
+
+ def test__initMarkers(self):
+ node = parseString(_NORMAL_MARKER_EXPORT).documentElement
+ self.helpers._initMarkers(node)
+ self.failUnless(IDummyMarker.providedBy(self.helpers.context))
+
+ doc = self.helpers._doc = PrettyDocument()
+ node = doc.createElement('dummy')
+ node.appendChild(self.helpers._extractMarkers())
+ doc.appendChild(node)
+
+ self.assertEqual(doc.toprettyxml(' '), _NORMAL_MARKER_EXPORT)
+
+
class PrettyDocumentTests(unittest.TestCase):
def test_attr_quoting(self):
@@ -414,6 +488,7 @@
e = parseString(expected).documentElement
self.assertEqual(e.childNodes[0].nodeValue, original)
+
def test_suite():
# reimport to make sure tests are run from Products
from Products.GenericSetup.tests.test_utils import UtilsTests
@@ -421,6 +496,7 @@
return unittest.TestSuite((
unittest.makeSuite(UtilsTests),
unittest.makeSuite(PropertyManagerHelpersTests),
+ unittest.makeSuite(MarkerInterfaceHelpersTests),
unittest.makeSuite(PrettyDocumentTests),
))
Modified: Products.GenericSetup/trunk/Products/GenericSetup/utils.py
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/utils.py 2008-02-22 09:40:57 UTC (rev 84134)
+++ Products.GenericSetup/trunk/Products/GenericSetup/utils.py 2008-02-22 14:34:13 UTC (rev 84135)
@@ -33,8 +33,10 @@
from Globals import InitializeClass
from Globals import package_home
from OFS.interfaces import IOrderedContainer
+from Products.Five.utilities.interfaces import IMarkerInterfaces
from zope.component import queryMultiAdapter
from zope.deprecation import deprecated
+from zope.interface import directlyProvides
from zope.interface import implements
from zope.interface import implementsOnly
from zope.interface import providedBy
@@ -753,6 +755,37 @@
obj._updateProperty(prop_id, prop_value)
+class MarkerInterfaceHelpers(object):
+
+ """Marker interface im- and export helpers.
+ """
+
+ def _extractMarkers(self):
+ fragment = self._doc.createDocumentFragment()
+ adapted = IMarkerInterfaces(self.context)
+
+ for marker_id in adapted.getDirectlyProvidedNames():
+ node = self._doc.createElement('marker')
+ node.setAttribute('name', marker_id)
+ fragment.appendChild(node)
+
+ return fragment
+
+ def _purgeMarkers(self):
+ directlyProvides(self.context)
+
+ def _initMarkers(self, node):
+ markers = []
+ adapted = IMarkerInterfaces(self.context)
+
+ for child in node.childNodes:
+ if child.nodeName != 'marker':
+ continue
+ markers.append(str(child.getAttribute('name')))
+
+ adapted.update(adapted.dottedToInterfaces(markers))
+
+
def exportObjects(obj, parent_path, context):
""" Export subobjects recursively.
"""
More information about the Checkins
mailing list