MCPcopy
hub / github.com/sqlalchemy/sqlalchemy / test_once_unless_exception

Method test_once_unless_exception

test/base/test_events.py:1497–1559  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

1495 eq_(m4.mock_calls, [call("z")])
1496
1497 def test_once_unless_exception(self):
1498 Target = self._fixture()
1499
1500 m1 = Mock()
1501 m2 = Mock()
1502 m3 = Mock()
1503 m4 = Mock()
1504
1505 m1.side_effect = ValueError
1506 m2.side_effect = ValueError
1507 m3.side_effect = ValueError
1508
1509 event.listen(Target, "event_one", m1)
1510 event.listen(Target, "event_one", m2, _once_unless_exception=True)
1511 event.listen(Target, "event_one", m3, _once_unless_exception=True)
1512
1513 t1 = Target()
1514
1515 # only m1 is called, raises
1516 assert_raises(ValueError, t1.dispatch.event_one, "x")
1517
1518 # now m1 and m2 can be called but not m3
1519 m1.side_effect = None
1520
1521 assert_raises(ValueError, t1.dispatch.event_one, "y")
1522
1523 # now m3 can be called
1524 m2.side_effect = None
1525
1526 event.listen(Target, "event_one", m4, _once_unless_exception=True)
1527 assert_raises(ValueError, t1.dispatch.event_one, "z")
1528
1529 assert_raises(ValueError, t1.dispatch.event_one, "q")
1530
1531 eq_(m1.mock_calls, [call("x"), call("y"), call("z"), call("q")])
1532 eq_(m2.mock_calls, [call("y"), call("z")])
1533 eq_(m3.mock_calls, [call("z"), call("q")])
1534 eq_(m4.mock_calls, []) # m4 never got called because m3 blocked it
1535
1536 # now m4 can be called
1537 m3.side_effect = None
1538
1539 t1.dispatch.event_one("p")
1540 eq_(
1541 m1.mock_calls,
1542 [call("x"), call("y"), call("z"), call("q"), call("p")],
1543 )
1544
1545 # m2 already got called, so no "p"
1546 eq_(m2.mock_calls, [call("y"), call("z")])
1547 eq_(m3.mock_calls, [call("z"), call("q"), call("p")])
1548 eq_(m4.mock_calls, [call("p")])
1549
1550 t1.dispatch.event_one("j")
1551 eq_(
1552 m1.mock_calls,
1553 [call("x"), call("y"), call("z"), call("q"), call("p"), call("j")],
1554 )

Callers

nothing calls this directly

Calls 7

_fixtureMethod · 0.95
assert_raisesFunction · 0.90
eq_Function · 0.90
callFunction · 0.85
TargetClass · 0.70
listenMethod · 0.45
event_oneMethod · 0.45

Tested by

no test coverage detected