Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
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