summaryrefslogtreecommitdiff
path: root/test/base
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2018-02-19 16:59:42 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2018-02-19 17:01:43 -0500
commit1393eac44c49299e733a5181f387ba140aaa3e44 (patch)
tree228ea8203b49c247280e2b2bfdc314df1fc47629 /test/base
parent20aee85b44cb8847aedb4196dc720a7feea0f584 (diff)
downloadsqlalchemy-1393eac44c49299e733a5181f387ba140aaa3e44.tar.gz
Implement remove() for _empty_collection
Fixed regression caused in 1.2.3 due to fix from :ticket:`4181` where the changes to the event system involving :class:`.Engine` and :class:`.OptionEngine` did not accommodate for event removals, which would raise an ``AttributeError`` when invoked at the class level. Change-Id: I1c9083829d74dd710716d28b0eaca4fa15e86313 Fixes: #4190
Diffstat (limited to 'test/base')
-rw-r--r--test/base/test_events.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/test/base/test_events.py b/test/base/test_events.py
index b502a0348..288c6091f 100644
--- a/test/base/test_events.py
+++ b/test/base/test_events.py
@@ -1033,6 +1033,64 @@ class JoinTest(fixtures.TestBase):
)
+class DisableClsPropagateTest(fixtures.TestBase):
+
+ def setUp(self):
+ class TargetEvents(event.Events):
+ def event_one(self, target, arg):
+ pass
+
+ class BaseTarget(object):
+ dispatch = event.dispatcher(TargetEvents)
+
+ class SubTarget(BaseTarget):
+ _sa_propagate_class_events = False
+
+ def __init__(self, parent):
+ self.dispatch = self.dispatch._join(parent.dispatch)
+
+ self.BaseTarget = BaseTarget
+ self.SubTarget = SubTarget
+
+ def tearDown(self):
+ for cls in (self.SubTarget, self.BaseTarget):
+ if 'dispatch' in cls.__dict__:
+ event.base._remove_dispatcher(cls.__dict__['dispatch'].events)
+
+ def test_listen_invoke_clslevel(self):
+ canary = Mock()
+
+ event.listen(self.BaseTarget, "event_one", canary)
+
+ s1 = self.SubTarget(self.BaseTarget())
+ s1.dispatch.event_one()
+
+ eq_(canary.mock_calls, [call.event_one()])
+
+ def test_insert_invoke_clslevel(self):
+ canary = Mock()
+
+ event.listen(self.BaseTarget, "event_one", canary, insert=True)
+
+ s1 = self.SubTarget(self.BaseTarget())
+ s1.dispatch.event_one()
+
+ eq_(canary.mock_calls, [call.event_one()])
+
+ def test_remove_invoke_clslevel(self):
+ canary = Mock()
+
+ event.listen(self.BaseTarget, "event_one", canary)
+
+ s1 = self.SubTarget(self.BaseTarget())
+
+ event.remove(self.BaseTarget, "event_one", canary)
+
+ s1.dispatch.event_one()
+
+ eq_(canary.mock_calls, [])
+
+
class RemovalTest(fixtures.TestBase):
def _fixture(self):
class TargetEvents(event.Events):