test_descr.py

来自「mallet是自然语言处理、机器学习领域的一个开源项目。」· Python 代码 · 共 2,316 行 · 第 1/5 页

PY
2,316
字号
        def dmethod(self):            return "D a"        def all_method(self):            return "D b"    class M2(object, D):        def m2method(self):            return "M2 a"        def all_method(self):            return "M2 b"    vereq(M2.__mro__, (M2, object, D, C))    m = M2()    vereq(m.cmethod(), "C a")    vereq(m.dmethod(), "D a")    vereq(m.m2method(), "M2 a")    vereq(m.all_method(), "M2 b")    class M3(M1, object, M2):        def m3method(self):            return "M3 a"        def all_method(self):            return "M3 b"    # XXX Expected this (the commented-out result):    # vereq(M3.__mro__, (M3, M1, M2, object, D, C))    vereq(M3.__mro__, (M3, M1, M2, D, C, object))  # XXX ?    m = M3()    vereq(m.cmethod(), "C a")    vereq(m.dmethod(), "D a")    vereq(m.m1method(), "M1 a")    vereq(m.m2method(), "M2 a")    vereq(m.m3method(), "M3 a")    vereq(m.all_method(), "M3 b")    class Classic:        pass    try:        class New(Classic):            __metaclass__ = type    except TypeError:        pass    else:        raise TestFailed, "new class with only classic bases - shouldn't be"def diamond():    if verbose: print "Testing multiple inheritance special cases..."    class A(object):        def spam(self): return "A"    vereq(A().spam(), "A")    class B(A):        def boo(self): return "B"        def spam(self): return "B"    vereq(B().spam(), "B")    vereq(B().boo(), "B")    class C(A):        def boo(self): return "C"    vereq(C().spam(), "A")    vereq(C().boo(), "C")    class D(B, C): pass    vereq(D().spam(), "B")    vereq(D().boo(), "B")    vereq(D.__mro__, (D, B, C, A, object))    class E(C, B): pass    vereq(E().spam(), "B")    vereq(E().boo(), "C")    vereq(E.__mro__, (E, C, B, A, object))    class F(D, E): pass    vereq(F().spam(), "B")    vereq(F().boo(), "B")    vereq(F.__mro__, (F, D, E, B, C, A, object))    class G(E, D): pass    vereq(G().spam(), "B")    vereq(G().boo(), "C")    vereq(G.__mro__, (G, E, D, C, B, A, object))def objects():    if verbose: print "Testing object class..."    a = object()    vereq(a.__class__, object)    vereq(type(a), object)    b = object()    verify(a is not b)    verify(not hasattr(a, "foo"))    try:        a.foo = 12    except (AttributeError, TypeError):        pass    else:        verify(0, "object() should not allow setting a foo attribute")    verify(not hasattr(object(), "__dict__"))    class Cdict(object):        pass    x = Cdict()    vereq(x.__dict__, {})    x.foo = 1    vereq(x.foo, 1)    vereq(x.__dict__, {'foo': 1})def slots():    if verbose: print "Testing __slots__..."    class C0(object):        __slots__ = []    x = C0()    verify(not hasattr(x, "__dict__"))    verify(not hasattr(x, "foo"))    class C1(object):        __slots__ = ['a']    x = C1()    verify(not hasattr(x, "__dict__"))    verify(not hasattr(x, "a"))    x.a = 1    vereq(x.a, 1)    x.a = None    veris(x.a, None)    del x.a    verify(not hasattr(x, "a"))    class C3(object):        __slots__ = ['a', 'b', 'c']    x = C3()    verify(not hasattr(x, "__dict__"))    verify(not hasattr(x, 'a'))    verify(not hasattr(x, 'b'))    verify(not hasattr(x, 'c'))    x.a = 1    x.b = 2    x.c = 3    vereq(x.a, 1)    vereq(x.b, 2)    vereq(x.c, 3)    # Test leaks    class Counted(object):        counter = 0    # counts the number of instances alive        def __init__(self):            Counted.counter += 1        def __del__(self):            Counted.counter -= 1    class C(object):        __slots__ = ['a', 'b', 'c']    x = C()    x.a = Counted()    x.b = Counted()    x.c = Counted()    vereq(Counted.counter, 3)    del x    vereq(Counted.counter, 0)    class D(C):        pass    x = D()    x.a = Counted()    x.z = Counted()    vereq(Counted.counter, 2)    del x    vereq(Counted.counter, 0)    class E(D):        __slots__ = ['e']    x = E()    x.a = Counted()    x.z = Counted()    x.e = Counted()    vereq(Counted.counter, 3)    del x    vereq(Counted.counter, 0)    # Test cyclical leaks [SF bug 519621]    class F(object):        __slots__ = ['a', 'b']    log = []    s = F()    s.a = [Counted(), s]    vereq(Counted.counter, 1)    s = None    import gc    gc.collect()    vereq(Counted.counter, 0)    # Test lookup leaks [SF bug 572567]    import sys,gc    class G(object):        def __cmp__(self, other):            return 0    g = G()    orig_objects = len(gc.get_objects())    for i in xrange(10):        g==g    new_objects = len(gc.get_objects())    vereq(orig_objects, new_objects)def dynamics():    if verbose: print "Testing class attribute propagation..."    class D(object):        pass    class E(D):        pass    class F(D):        pass    D.foo = 1    vereq(D.foo, 1)    # Test that dynamic attributes are inherited    vereq(E.foo, 1)    vereq(F.foo, 1)    # Test dynamic instances    class C(object):        pass    a = C()    verify(not hasattr(a, "foobar"))    C.foobar = 2    vereq(a.foobar, 2)    C.method = lambda self: 42    vereq(a.method(), 42)    C.__repr__ = lambda self: "C()"    vereq(repr(a), "C()")    C.__int__ = lambda self: 100    vereq(int(a), 100)    vereq(a.foobar, 2)    verify(not hasattr(a, "spam"))    def mygetattr(self, name):        if name == "spam":            return "spam"        raise AttributeError    C.__getattr__ = mygetattr    vereq(a.spam, "spam")    a.new = 12    vereq(a.new, 12)    def mysetattr(self, name, value):        if name == "spam":            raise AttributeError        return object.__setattr__(self, name, value)    C.__setattr__ = mysetattr    try:        a.spam = "not spam"    except AttributeError:        pass    else:        verify(0, "expected AttributeError")    vereq(a.spam, "spam")    class D(C):        pass    d = D()    d.foo = 1    vereq(d.foo, 1)    # Test handling of int*seq and seq*int    class I(int):        pass    vereq("a"*I(2), "aa")    vereq(I(2)*"a", "aa")    vereq(2*I(3), 6)    vereq(I(3)*2, 6)    vereq(I(3)*I(2), 6)    # Test handling of long*seq and seq*long    class L(long):        pass    vereq("a"*L(2L), "aa")    vereq(L(2L)*"a", "aa")    vereq(2*L(3), 6)    vereq(L(3)*2, 6)    vereq(L(3)*L(2), 6)    # Test comparison of classes with dynamic metaclasses    class dynamicmetaclass(type):        pass    class someclass:        __metaclass__ = dynamicmetaclass    verify(someclass != object)def errors():    if verbose: print "Testing errors..."    try:        class C(list, dict):            pass    except TypeError:        pass    else:        verify(0, "inheritance from both list and dict should be illegal")    try:        class C(object, None):            pass    except TypeError:        pass    else:        verify(0, "inheritance from non-type should be illegal")    class Classic:        pass    try:        class C(type(len)):            pass    except TypeError:        pass    else:        verify(0, "inheritance from CFunction should be illegal")    try:        class C(object):            __slots__ = 1    except TypeError:        pass    else:        verify(0, "__slots__ = 1 should be illegal")    try:        class C(object):            __slots__ = [1]    except TypeError:        pass    else:        verify(0, "__slots__ = [1] should be illegal")def classmethods():    if verbose: print "Testing class methods..."    class C(object):        def foo(*a): return a        goo = classmethod(foo)    c = C()    vereq(C.goo(1), (C, 1))    vereq(c.goo(1), (C, 1))    vereq(c.foo(1), (c, 1))    class D(C):        pass    d = D()    vereq(D.goo(1), (D, 1))    vereq(d.goo(1), (D, 1))    vereq(d.foo(1), (d, 1))    vereq(D.foo(d, 1), (d, 1))    # Test for a specific crash (SF bug 528132)    def f(cls, arg): return (cls, arg)    ff = classmethod(f)    vereq(ff.__get__(0, int)(42), (int, 42))    vereq(ff.__get__(0)(42), (int, 42))    # Test super() with classmethods (SF bug 535444)    veris(C.goo.im_self, C)    veris(D.goo.im_self, D)    veris(super(D,D).goo.im_self, D)    veris(super(D,d).goo.im_self, D)    vereq(super(D,D).goo(), (D,))    vereq(super(D,d).goo(), (D,))def staticmethods():    if verbose: print "Testing static methods..."    class C(object):        def foo(*a): return a        goo = staticmethod(foo)    c = C()    vereq(C.goo(1), (1,))    vereq(c.goo(1), (1,))    vereq(c.foo(1), (c, 1,))    class D(C):        pass    d = D()    vereq(D.goo(1), (1,))    vereq(d.goo(1), (1,))    vereq(d.foo(1), (d, 1))    vereq(D.foo(d, 1), (d, 1))def classic():    if verbose: print "Testing classic classes..."    class C:        def foo(*a): return a        goo = classmethod(foo)    c = C()    vereq(C.goo(1), (C, 1))    vereq(c.goo(1), (C, 1))    vereq(c.foo(1), (c, 1))    class D(C):        pass    d = D()    vereq(D.goo(1), (D, 1))    vereq(d.goo(1), (D, 1))    vereq(d.foo(1), (d, 1))    vereq(D.foo(d, 1), (d, 1))    class E: # *not* subclassing from C        foo = C.foo    vereq(E().foo, C.foo) # i.e., unbound    verify(repr(C.foo.__get__(C())).startswith("<bound method "))def compattr():    if verbose: print "Testing computed attributes..."    class C(object):        class computed_attribute(object):            def __init__(self, get, set=None, delete=None):                self.__get = get                self.__set = set                self.__delete = delete            def __get__(self, obj, type=None):                return self.__get(obj)            def __set__(self, obj, value):                return self.__set(obj, value)            def __delete__(self, obj):                return self.__delete(obj)        def __init__(self):            self.__x = 0        def __get_x(self):            x = self.__x            self.__x = x+1            return x        def __set_x(self, x):            self.__x = x        def __delete_x(self):            del self.__x        x = computed_attribute(__get_x, __set_x, __delete_x)    a = C()    vereq(a.x, 0)    vereq(a.x, 1)    a.x = 10    vereq(a.x, 10)    vereq(a.x, 11)    del a.x    vereq(hasattr(a, 'x'), 0)def newslot():    if verbose: print "Testing __new__ slot override..."    class C(list):        def __new__(cls):            self = list.__new__(cls)            self.foo = 1            return self        def __init__(self):            self.foo = self.foo + 2    a = C()    vereq(a.foo, 3)    verify(a.__class__ is C)    class D(C):        pass    b = D()    vereq(b.foo, 3)    verify(b.__class__ is D)def altmro():    if verbose: print "Testing mro() and overriding it..."    class A(object):        def f(self): return "A"    class B(A):        pass    class C(A):        def f(self): return "C"    class D(B, C):        pass    vereq(D.mro(), [D, B, C, A, object])    vereq(D.__mro__, (D, B, C, A, object))    vereq(D().f(), "C")    class PerverseMetaType(type):        def mro(cls):            L = type.mro(cls)            L.reverse()            return L    class X(A,B,C,D):        __metaclass__ = PerverseMetaType    vereq(X.__mro__, (object, A, C, B, D, X))    vereq(X().f(), "A")def overloading():    if verbose: print "Testing operator overloading..."    class B(object):        "Intermediate class because object doesn't have a __setattr__"

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?