def test_delegate_equals(): assert Delegate() is not Delegate() assert Delegate() == Delegate() assert Delegate(lambda: None) != Delegate(lambda: None) fn = lambda: None assert Delegate(fn) == Delegate(fn) assert Delegate(fn) != Delegate(fn, fn)
def test_delegate_eq_items(): def func1(): pass def func2(): pass def func3(): pass d1 = Delegate() d1 += func1 d2 = Delegate() d2 += func1 assert d1 == d2 d1 += func2 d2 += func2 assert d1 == d2 d1 += func3 d2 += func3 assert d1 == d2 d1 += func1 d2 += func2 assert d1 != d2
def test_delegate_add_from_none(): d = None d += Delegate() assert isinstance(d, Delegate) assert not d def func(): return 1 d += func assert d() == 1
def test_delegate_invoke_return_value(): def func1(): return 1 def func2(): return 2 d = Delegate() d += func1 d += func2 assert d() == 2, 'should be the last one'
def test_delegate_invoke_order(): def func1(ls: list): ls.append(1) def func2(ls: list): ls.append(2) d = Delegate() d += func1 d += func2 dest = [] d(dest) assert dest == [1, 2], 'should first in first run'
def test_delegate_remove_order(): def func1(ls: list): ls.append(1) def func2(ls: list): ls.append(2) d = Delegate() d += func1 d += func2 d += func1 d -= func1 src = [] d(src) assert src == [1, 2], 'should remove the last match'
def test_delegate_testable(): assert not Delegate(), 'test empty delegate should be false' assert Delegate(lambda: None) assert Delegate(lambda: None, lambda: None)
def test_empty_delegate_invoke_raise_error(): with raises(InvokeEmptyDelegateError): Delegate()()
class A: d = Delegate()
def test_delegate_add_none(): d = Delegate() with raises(TypeError): d += None