diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2018-02-19 16:59:42 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2018-02-19 17:01:43 -0500 |
| commit | 1393eac44c49299e733a5181f387ba140aaa3e44 (patch) | |
| tree | 228ea8203b49c247280e2b2bfdc314df1fc47629 /test/base | |
| parent | 20aee85b44cb8847aedb4196dc720a7feea0f584 (diff) | |
| download | sqlalchemy-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.py | 58 |
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): |
