def test_adapter_two_sources(): reg = Registry() class Adapted(ITarget): def __init__(self, alpha, beta): self.alpha = alpha self.beta = beta def foo(self): pass reg.register(ITarget, [IAlpha, IBeta], Adapted) alpha = Alpha() beta = Beta() adapted = reg.adapt(ITarget, [alpha, beta]) assert isinstance(adapted, Adapted) assert adapted.alpha is alpha assert adapted.beta is beta adapted = ITarget.adapt(alpha, beta, lookup=reg) assert isinstance(adapted, Adapted) assert adapted.alpha is alpha assert adapted.beta is beta
def test_adapter_to_itself(): reg = Registry() alpha = Alpha() class Adapter(IAlpha): def __init__(self, context): self.context = context # behavior without any registration; we get the object back assert reg.adapt(IAlpha, [alpha]) is alpha assert IAlpha.adapt(alpha, lookup=reg) is alpha # it works even without registry (even implicitly registered!) assert IAlpha.adapt(alpha) is alpha # behavior is the same with registration reg.register(IAlpha, [IAlpha], Adapter) assert reg.adapt(IAlpha, [alpha]) is alpha assert IAlpha.adapt(alpha, lookup=reg) is alpha assert IAlpha.adapt(alpha) is alpha
def test_adapter_no_source(): reg = Registry() foo = object() def factory(): return foo reg.register(ITarget, (), factory) assert reg.adapt(ITarget, []) is foo assert ITarget.adapt(lookup=reg) is foo
def test_adapter_one_source(): reg = Registry() class Adapted(ITarget): def __init__(self, context): self.context = context def foo(self): pass reg.register(ITarget, [IAlpha], Adapted) alpha = Alpha() adapted = reg.adapt(ITarget, [alpha]) assert isinstance(adapted, Adapted) assert adapted.context is alpha adapted = ITarget.adapt(alpha, lookup=reg) assert isinstance(adapted, Adapted) assert adapted.context is alpha