Commit 14068feb authored by Marius Gedminas's avatar Marius Gedminas

Send ``IContainerModifiedEvent`` *after* the container is modified.

Fixes https://bugs.launchpad.net/zope.container/+bug/705600.
parent 6e08c630
......@@ -5,6 +5,9 @@ CHANGES
3.12.1 (unreleased)
-------------------
- Send ``IContainerModifiedEvent`` *after* the container is modified
(LP#705600).
3.12.0 (2010-12-14)
-------------------
......
......@@ -107,16 +107,17 @@ class BTreeContainer(Contained, Persistent):
def get(self, key, default=None):
'''See interface `IReadContainer`'''
return self._SampleContainer__data.get(key, default)
def __setitem__(self, key, value):
setitem(self, self._setitemf, key, value)
def __delitem__(self, key):
# make sure our lazy property gets set
l = self.__len
uncontained(self._SampleContainer__data[key], self, key)
item = self._SampleContainer__data[key]
del self._SampleContainer__data[key]
l.change(-1)
uncontained(item, self, key)
has_key = __contains__
......
......@@ -20,6 +20,9 @@ from zope.component.testing import setUp, tearDown
from zope.container.tests.test_icontainer import TestSampleContainer
from zope.container.btree import BTreeContainer
from zope.container.interfaces import IBTreeContainer
from zope.container.interfaces import IContainerModifiedEvent
from zope.container.contained import Contained
from zope.lifecycleevent.interfaces import IObjectRemovedEvent
class TestBTreeContainer(TestSampleContainer, TestCase):
......@@ -162,10 +165,44 @@ class TestBTreeSpecials(TestCase):
self.assertEqual(list(iterable), first_time)
class TestBTreeEvents(TestCase):
def setUp(self):
from zope.event import subscribers
self._old_subscribers = subscribers[:]
subscribers[:] = []
def tearDown(self):
from zope.event import subscribers
subscribers[:] = self._old_subscribers
def testDeletion(self):
from zope.event import subscribers
tree = BTreeContainer()
item = Contained()
tree['42'] = item
events = []
def subscriber(event):
events.append(event)
# events should happen after the deletion, not before)
self.assertEqual(len(tree), 0)
self.assertEqual(list(tree), [])
subscribers.append(subscriber)
del tree['42']
self.assertEqual(item.__name__, None)
self.assertEqual(item.__parent__, None)
self.assertEqual(len(events), 2)
self.assertTrue(IObjectRemovedEvent.providedBy(events[0]))
self.assertTrue(IContainerModifiedEvent.providedBy(events[1]))
def test_suite():
return TestSuite((
makeSuite(TestBTreeContainer),
makeSuite(TestBTreeSpecials),
makeSuite(TestBTreeEvents),
DocTestSuite('zope.container.btree',
setUp=setUp,
tearDown=tearDown),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment