test_new.py
来自「mallet是自然语言处理、机器学习领域的一个开源项目。」· Python 代码 · 共 109 行
PY
109 行
from test_support import verbose, verifyimport sysimport newclass Eggs: def get_yolks(self): return self.yolksprint 'new.module()'m = new.module('Spam')if verbose: print mm.Eggs = Eggssys.modules['Spam'] = mimport Spamdef get_more_yolks(self): return self.yolks + 3print 'new.classobj()'C = new.classobj('Spam', (Spam.Eggs,), {'get_more_yolks': get_more_yolks})if verbose: print Cprint 'new.instance()'c = new.instance(C, {'yolks': 3})if verbose: print co = new.instance(C)verify(o.__dict__ == {}, "new __dict__ should be empty")del oo = new.instance(C, None)verify(o.__dict__ == {}, "new __dict__ should be empty")del odef break_yolks(self): self.yolks = self.yolks - 2print 'new.instancemethod()'im = new.instancemethod(break_yolks, c, C)if verbose: print imverify(c.get_yolks() == 3 and c.get_more_yolks() == 6, 'Broken call of hand-crafted class instance')im()verify(c.get_yolks() == 1 and c.get_more_yolks() == 4, 'Broken call of hand-crafted instance method')# It's unclear what the semantics should be for a code object compiled at# module scope, but bound and run in a function. In CPython, `c' is global# (by accident?) while in Jython, `c' is local. The intent of the test# clearly is to make `c' global, so let's be explicit about it.codestr = '''global ca = 1b = 2c = a + b'''ccode = compile(codestr, '<string>', 'exec')# Jython doesn't have a __builtins__, so use a portable alternativeimport __builtin__g = {'c': 0, '__builtins__': __builtin__}# this test could be more robustprint 'new.function()'func = new.function(ccode, g)if verbose: print funcfunc()verify(g['c'] == 3, 'Could not create a proper function object')# test the various extended flavors of function.newdef f(x): def g(y): return x + y return gg = f(4)new.function(f.func_code, {}, "blah")g2 = new.function(g.func_code, {}, "blah", (2,), g.func_closure)verify(g2() == 6)g3 = new.function(g.func_code, {}, "blah", None, g.func_closure)verify(g3(5) == 9)def test_closure(func, closure, exc): try: new.function(func.func_code, {}, "", None, closure) except exc: pass else: print "corrupt closure accepted"test_closure(g, None, TypeError) # invalid closuretest_closure(g, (1,), TypeError) # non-cell in closuretest_closure(g, (1, 1), ValueError) # closure is wrong sizetest_closure(f, g.func_closure, ValueError) # no closure neededprint 'new.code()'# bogus test of new.code()# Note: Jython will never have new.code()if hasattr(new, 'code'): d = new.code(3, 3, 3, 3, codestr, (), (), (), "<string>", "<name>", 1, "", (), ()) # test backwards-compatibility version with no freevars or cellvars d = new.code(3, 3, 3, 3, codestr, (), (), (), "<string>", "<name>", 1, "") if verbose: print d
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?