def test_replace_explicit_requires_returns(self): m = Mock() class T1(object): pass class T2(object): pass class T3(object): pass class T4(object): pass t2 = T2() def job0(): return t2 @requires(T1) @returns(T3) def job1(obj): raise Exception() # pragma: nocover job2 = requires(T4)(m.job2) runner = Runner(job0, job1, job2) runner.replace(job1, m.job1, requires=T2, returns=T4) runner() compare([ call.job1(t2), call.job2(m.job1.return_value), ], actual=m.mock_calls)
def test_replace_explicit_with_labels(self): m = Mock() runner = Runner(m.job0) runner.add_label('foo') runner['foo'].add(m.job1) runner['foo'].add(m.job2) runner.replace(m.job2, m.jobnew, returns='mock') runner() compare([call.job0(), call.job1(), call.jobnew()], m.mock_calls) # check added_using is handled correctly m.reset_mock() runner2 = runner.clone(added_using='foo') runner2() compare([call.job1(), call.jobnew()], actual=m.mock_calls) # check runner's label pointer is sane m.reset_mock() runner['foo'].add(m.job3) runner() compare( [call.job0(), call.job1(), call.jobnew(), call.job3()], actual=m.mock_calls)
def test_replace_explicit_at_start(self): m = Mock() runner = Runner(m.job1, m.job2) runner.replace(m.job1, m.jobnew, returns='mock') runner() compare([ call.jobnew(), call.job2(), ], actual=m.mock_calls)
def test_replace_keep_explicit_requirements(self): def foo(): return 'bar' def barbar(sheep): return sheep*2 runner = Runner() runner.add(foo, returns='flossy') runner.add(barbar, requires='flossy') compare(runner(), expected='barbar') runner.replace(barbar, lambda dog: None) compare(runner(), expected=None)
def test_replace_keep_explicit_requirements(self): def foo(): return 'bar' def barbar(sheep): return sheep * 2 runner = Runner() runner.add(foo, returns='flossy') runner.add(barbar, requires='flossy') compare(runner(), expected='barbar') runner.replace(barbar, lambda dog: None) compare(runner(), expected=None)
def test_replace_for_testing(self): m = Mock() class T1(object): pass class T2(object): pass t1 = T1() t2 = T2() def job1(): raise Exception() # pragma: nocover @requires(T1) def job2(obj): raise Exception() # pragma: nocover @requires(T2) def job3(obj): raise Exception() # pragma: nocover runner = Runner(job1, job2, job3) runner.replace(job1, m.job1) m.job1.return_value = t1 runner.replace(job2, m.job2) m.job2.return_value = t2 runner.replace(job3, m.job3) runner() compare([ call.job1(), call.job2(t1), call.job3(t2), ], m.mock_calls)
def test_replace_explicit_with_labels(self): m = Mock() runner = Runner(m.job0) runner.add_label('foo') runner['foo'].add(m.job1) runner['foo'].add(m.job2) runner.replace(m.job2, m.jobnew, returns='mock') runner() compare([ call.job0(), call.job1(), call.jobnew() ], m.mock_calls) # check added_using is handled correctly m.reset_mock() runner2 = runner.clone(added_using='foo') runner2() compare([ call.job1(), call.jobnew() ], actual=m.mock_calls) # check runner's label pointer is sane m.reset_mock() runner['foo'].add(m.job3) runner() compare([ call.job0(), call.job1(), call.jobnew(), call.job3() ], actual=m.mock_calls)