xonsh/tests/test_events.py

164 lines
3.1 KiB
Python
Raw Normal View History

2016-07-28 00:42:00 -04:00
"""Event tests"""
2016-08-23 23:54:29 -04:00
import inspect
import pytest
2016-08-23 23:54:29 -04:00
from xonsh.events import EventManager, Event, LoadEvent
2016-07-28 00:42:00 -04:00
2016-11-28 18:57:41 -05:00
@pytest.fixture
def events():
return EventManager()
2016-07-28 00:42:00 -04:00
2016-11-28 18:57:41 -05:00
def test_event_calling(events):
2016-07-28 00:42:00 -04:00
called = False
@events.on_test
2017-01-14 18:12:09 -05:00
def _(spam, **_):
2016-07-28 00:42:00 -04:00
nonlocal called
called = spam
events.on_test.fire(spam="eggs")
2016-07-28 00:42:00 -04:00
assert called == "eggs"
2016-11-28 18:57:41 -05:00
def test_event_returns(events):
2016-07-28 00:42:00 -04:00
called = 0
@events.on_test
2017-01-14 18:12:09 -05:00
def on_test(**_):
2016-07-28 00:42:00 -04:00
nonlocal called
called += 1
return 1
2016-07-28 00:42:00 -04:00
@events.on_test
2017-01-14 18:12:09 -05:00
def second(**_):
2016-07-28 00:42:00 -04:00
nonlocal called
called += 1
return 2
2016-07-28 00:42:00 -04:00
vals = events.on_test.fire()
2016-07-28 00:42:00 -04:00
assert called == 2
assert set(vals) == {1, 2}
2016-11-28 18:57:41 -05:00
def test_validator(events):
called = None
@events.on_test
2017-01-14 18:12:09 -05:00
def first(n, **_):
nonlocal called
called += 1
return False
@first.validator
def v(n):
2018-08-30 09:18:49 -05:00
return n == "spam"
@events.on_test
2017-01-14 18:12:09 -05:00
def second(n, **_):
nonlocal called
called += 1
return False
called = 0
2018-08-30 09:18:49 -05:00
events.on_test.fire(n="egg")
assert called == 1
called = 0
2018-08-30 09:18:49 -05:00
events.on_test.fire(n="spam")
assert called == 2
def test_eventdoc(events):
docstring = "Test event"
2018-08-30 09:18:49 -05:00
events.doc("on_test", docstring)
2016-08-23 23:54:29 -04:00
assert inspect.getdoc(events.on_test) == docstring
def test_transmogrify(events):
docstring = "Test event"
2018-08-30 09:18:49 -05:00
events.doc("on_test", docstring)
2016-08-23 23:54:29 -04:00
@events.on_test
2017-01-14 18:12:09 -05:00
def func(**_):
2016-08-23 23:54:29 -04:00
pass
assert isinstance(events.on_test, Event)
assert len(events.on_test) == 1
assert inspect.getdoc(events.on_test) == docstring
2018-08-30 09:18:49 -05:00
events.transmogrify("on_test", LoadEvent)
2016-08-23 23:54:29 -04:00
assert isinstance(events.on_test, LoadEvent)
assert len(events.on_test) == 1
assert inspect.getdoc(events.on_test) == docstring
2016-08-23 23:58:22 -04:00
2016-11-28 18:57:41 -05:00
2016-08-23 23:58:22 -04:00
def test_transmogrify_by_string(events):
docstring = "Test event"
2018-08-30 09:18:49 -05:00
events.doc("on_test", docstring)
2016-08-23 23:58:22 -04:00
@events.on_test
2017-01-14 18:12:09 -05:00
def func(**_):
2016-08-23 23:58:22 -04:00
pass
assert isinstance(events.on_test, Event)
assert len(events.on_test) == 1
assert inspect.getdoc(events.on_test) == docstring
2018-08-30 09:18:49 -05:00
events.transmogrify("on_test", "LoadEvent")
2016-08-23 23:58:22 -04:00
assert isinstance(events.on_test, LoadEvent)
assert len(events.on_test) == 1
assert inspect.getdoc(events.on_test) == docstring
2016-08-27 21:44:26 -04:00
2016-11-28 18:57:41 -05:00
def test_load(events):
2018-08-30 09:18:49 -05:00
events.transmogrify("on_test", "LoadEvent")
2016-11-28 18:57:41 -05:00
called = 0
@events.on_test
2017-01-14 18:12:09 -05:00
def on_test(**_):
2016-11-28 18:57:41 -05:00
nonlocal called
called += 1
assert called == 0
events.on_test.fire()
assert called == 1
@events.on_test
2017-01-14 18:12:09 -05:00
def second(**_):
2016-11-28 18:57:41 -05:00
nonlocal called
called += 1
assert called == 2
2018-08-30 09:18:49 -05:00
2016-11-28 18:57:41 -05:00
def test_load_2nd_call(events):
2018-08-30 09:18:49 -05:00
events.transmogrify("on_test", "LoadEvent")
2016-11-28 18:57:41 -05:00
called = 0
@events.on_test
2017-01-14 18:12:09 -05:00
def on_test(**_):
2016-11-28 18:57:41 -05:00
nonlocal called
called += 1
assert called == 0
events.on_test.fire()
assert called == 1
events.on_test.fire()
assert called == 1
2016-08-27 21:44:26 -04:00
def test_typos(xonsh_builtins):
2016-08-28 10:32:10 -04:00
for name, ev in vars(xonsh_builtins.events).items():
2018-08-30 09:18:49 -05:00
if "pytest" in name:
2016-08-28 10:32:10 -04:00
continue
2016-08-28 09:57:31 -04:00
assert inspect.getdoc(ev)