diff options
Diffstat (limited to '')
-rw-r--r-- | tests/test_events.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/test_events.py b/tests/test_events.py new file mode 100644 index 0000000..8f01a67 --- /dev/null +++ b/tests/test_events.py @@ -0,0 +1,56 @@ +"""Test the EventManager class.""" + +import pytest + +from sphinx.errors import ExtensionError +from sphinx.events import EventManager + + +def test_event_priority(): + result = [] + events = EventManager(object()) # pass an dummy object as an app + events.connect('builder-inited', lambda app: result.append(1), priority = 500) + events.connect('builder-inited', lambda app: result.append(2), priority = 500) + events.connect('builder-inited', lambda app: result.append(3), priority = 200) # eariler + events.connect('builder-inited', lambda app: result.append(4), priority = 700) # later + events.connect('builder-inited', lambda app: result.append(5), priority = 500) + + events.emit('builder-inited') + assert result == [3, 1, 2, 5, 4] + + +class FakeApp: + def __init__(self, pdb: bool = False): + self.pdb = pdb + + +def test_event_allowed_exceptions(): + def raise_error(app): + raise RuntimeError + + events = EventManager(FakeApp()) # pass an dummy object as an app + events.connect('builder-inited', raise_error, priority=500) + + # all errors are converted to ExtensionError + with pytest.raises(ExtensionError): + events.emit('builder-inited') + + # Allow RuntimeError (pass-through) + with pytest.raises(RuntimeError): + events.emit('builder-inited', allowed_exceptions=(RuntimeError,)) + + +def test_event_pdb(): + def raise_error(app): + raise RuntimeError + + events = EventManager(FakeApp(pdb=True)) # pass an dummy object as an app + events.connect('builder-inited', raise_error, priority=500) + + # errors aren't converted + with pytest.raises(RuntimeError): + events.emit('builder-inited') + + # Allow RuntimeError (pass-through) + with pytest.raises(RuntimeError): + events.emit('builder-inited', allowed_exceptions=(RuntimeError,)) |