summaryrefslogtreecommitdiff
path: root/test/base
diff options
context:
space:
mode:
authorJason Kirtland <jek@discorporate.us>2008-04-04 19:07:30 +0000
committerJason Kirtland <jek@discorporate.us>2008-04-04 19:07:30 +0000
commitafd8431d4d6527d32d43f0a6c11d75ba2b0adcaf (patch)
tree88f13aaf756078b1eb7c10c5647a1885b9eaeac5 /test/base
parentde209ded31c3914d70e5372b0c49b6fd84639d48 (diff)
downloadsqlalchemy-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.py94
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()