From: Guido van Rossum Date: Fri, 17 Aug 2001 11:43:17 +0000 (+0000) Subject: metaclass(): add tests for metaclasses written in Python: one that X-Git-Tag: v2.2a3~482 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=309b56670491bd6e3b9ac8ba9aa0a5eef3d67446;p=thirdparty%2FPython%2Fcpython.git metaclass(): add tests for metaclasses written in Python: one that subclasses type, one that doesn't (the latter isn't fully functional yet). --- diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index f524dbaa5fdc..247a4c49b3c2 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -381,6 +381,39 @@ def metaclass(): class __metaclass__(type): def myself(cls): return cls verify(D.myself() == D) + d = D() + verify(d.__class__ is D) + class M1(type): + def __new__(cls, name, bases, dict): + dict['__spam__'] = 1 + return type.__new__(cls, name, bases, dict) + class C: + __metaclass__ = M1 + verify(C.__spam__ == 1) + c = C() + verify(c.__spam__ == 1) + class _instance(object): + pass + class M2(object): + def __new__(cls, name, bases, dict): + self = object.__new__(cls) + self.name = name + self.bases = bases + self.dict = dict + return self + __new__ = staticmethod(__new__) + def __call__(self): + it = _instance() + # XXX Should do more, but that doesn't work yet + return it + class C: + __metaclass__ = M2 + def spam(self): + return 42 + verify(C.name == 'C') + verify(C.bases == ()) + verify('spam' in C.dict) + c = C() def pymods(): if verbose: print "Testing Python subclass of module..."