[Subversion] / ProxyTypes / test_proxies.py  

View of /ProxyTypes/test_proxies.py

Parent Directory | Revision Log
Revision: 2223 - (download) (as text)
Thu Jul 20 01:31:07 2006 UTC (17 years, 9 months ago) by pje
File size: 4984 byte(s)
Exhaustive tests of every corner of the object model I could think of.  
Should be ready for release now... (famous last words!)
import unittest
from peak.util.proxies import *

class ProxyTestMixin:

    def checkInteger(self, v):
        p = self.proxied(v)
        self.assertEqual(p|010101, v|010101)
        self.assertEqual(p&010101, v&010101)
        self.assertEqual(p^010101, v^010101)
        self.assertEqual(~p, ~v)
        self.assertEqual(p<<3, v<<3)
        self.assertEqual(p>>2, v>>2)

        self.assertEqual(010101|p, 010101|v)
        self.assertEqual(010101&p, 010101&v)
        self.assertEqual(010101^p, 010101^v)
        self.assertEqual(3<<p, 3<<v)
        self.assertEqual(2>>p, 2>>v)
        for f in hex, oct:
            self.assertEqual(f(p), f(v))

        self.checkNumeric(v)

    def checkNumeric(self, v):
        p = self.proxied(v)
        self.assertEqual(p*2, v*2)
        self.assertEqual(2*p, 2*v)
        self.assertEqual(2**p, 2**v)
        self.assertEqual(p**2, v**2)
        self.assertEqual(-p, -v)
        self.assertEqual(+p, +v)
        for f in abs, int, long, float, hash, complex:
            self.assertEqual(f(p), f(v))
        self.assertEqual(p<22, v<22)
        self.assertEqual(p>=10, v>=10)
        self.assertEqual(p>9.0, v>9.0)
        self.assertEqual(p<=9.25, v<=9.25)
        self.assertEqual(p==7, v==7)
        self.assertEqual(p!=18, v!=18)

        self.assertEqual(16+p, 16+v)
        self.assertEqual(62-p, 62-v)
        self.assertEqual(p+16, v+16)
        self.assertEqual(p-62, v-62)
        self.assertEqual(p%7, v%7)
        self.assertEqual(p/6, v/6)

        self.assertEqual(22<p, 22<v)
        self.assertEqual(10>=p, 10>=v)
        self.assertEqual(9.0>p, 9.0>v)
        self.assertEqual(9.25<=p, 9.25<=v)
        self.assertEqual(7==p, 7==v)
        self.assertEqual(18!=p, 18!=v)

        self.assertEqual(cmp(p,14), cmp(v,14))
        self.assertEqual(cmp(14,p), cmp(14,v))

        self.assertEqual(divmod(p,3), divmod(v,3))

        if v:
            self.assertEqual(divmod(3,p), divmod(3,v))
            self.assertEqual(62//p, 62//v)
            self.assertEqual(7/p, 7/v)
            self.assertEqual(7%p, 7%v)

        self.checkBasics(v)

    def checkList(self, v):
        p = self.proxied(v)
        for i in range(len(v)):
            self.assertEqual(p[i], v[i])
            self.assertEqual(p[i:], v[i:])
            self.assertEqual(p[:i], v[:i])
            self.assertEqual(p[i::-1], v[i::-1])
        self.checkContainer(v)

        c = list(v)
        del p[::1]
        del c[::1]
        self.assertEqual(v, c)

        p[1:1] = [23]
        c[1:1] = [23]
        self.assertEqual(v, c)

    def checkContainer(self, v):
        p = self.proxied(v)
        self.assertEqual(list(p), list(v))
        self.assertEqual(list(iter(p)), list(iter(v)))
        self.assertEqual(len(p), len(v))
        self.assertEqual(42 in p, 42 in v)
        self.assertEqual(99 in p, 99 in v)
        self.checkBasics(v)

    def checkBasics(self, v):
        p = self.proxied(v)
        for f in bool, repr, str:
            self.assertEqual(f(p), f(v))

    def testNumbers(self):
        for i in range(20):
            self.checkInteger(i)

        f = -40
        while f<=20.0:
            self.checkNumeric(f)
            f += 2.25

    def testLists(self):
        from UserList import UserList
        for d in [1,2], [3,42,59], [99,23,55]:
            self.checkList(d)
            self.checkList(UserList(d))









class InPlaceMixin(ProxyTestMixin):

    def checkInteger(self, vv):
        mk = lambda: (self.proxied(vv), vv)
        p,v = mk(); p|=010101; v|=010101; self.assertEqual(p.__subject__, v)
        p,v = mk(); p&=010101; v&=010101; self.assertEqual(p.__subject__, v)
        p,v = mk(); p^=010101; v^=010101; self.assertEqual(p.__subject__, v)
        p,v = mk(); p<<=3; v<<=3; self.assertEqual(p.__subject__, v)
        p,v = mk(); p>>=3; v>>=3; self.assertEqual(p.__subject__, v)
        ProxyTestMixin.checkInteger(self, vv)

    def checkNumeric(self, vv):
        mk = lambda: (self.proxied(vv), vv)
        p,v = mk(); p+=17; v+=17; self.assertEqual(p.__subject__, v)
        p,v = mk(); p-=22; v-=22; self.assertEqual(p.__subject__, v)
        p,v = mk(); p*=15; v*=15; self.assertEqual(p.__subject__, v)
        p,v = mk(); p//=3; v//=3; self.assertEqual(p.__subject__, v)
        p,v = mk(); p**=2; v**=2; self.assertEqual(p.__subject__, v)
        p,v = mk(); p/=61; v/=61; self.assertEqual(p.__subject__, v)
        p,v = mk(); p%=19; v%=19; self.assertEqual(p.__subject__, v)
        ProxyTestMixin.checkNumeric(self, vv)


class TestCallbackProxy(ProxyTestMixin, unittest.TestCase):
    proxied = lambda self, v: CallbackProxy(lambda:v)

class TestObjectProxy(InPlaceMixin, unittest.TestCase):
    proxied = ObjectProxy

class TestLazyProxy(InPlaceMixin, unittest.TestCase):
    proxied = lambda self, v: LazyProxy(lambda:v)

def additional_tests():
    import doctest
    return doctest.DocFileSuite(
        'README.txt', 'quirky-tests.txt', optionflags=doctest.ELLIPSIS,
    )





cvs-admin@eby-sarna.com

Powered by ViewCVS 1.0-dev

ViewCVS and CVS Help