def test_optionalcallarg(self): class P1: def m(self, x): return x call = MultiCall([P1().m], 23) assert call.execute() == [23] assert call.execute(firstresult=True) == 23
def test_call_exclude_other_results(self): def m(__call__): __call__.exclude_other_results() return 10 def n(): return 1 call = MultiCall([n, n, m, n]) res = call.execute() assert res == [10]
def test_call_subexecute(self): def m(__call__): subresult = __call__.execute(firstresult=True) return subresult + 1 def n(): return 1 call = MultiCall([n, m]) res = call.execute(firstresult=True) assert res == 2
def test_call_passing(self): class P1: def m(self, __call__, x): assert __call__.currentmethod == self.m assert len(__call__.results) == 1 assert not __call__.methods return 17 class P2: def m(self, __call__, x): assert __call__.currentmethod == self.m assert __call__.args assert __call__.results == [] assert __call__.methods return 23 p1 = P1() p2 = P2() multicall = MultiCall([p1.m, p2.m], 23) reslist = multicall.execute() assert len(reslist) == 2 # ensure reversed order assert reslist == [23, 17]
def test_uses_copy_of_methods(self): l = [lambda: 42] mc = MultiCall(l) l[:] = [] res = mc.execute() return res == 42