def test_spec_callback_malformed(self): def cb(sideeffect, *a, **kw): sideeffect.append((a, kw)) check = [] spec = Spec() spec.add_callback('cleanup', cb, check, 1, keyword='foo') # malformed data shouldn't be added, but just in case. spec._callbacks['cleanup'].append((cb, )) spec._callbacks['cleanup'].append((cb, [], [])) spec._callbacks['cleanup'].append((cb, {}, {})) spec._callbacks['cleanup'].append((None, [], {})) spec.do_callbacks('cleanup') self.assertEqual(check, [ ((1, ), { 'keyword': 'foo' }), ])
def test_spec_callback(self): def cb(sideeffect, *a, **kw): sideeffect.append((a, kw)) check = [] spec = Spec() spec.add_callback('cleanup', cb, check, 1, keyword='foo') spec.add_callback('cleanup', cb, check, 2, keyword='bar') spec.do_callbacks('foo') self.assertEqual(check, []) spec.do_callbacks('cleanup') # cleanup done lifo self.assertEqual(check, [ ((2, ), { 'keyword': 'bar' }), ((1, ), { 'keyword': 'foo' }), ])
def test_spec_callback_broken(self): spec = Spec() spec.add_callback('cleanup', fake_error(Exception)) with pretty_logging(stream=StringIO()) as s: spec.do_callbacks('cleanup') self.assertIn('Traceback', s.getvalue())