2016-07-28 00:42:00 -04:00
|
|
|
"""Event tests"""
|
2016-08-23 23:54:29 -04:00
|
|
|
import inspect
|
2016-08-23 23:44:05 -04:00
|
|
|
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
|
|
|
|
2016-08-23 23:44:05 -04:00
|
|
|
@pytest.fixture
|
|
|
|
def events():
|
|
|
|
return EventManager()
|
2016-07-28 00:42:00 -04:00
|
|
|
|
2016-11-28 18:57:41 -05:00
|
|
|
|
2016-08-23 23:44:05 -04:00
|
|
|
def test_event_calling(events):
|
2016-07-28 00:42:00 -04:00
|
|
|
called = False
|
2016-08-23 23:44:05 -04:00
|
|
|
|
|
|
|
@events.on_test
|
2016-07-28 00:42:00 -04:00
|
|
|
def _(spam):
|
|
|
|
nonlocal called
|
|
|
|
called = spam
|
|
|
|
|
2016-08-23 23:44:05 -04:00
|
|
|
events.on_test.fire("eggs")
|
2016-07-28 00:42:00 -04:00
|
|
|
|
|
|
|
assert called == "eggs"
|
|
|
|
|
2016-11-28 18:57:41 -05:00
|
|
|
|
2016-08-23 23:44:05 -04:00
|
|
|
def test_event_returns(events):
|
2016-07-28 00:42:00 -04:00
|
|
|
called = 0
|
|
|
|
|
2016-08-23 23:44:05 -04:00
|
|
|
@events.on_test
|
2016-08-15 23:13:44 -04:00
|
|
|
def on_test():
|
2016-07-28 00:42:00 -04:00
|
|
|
nonlocal called
|
|
|
|
called += 1
|
2016-08-23 23:44:05 -04:00
|
|
|
return 1
|
2016-07-28 00:42:00 -04:00
|
|
|
|
2016-08-23 23:44:05 -04:00
|
|
|
@events.on_test
|
2016-07-28 00:42:00 -04:00
|
|
|
def second():
|
|
|
|
nonlocal called
|
|
|
|
called += 1
|
2016-08-23 23:44:05 -04:00
|
|
|
return 2
|
2016-07-28 00:42:00 -04:00
|
|
|
|
2016-08-23 23:44:05 -04:00
|
|
|
vals = events.on_test.fire()
|
2016-07-28 00:42:00 -04:00
|
|
|
|
2016-08-23 23:44:05 -04:00
|
|
|
assert called == 2
|
|
|
|
assert set(vals) == {1, 2}
|
2016-08-15 22:59:30 -04:00
|
|
|
|
2016-11-28 18:57:41 -05:00
|
|
|
|
2016-08-23 23:44:05 -04:00
|
|
|
def test_validator(events):
|
|
|
|
called = None
|
2016-08-15 22:59:30 -04:00
|
|
|
|
2016-08-23 23:44:05 -04:00
|
|
|
@events.on_test
|
2016-08-15 22:59:30 -04:00
|
|
|
def first(n):
|
|
|
|
nonlocal called
|
|
|
|
called += 1
|
|
|
|
return False
|
|
|
|
|
|
|
|
@first.validator
|
|
|
|
def v(n):
|
|
|
|
return n == 'spam'
|
|
|
|
|
2016-08-23 23:44:05 -04:00
|
|
|
@events.on_test
|
2016-08-15 22:59:30 -04:00
|
|
|
def second(n):
|
|
|
|
nonlocal called
|
|
|
|
called += 1
|
|
|
|
return False
|
|
|
|
|
2016-08-23 23:44:05 -04:00
|
|
|
called = 0
|
|
|
|
events.on_test.fire('egg')
|
2016-08-15 22:59:30 -04:00
|
|
|
assert called == 1
|
|
|
|
|
|
|
|
called = 0
|
2016-08-23 23:44:05 -04:00
|
|
|
events.on_test.fire('spam')
|
2016-08-15 22:59:30 -04:00
|
|
|
assert called == 2
|
2016-08-15 23:22:19 -04:00
|
|
|
|
2016-08-23 23:44:05 -04:00
|
|
|
|
|
|
|
def test_eventdoc(events):
|
2016-08-15 23:22:19 -04:00
|
|
|
docstring = "Test event"
|
2016-08-23 23:44:05 -04:00
|
|
|
events.doc('on_test', docstring)
|
2016-08-15 23:22:19 -04:00
|
|
|
|
2016-08-23 23:54:29 -04:00
|
|
|
assert inspect.getdoc(events.on_test) == docstring
|
|
|
|
|
|
|
|
|
|
|
|
def test_transmogrify(events):
|
|
|
|
docstring = "Test event"
|
|
|
|
events.doc('on_test', docstring)
|
|
|
|
|
|
|
|
@events.on_test
|
|
|
|
def func():
|
|
|
|
pass
|
|
|
|
|
|
|
|
assert isinstance(events.on_test, Event)
|
|
|
|
assert len(events.on_test) == 1
|
|
|
|
assert inspect.getdoc(events.on_test) == docstring
|
|
|
|
|
|
|
|
events.transmogrify('on_test', LoadEvent)
|
|
|
|
|
|
|
|
assert isinstance(events.on_test, LoadEvent)
|
|
|
|
assert len(events.on_test) == 1
|
2016-08-23 23:44:05 -04:00
|
|
|
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"
|
|
|
|
events.doc('on_test', docstring)
|
|
|
|
|
|
|
|
@events.on_test
|
|
|
|
def func():
|
|
|
|
pass
|
|
|
|
|
|
|
|
assert isinstance(events.on_test, Event)
|
|
|
|
assert len(events.on_test) == 1
|
|
|
|
assert inspect.getdoc(events.on_test) == docstring
|
|
|
|
|
|
|
|
events.transmogrify('on_test', 'LoadEvent')
|
|
|
|
|
|
|
|
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):
|
|
|
|
events.transmogrify('on_test', 'LoadEvent')
|
|
|
|
called = 0
|
|
|
|
|
|
|
|
@events.on_test
|
|
|
|
def on_test():
|
|
|
|
nonlocal called
|
|
|
|
called += 1
|
|
|
|
|
|
|
|
assert called == 0
|
|
|
|
|
|
|
|
events.on_test.fire()
|
|
|
|
assert called == 1
|
|
|
|
|
|
|
|
@events.on_test
|
|
|
|
def second():
|
|
|
|
nonlocal called
|
|
|
|
called += 1
|
|
|
|
|
|
|
|
assert called == 2
|
|
|
|
|
|
|
|
def test_load_2nd_call(events):
|
|
|
|
events.transmogrify('on_test', 'LoadEvent')
|
|
|
|
called = 0
|
|
|
|
|
|
|
|
@events.on_test
|
|
|
|
def on_test():
|
|
|
|
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():
|
|
|
|
if 'pytest' in name:
|
|
|
|
continue
|
2016-08-28 09:57:31 -04:00
|
|
|
assert inspect.getdoc(ev)
|