|
|
from unittest import TestCase, makeSuite, TestSuite |
from unittest import TestCase, makeSuite, TestSuite |
from protocols.advice import * |
from protocols.advice import * |
|
import dispatch |
import sys |
import sys |
|
from types import InstanceType |
|
|
|
|
|
def ping(log, value): |
|
|
|
def pong(klass): |
|
log.append((value,klass)) |
|
return [klass] |
|
|
|
addClassAdvisor(pong) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SuperTest(TestCase): |
class SuperTest(TestCase): |
assert ClassOfSubMeta().foo(1)==2 |
assert ClassOfSubMeta().foo(1)==2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def checkPropSuper(self): |
def checkPropSuper(self): |
|
|
class Base(object): |
class Base(object): |
assert ob.foo == 2 |
assert ob.foo == 2 |
|
|
|
|
|
def checkSuperNotFound(self): |
|
class Base(object): |
|
pass |
|
|
|
b = Base() |
|
try: |
|
supermeta(Base,b).foo |
|
except AttributeError: |
|
pass |
|
else: |
|
raise AssertionError("Shouldn't have returned a value") |
|
|
|
|
|
|
|
|
|
|
|
|
|
class DecoratorTests(TestCase): |
|
|
|
def checkAssignAdvice(self): |
|
|
|
log = [] |
|
def track(f,k,v,d): |
|
log.append((f,k,v)) |
|
if k in f.f_locals: |
|
del f.f_locals[k] # simulate old-style advisor |
|
|
|
add_assignment_advisor(track,frame=sys._getframe()) |
|
test_var = 1 |
|
self.assertEqual(log, [(sys._getframe(),'test_var',1)]) |
|
log = [] |
|
add_assignment_advisor(track,1) |
|
test2 = 42 |
|
self.assertEqual(log, [(sys._getframe(),'test2',42)]) |
|
|
|
# Try doing double duty, redefining an existing variable... |
|
log = [] |
|
add_assignment_advisor(track,1) |
|
add_assignment_advisor(track,1) |
|
|
|
test2 = 42 |
|
self.assertEqual(log, [(sys._getframe(),'test2',42)]*2) |
|
|
|
|
|
def checkAs(self): |
|
|
|
def f(): pass |
|
|
|
[dispatch.as(lambda x: [x])] |
|
f1 = f |
|
|
|
self.assertEqual(f1, [f]) |
|
|
|
[dispatch.as(list, lambda x: (x,))] |
|
f1 = f |
|
self.assertEqual(f1, [f]) |
|
|
|
|
|
def check24DecoratorMode(self): |
|
|
|
log = [] |
|
def track(f,k,v,d): |
|
log.append((f,k,v)) |
|
return v |
|
|
|
def foo(x): pass |
|
|
|
add_assignment_advisor(track,1)(foo) |
|
x = 1 |
|
|
|
self.assertEqual(log, [(sys._getframe(),'foo',foo)]) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def ping(log, value): |
|
|
|
def pong(klass): |
|
log.append((value,klass)) |
|
return [klass] |
|
|
|
addClassAdvisor(pong) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
moduleLevelFrameInfo = getFrameInfo(sys._getframe()) |
|
|
|
class FrameInfoTest(TestCase): |
|
|
|
classLevelFrameInfo = getFrameInfo(sys._getframe()) |
|
|
|
def checkModuleInfo(self): |
|
kind,module,f_locals,f_globals = moduleLevelFrameInfo |
|
assert kind=="module" |
|
for d in module.__dict__, f_locals, f_globals: |
|
assert d is globals() |
|
|
|
def checkClassInfo(self): |
|
kind,module,f_locals,f_globals = self.classLevelFrameInfo |
|
assert kind=="class" |
|
assert f_locals['classLevelFrameInfo'] is self.classLevelFrameInfo |
|
for d in module.__dict__, f_globals: |
|
assert d is globals() |
|
|
|
|
|
def checkCallInfo(self): |
|
kind,module,f_locals,f_globals = getFrameInfo(sys._getframe()) |
|
assert kind=="function call" |
|
assert f_locals is locals() # ??? |
|
for d in module.__dict__, f_globals: |
|
assert d is globals() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MROTests(TestCase): |
|
|
|
def checkStdMRO(self): |
|
class foo(object): pass |
|
class bar(foo): pass |
|
class baz(foo): pass |
|
class spam(bar,baz): pass |
|
assert getMRO(spam) is spam.__mro__ |
|
|
|
def checkClassicMRO(self): |
|
class foo: pass |
|
class bar(foo): pass |
|
class baz(foo): pass |
|
class spam(bar,baz): pass |
|
basicMRO = [spam,bar,foo,baz,foo] |
|
assert list(getMRO(spam)) == basicMRO |
|
assert list(getMRO(spam,True)) == basicMRO+[InstanceType,object] |
|
|
|
|
|
|
assert determineMetaclass((meta,type))==metameta |
assert determineMetaclass((meta,type))==metameta |
|
|
|
|
|
|
|
|
|
|
TestClasses = ( |
TestClasses = ( |
SuperTest, AdviceTests, |
SuperTest, DecoratorTests, AdviceTests, FrameInfoTest, MROTests, |
) |
) |
|
|
def test_suite(): |
def test_suite(): |
|
|
|
|
|
|
|
|
|
|
|
|