diff options
| author | Jason Kirtland <jek@discorporate.us> | 2008-04-04 19:07:30 +0000 |
|---|---|---|
| committer | Jason Kirtland <jek@discorporate.us> | 2008-04-04 19:07:30 +0000 |
| commit | afd8431d4d6527d32d43f0a6c11d75ba2b0adcaf (patch) | |
| tree | 88f13aaf756078b1eb7c10c5647a1885b9eaeac5 /test/base | |
| parent | de209ded31c3914d70e5372b0c49b6fd84639d48 (diff) | |
| download | sqlalchemy-afd8431d4d6527d32d43f0a6c11d75ba2b0adcaf.tar.gz | |
- Pool listeners may now be specified as a duck-type of PoolListener or a dict of callables, your choice.
Diffstat (limited to 'test/base')
| -rw-r--r-- | test/base/utils.py | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/test/base/utils.py b/test/base/utils.py index fc72cf8e1..a00338f5f 100644 --- a/test/base/utils.py +++ b/test/base/utils.py @@ -419,6 +419,100 @@ class SymbolTest(TestBase): assert rt is sym1 assert rt is sym2 +class AsInterfaceTest(TestBase): + class Something(object): + def _ignoreme(self): pass + def foo(self): pass + def bar(self): pass + + class Partial(object): + def bar(self): pass + + class Object(object): pass + + def test_instance(self): + obj = object() + self.assertRaises(TypeError, util.as_interface, obj, + cls=self.Something) + + self.assertRaises(TypeError, util.as_interface, obj, + methods=('foo')) + + self.assertRaises(TypeError, util.as_interface, obj, + cls=self.Something, required=('foo')) + + obj = self.Something() + self.assertEqual(obj, util.as_interface(obj, cls=self.Something)) + self.assertEqual(obj, util.as_interface(obj, methods=('foo',))) + self.assertEqual( + obj, util.as_interface(obj, cls=self.Something, + required=('outofband',))) + partial = self.Partial() + + slotted = self.Object() + slotted.bar = lambda self: 123 + + for obj in partial, slotted: + self.assertEqual(obj, util.as_interface(obj, cls=self.Something)) + self.assertRaises(TypeError, util.as_interface, obj, + methods=('foo')) + self.assertEqual(obj, util.as_interface(obj, methods=('bar',))) + self.assertEqual( + obj, util.as_interface(obj, cls=self.Something, + required=('bar',))) + self.assertRaises(TypeError, util.as_interface, obj, + cls=self.Something, required=('foo',)) + + self.assertRaises(TypeError, util.as_interface, obj, + cls=self.Something, required=self.Something) + + def test_dict(self): + obj = {} + + self.assertRaises(TypeError, util.as_interface, obj, + cls=self.Something) + self.assertRaises(TypeError, util.as_interface, obj, + methods=('foo')) + self.assertRaises(TypeError, util.as_interface, obj, + cls=self.Something, required=('foo')) + + def assertAdapted(obj, *methods): + assert isinstance(obj, type) + found = set([m for m in dir(obj) if not m.startswith('_')]) + for method in methods: + assert method in found + found.remove(method) + assert not found + + fn = lambda self: 123 + + obj = {'foo': fn, 'bar': fn} + + res = util.as_interface(obj, cls=self.Something) + assertAdapted(res, 'foo', 'bar') + + res = util.as_interface(obj, cls=self.Something, required=self.Something) + assertAdapted(res, 'foo', 'bar') + + res = util.as_interface(obj, cls=self.Something, required=('foo',)) + assertAdapted(res, 'foo', 'bar') + + res = util.as_interface(obj, methods=('foo', 'bar')) + assertAdapted(res, 'foo', 'bar') + + res = util.as_interface(obj, methods=('foo', 'bar', 'baz')) + assertAdapted(res, 'foo', 'bar') + + res = util.as_interface(obj, methods=('foo', 'bar'), required=('foo',)) + assertAdapted(res, 'foo', 'bar') + + self.assertRaises(TypeError, util.as_interface, obj, methods=('foo',)) + + self.assertRaises(TypeError, util.as_interface, obj, + methods=('foo', 'bar', 'baz'), required=('baz',)) + + obj = {'foo': 123} + self.assertRaises(TypeError, util.as_interface, obj, cls=self.Something) if __name__ == "__main__": testenv.main() |
