mirror of
https://github.com/xonsh/xonsh.git
synced 2025-03-04 08:24:40 +01:00

* refactor: remove usage of global variables in abbrevs.py * chore: add flake8-mutable to prevent mutable defaults * fix: abbrevs expand test * refactor: add xonsh session singleton * refactor: fix circular errors when using xonshSession as singleton * refactor: remove black magicked builtin attributes * style: black format tests as well * refactor: update tests to use xonsh-session singleton * refactor: update abbrevs to not use builtins * test: remove DummyCommandsCache and patch orig class * fix: failing test_command_completers * test: use monkeypatch to update xession fixture * fix: failing test_pipelines * fix: failing test_main * chore: run test suit as single invocation * test: fix tests/test_xonsh.xsh * refactor: remove builtins from docs/conf.py * fix: mypy error in jobs * fix: test error from test_main * test: close xession error in test_command_completers * chore: use pytest-cov for reporting coverage this will include subprocess calls, and will increase coverage * style:
169 lines
3.2 KiB
Python
169 lines
3.2 KiB
Python
"""Event tests"""
|
|
import inspect
|
|
import pytest
|
|
from xonsh.events import EventManager, Event, LoadEvent
|
|
|
|
|
|
@pytest.fixture
|
|
def events():
|
|
return EventManager()
|
|
|
|
|
|
def test_event_calling(events):
|
|
called = False
|
|
|
|
@events.on_test
|
|
def _(spam, **_):
|
|
nonlocal called
|
|
called = spam
|
|
|
|
events.on_test.fire(spam="eggs")
|
|
|
|
assert called == "eggs"
|
|
|
|
|
|
def test_event_returns(events):
|
|
called = 0
|
|
|
|
@events.on_test
|
|
def on_test(**_):
|
|
nonlocal called
|
|
called += 1
|
|
return 1
|
|
|
|
@events.on_test
|
|
def second(**_):
|
|
nonlocal called
|
|
called += 1
|
|
return 2
|
|
|
|
vals = events.on_test.fire()
|
|
|
|
assert called == 2
|
|
assert set(vals) == {1, 2}
|
|
|
|
|
|
def test_validator(events):
|
|
called = None
|
|
|
|
@events.on_test
|
|
def first(n, **_):
|
|
nonlocal called
|
|
called += 1
|
|
return False
|
|
|
|
@first.validator
|
|
def v(n):
|
|
return n == "spam"
|
|
|
|
@events.on_test
|
|
def second(n, **_):
|
|
nonlocal called
|
|
called += 1
|
|
return False
|
|
|
|
called = 0
|
|
events.on_test.fire(n="egg")
|
|
assert called == 1
|
|
|
|
called = 0
|
|
events.on_test.fire(n="spam")
|
|
assert called == 2
|
|
|
|
|
|
def test_eventdoc(events):
|
|
docstring = "Test event"
|
|
events.doc("on_test", docstring)
|
|
|
|
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
|
|
assert inspect.getdoc(events.on_test) == docstring
|
|
|
|
|
|
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
|
|
|
|
|
|
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
|
|
|
|
|
|
def test_typos(xession):
|
|
for name, ev in vars(xession.builtins.events).items():
|
|
if "pytest" in name:
|
|
continue
|
|
assert inspect.getdoc(ev)
|
|
|
|
|
|
def test_exists(events):
|
|
events.doc("on_test", "Test event")
|
|
assert events.exists("on_test")
|
|
assert not events.exists("on_best")
|