Package zope :: Package proxy :: Package tests :: Module test_proxy
[show private | hide private]
[frames | no frames]

Module zope.proxy.tests.test_proxy

Test base proxy class.

$Id: test_proxy.py,v 1.2 2005/06/24 16:52:59 nyergler Exp $
Classes
Comparable  
ProxyTestCase  
Thing This class is expected to be a classic class.

Function Summary
  test_getProxiedObject()
  test_isProxy()
  test_ProxyIterator()
  test_queryInnerProxy()
  test_queryProxy()
  test_removeAllProxies()
  test_sameProxiedObjects()
  test_subclassing_proxies()
You can subclass ProxyBase
  test_suite()

Function Details

test_getProxiedObject()

>>> from zope.proxy import ProxyBase, getProxiedObject
>>> class C(object):
...     pass
>>> c = C()
>>> int(getProxiedObject(c) is c)
1

>>> p = ProxyBase(c)
>>> int(getProxiedObject(p) is c)
1

>>> p2 = ProxyBase(p)
>>> int(getProxiedObject(p2) is p)
1

test_isProxy()

>>> from zope.proxy import ProxyBase, isProxy
>>> class P1(ProxyBase):
...     pass
>>> class P2(ProxyBase):
...     pass
>>> class C(object):
...     pass
>>> c = C()
>>> int(isProxy(c))
0

>>> p = P1(c)
>>> int(isProxy(p))
1

>>> int(isProxy(p, P1))
1

>>> int(isProxy(p, P2))
0

>>> p = P2(p)
>>> int(isProxy(p, P1))
1

>>> int(isProxy(p, P2))
1

test_ProxyIterator()

>>> from zope.proxy import ProxyBase, ProxyIterator
>>> class C(object):
...     pass
>>> c = C()
>>> p1 = ProxyBase(c)
>>> class P(ProxyBase):
...     pass
>>> p2 = P(p1)
>>> p3 = ProxyBase(p2)
>>> list(ProxyIterator(p3)) == [p3, p2, p1, c]
1

test_queryInnerProxy()

>>> from zope.proxy import ProxyBase, queryProxy, queryInnerProxy
>>> class P1(ProxyBase):
...    pass
>>> class P2(ProxyBase):
...    pass
>>> class C(object):
...     pass
>>> c = C()
>>> queryInnerProxy(c, P1)
>>> queryInnerProxy(c, P1, 42)
42

>>> p1 = P1(c)
>>> int(queryProxy(p1, P1) is p1)
1

>>> queryInnerProxy(c, P2)
>>> queryInnerProxy(c, P2, 42)
42

>>> p2 = P2(p1)
>>> int(queryInnerProxy(p2, P1) is p1)
1

>>> int(queryInnerProxy(p2, P2) is p2)
1

>>> int(queryInnerProxy(p2, ProxyBase) is p1)
1
>>> p3 = P1(p2)
>>> int(queryProxy(p3, P1) is p3)
1

>>> int(queryInnerProxy(p3, P1) is p1)
1

>>> int(queryInnerProxy(p3, P2) is p2)
1

test_queryProxy()

>>> from zope.proxy import ProxyBase, queryProxy
>>> class P1(ProxyBase):
...    pass
>>> class P2(ProxyBase):
...    pass
>>> class C(object):
...     pass
>>> c = C()
>>> queryProxy(c, P1)
>>> queryProxy(c, P1, 42)
42

>>> p1 = P1(c)
>>> int(queryProxy(p1, P1) is p1)
1

>>> queryProxy(c, P2)
>>> queryProxy(c, P2, 42)
42

>>> p2 = P2(p1)
>>> int(queryProxy(p2, P1) is p1)
1

>>> int(queryProxy(p2, P2) is p2)
1

>>> int(queryProxy(p2, ProxyBase) is p2)
1

test_removeAllProxies()

>>> from zope.proxy import ProxyBase, removeAllProxies
>>> class C(object):
...     pass
>>> c = C()
>>> int(removeAllProxies(c) is c)
1

>>> p = ProxyBase(c)
>>> int(removeAllProxies(p) is c)
1

>>> p2 = ProxyBase(p)
>>> int(removeAllProxies(p2) is c)
1

test_sameProxiedObjects()

>>> from zope.proxy import ProxyBase, sameProxiedObjects
>>> class C(object):
...     pass
>>> c1 = C()
>>> c2 = C()
>>> int(sameProxiedObjects(c1, c1))
1

>>> int(sameProxiedObjects(ProxyBase(c1), c1))
1

>>> int(sameProxiedObjects(ProxyBase(c1), ProxyBase(c1)))
1

>>> int(sameProxiedObjects(ProxyBase(ProxyBase(c1)), c1))
1

>>> int(sameProxiedObjects(c1, ProxyBase(c1)))
1

>>> int(sameProxiedObjects(c1, ProxyBase(ProxyBase(c1))))
1

>>> int(sameProxiedObjects(c1, c2))
0

>>> int(sameProxiedObjects(ProxyBase(c1), c2))
0

>>> int(sameProxiedObjects(ProxyBase(c1), ProxyBase(c2)))
0

>>> int(sameProxiedObjects(ProxyBase(ProxyBase(c1)), c2))
0

>>> int(sameProxiedObjects(c1, ProxyBase(c2)))
0

>>> int(sameProxiedObjects(c1, ProxyBase(ProxyBase(c2))))
0

test_subclassing_proxies()

You can subclass ProxyBase

If you subclass a proxy, instances of the subclass have access to data defined in the class, including descriptors.

Your subclass instances don't get instance dictionaries, but they can have slots.
>>> class MyProxy(ProxyBase):
...    __slots__ = 'x', 'y'
...
...    def f(self):
...        return self.x
>>> l = [1, 2, 3]
>>> p = MyProxy(l)
I can use attributes defined by the class, including slots:
>>> p.x = 'x'
>>> p.x
'x'

>>> p.f()
'x'
I can also use attributes of the proxied object:
>>> p
[1, 2, 3]

>>> p.pop()
3

>>> p
[1, 2]

Generated by Epydoc 2.1 on Fri Jun 24 12:01:24 2005 http://epydoc.sf.net