def test_adapter_two_sources(): reg = Registry() @implements(ITarget) class Adapted(object): def __init__(self, alpha, beta): self.alpha = alpha self.beta = beta reg.register([IAlpha, IBeta], ITarget, '', Adapted) alpha = Alpha() beta = Beta() adapted = reg.adapt([alpha, beta], ITarget, '') assert isinstance(adapted, Adapted) assert adapted.alpha is alpha assert adapted.beta is beta adapted = ITarget(alpha, beta, lookup=reg) 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() @implements(IAlpha) class Adapter(object): def __init__(self, context): self.context = context # behavior without any registration; we get the object back assert reg.adapt([alpha], IAlpha, '') is alpha assert IAlpha(alpha, lookup=reg) is alpha # it works even without registry assert IAlpha(alpha) is alpha # behavior is the same with registration reg.register([IAlpha], IAlpha, '', Adapter) assert reg.adapt([alpha], IAlpha, '') is alpha assert IAlpha(alpha, lookup=reg) is alpha assert IAlpha(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 assert ITarget(lookup=reg) is foo
def test_adapter_one_source(): reg = Registry() @implements(ITarget) class Adapted(object): def __init__(self, context): self.context = context reg.register([IAlpha], ITarget, '', Adapted) alpha = Alpha() adapted = reg.adapt([alpha], ITarget, '') assert isinstance(adapted, Adapted) assert adapted.context is alpha adapted = ITarget(alpha, lookup=reg) assert isinstance(adapted, Adapted) assert adapted.context is alpha adapted = ITarget.adapt(alpha, lookup=reg) assert isinstance(adapted, Adapted) assert adapted.context is alpha