summaryrefslogtreecommitdiff
path: root/test/base
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-03-11 12:27:10 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2014-03-11 12:27:10 -0400
commit009df6a3d041e517cc9efa74d3c87184357a5006 (patch)
tree1f76d29b586de7052c1baaf286407d4245795788 /test/base
parent043dc4a2c1eef11abc04919d0cc093f5424028e5 (diff)
downloadsqlalchemy-009df6a3d041e517cc9efa74d3c87184357a5006.tar.gz
- Added a new keyword argument ``once=True`` to :func:`.event.listen`
and :func:`.event.listens_for`. This is a convenience feature which will wrap the given listener such that it is only invoked once.
Diffstat (limited to 'test/base')
-rw-r--r--test/base/test_events.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/test/base/test_events.py b/test/base/test_events.py
index 8d4728a9f..4ae89fe17 100644
--- a/test/base/test_events.py
+++ b/test/base/test_events.py
@@ -1045,6 +1045,31 @@ class RemovalTest(fixtures.TestBase):
eq_(f1.mock.mock_calls, [call("x")])
eq_(f2.mock.mock_calls, [call("x"), call("y")])
+ def test_once(self):
+ Target = self._fixture()
+
+ m1 = Mock()
+ m2 = Mock()
+ m3 = Mock()
+ m4 = Mock()
+
+ event.listen(Target, "event_one", m1)
+ event.listen(Target, "event_one", m2, once=True)
+ event.listen(Target, "event_one", m3, once=True)
+
+ t1 = Target()
+ t1.dispatch.event_one("x")
+ t1.dispatch.event_one("y")
+
+ event.listen(Target, "event_one", m4, once=True)
+ t1.dispatch.event_one("z")
+ t1.dispatch.event_one("q")
+
+ eq_(m1.mock_calls, [call("x"), call("y"), call("z"), call("q")])
+ eq_(m2.mock_calls, [call("x")])
+ eq_(m3.mock_calls, [call("x")])
+ eq_(m4.mock_calls, [call("z")])
+
def test_propagate(self):
Target = self._fixture()